解决CUBEMX配置生成的UART无法进入中断的问题


最近使用STM32F107在进行开发,用CUBEMX配置UART作为串口和上位机通讯,然而一直无法接收到数据,调试了一个上午,硬件检查过,包括重写RX回调函数都试过了,但就是无法正常接收数据。


之后找了一个重写回调的函数,移植程序结构,编译执行发现在执行其中的  HAL_UART_Receive_IT  这一函数后,会能接收一次中断发出的数据(也就是复位后能进入一次中断),怀疑是因为HAL的bug或者cubemx生成代码有bug!进入该函数内部,最后筛选出两条代码添加在主函数循环前,以及中断处理函数末尾,串口就能正常进入中断了。




这两句为:

__HAL_UART_ENABLE_IT(&huart4, UART_IT_ERR)


__HAL_UART_ENABLE_IT(&huart4,UART_IT_RXNE)



可以看主要只是第二参数变化,这一宏定义函数主要功能是将中断控制寄存器置参数二的位置,也就是重置了ERR和RXNE标志位



中断处理函数的参考代码:

void UART4_IRQHandler(void)
{
char aRxBuffer[1];

  HAL_UART_Transmit(&huart4,"Hello,Enter Interrupt\r\n",26,0xFFFF);

  HAL_UART_IRQHandler(&huart4);

    /* Enable the UART Error Interrupt: (Frame error, noise error, overrun error) */
    __HAL_UART_ENABLE_IT(&huart4, UART_IT_ERR);

    /* Enable the UART Data Register not empty Interrupt */
    __HAL_UART_ENABLE_IT(&huart4, UART_IT_RXNE);


}




  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值