540429224 发表于 2019-6-15 20:40:27

stm32cube生成的串口中断代码异常

如题,小弟用stm32cube生成了uart1的中断代码,配合一个LED灯指示。生成代码后只在HAL_UART_MspInit()函数和中断处理函数USART1_IRQHandler()里面加了__HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE)使能串口接收中断,其他地方都没有修改。

在中断处理函数USART1_IRQHandler()中加入HAL_GPIO_TogglePin(indicate_LED_GPIO_Port,indicate_LED_Pin)用来翻转LED。
问题来了,全速跑之后通过PC的串口调试助手发信息,第一次LED翻转了,但是再发就不反转了。使用debug模式下,断点+单步调试发现程序跳转到UART_Receive_IT()函数的时候发现huart->RxState == HAL_UART_STATE_BUSY_RX这个条件不满足,然后就跳出了中断函数,之后就一直就进不去中断函数了。

请问各位大神,问题出在哪里啊?:'(


edmundlee 发表于 2019-6-15 23:05:30

查错就需要查看寄存器, 查一下USART1->SR的内容是什么, 大慨就能猜到是什么问题了

540429224 发表于 2019-6-16 11:05:39

edmundlee 发表于 2019-6-15 23:05
查错就需要查看寄存器, 查一下USART1->SR的内容是什么, 大慨就能猜到是什么问题了 ...

难道官方cube生成的代码有这么大个坑?按道理应该生成的代码能直接用才对啊~~

edmundlee 发表于 2019-6-16 13:06:45

540429224 发表于 2019-6-16 11:05
难道官方cube生成的代码有这么大个坑?按道理应该生成的代码能直接用才对啊~~ ...

是软件就会有Bug, 不管是ST的还是ARM的
就ARM 的V6.11编译器我都碰到过有Bug, ST写的就不能有Bug?

540429224 发表于 2019-6-16 15:21:07

edmundlee 发表于 2019-6-16 13:06
是软件就会有Bug, 不管是ST的还是ARM的
就ARM 的V6.11编译器我都碰到过有Bug, ST写的就不能有Bug? ...

查到了官方库没有清RXNE的flag行为,导致再进去就忙~~:dizzy:
页: [1]
查看完整版本: stm32cube生成的串口中断代码异常