使用STM32 HAL生成的程序,串口接收数据出错。使用HAL_UART_Receive_IT(&huart2,(uint8_t *)&aRxBuffer,1)接收数据,然后串口中断里每接收一个数据,继续使用这个HAL_UART_Receive_IT(&huart2,(uint8_t *)&aRxBuffer,1)接收。使用中会出现 不接收的问题。。这个子程序之前看网上贴子。是因为同时可能在发送,子程序里面那个 lock 无法实现,所以已经去除。后面有所改善,但发现最终没有解决
|
微信公众号
手机版
中断函数里面拿到接收的数据后,直接调用 HAL_UART_Receive_IT(&huart2,(uint8_t *)&aRxBuffer,1) 函数就可以了。
感谢但是我的程序员(我是负责测试的)答复:
刚那个不是中断接收函数
我也做了他说的 没改善
谢谢楼上的 我试试看
void USART1_IRQHandler(void)
{
volatile uint32_t mu_flag = 0;
volatile uint32_t mu;
mu_flag =__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE);
if((mu_flag != RESET))
{
__HAL_UART_CLEAR_IDLEFLAG(&huart1);
mu = huart1.Instance->SR;
mu = huart1.Instance->DR;
HAL_UART_DMAStop(&huart1);
recv_end_flag = 1; //这个标志位是全局
}
//HAL_UART_IRQHandler(&huart1);//这个注释掉
}
然后在初始化函数里面加上
/* USER CODE BEGIN 2 */
__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);//
HAL_UART_Receive_DMA(&huart1,Rxbuff,BUFFER_SIZE);//
/* USER CODE END 2 */