在线时间20 小时
UID2042796
ST金币0
蝴蝶豆0
注册时间2013-9-18
中级会员
- 最后登录
- 2020-4-28
|
a0a.1 32b0c
首先介绍一下实验环境:单片机为stm32f415
调试器:st-link
硬件初始化:
*串口波特率为614400
*采用定时器每隔500us触发一次串口中断发送
*发送完成后进入中断接收模式
定时器中断回调函数如下:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim==&htim14)
{
GYRO_Handle.cmd_GYRO=GYRO_CMD;
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET); 使能发送
HAL_UART_Transmit_IT(&huart3, &GYRO_Handle.cmd_GYRO, 1); 开启中断发送,然后进入发送模式
}
}
发送完成后进入发送中断完成回调函数:
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart==&huart3)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET); 使能接收
HAL_UART_Receive_IT(&huart3, GYRO_Handle.frame_GYRO, 7); 开启中断接收,然后进入接收模式
}
}
接收中断完成回调函数:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart==&huart3)
{
用户函数区域
}
}
实验结果:
发送没有问题,可成功发送。
接收只能收到第一个字节。
接收服务函数老是进入错误服务函数,错误号为数据溢出
已经分析两天了,还是没有找到问题,求大师分析。
|
|