首先介绍一下实验环境:
单片机为
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)
{
用户函数区域
}
}
实验结果:
发送没有问题,可成功发送。
接收只能收到第一个字节。
接收服务函数老是进入错误服务函数,错误号为数据溢出
已经分析两天了,还是没有找到问题,求大师分析。
HAL_UART_Receive_IT 只需要调用一次。
还有就是你的接收函数里都干了些什么,会不会时间超长了。
一周热门 更多>