如题,求救各位大神,我使用stm32cube生成的串口中断程序,现在遇到我用PC的串口助手发送数据可以跳进接收中断函数(见图3),但是却每次都好像没有数据一样跳回主循环。如下面图1,我设置断点,单步到了UART_Receive_IT()下的接收状态判断,然后就被跳转到图2的结束地方,查看变量监控窗口,确实是处于ready状态所有跳不进去处理部分。 小弟有以下几个疑问: 1.按照描述,应该是要当处于rx_busy就是在处理的状态下才能进行处理,但是为什么都已经触发了接收中断了,还是没有改变状态? 2.我如果修改了判断条件,改成ready,处理到if(huart->Init.Parity == UART_PARITY_NONE)部分下就直接跳出到主循环,为什么会产生这个情况?明明只是单纯的赋值而已? |
用来开启串口(不然只能进去一次接收中断函数)。
评分
查看全部评分
可是我不加断点,在回调函数里面加一个LED翻转判断没有进入回调函数,是什么鬼?
楼主必须配置系统时钟为72MHZ串口才能够正常通信
评分
查看全部评分
大神,我重新配置了时钟也不行,设定了一个LED翻转语句,在接收中断函数可以被触发,但是在main里面定义的接收回调函数却不可以。我只添加了三个地方的代码,一个在接收中断函数,一个在主函数,一个在串口初始化文件,能不能帮忙看看是遗漏了还是配置错了?谢谢。
评分
查看全部评分
楼主貌似没有开始串口接收:
HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, Size);
怎么调?能指点一下么?
我在while循环前面加了HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 1),变成只能进入一次接收回调函数,我也在接收回调函数里面加了 __HAL_UART_CLEAR_FLAG(&huart1,UART_FLAG_RXNE);
__HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);
变成可以进入一次回调函数了,之后就再也进不了回调函数,但是可以再进入中断接收函数(我设置了断点可以跳转)。如果receive_IT后面的size参数不是数字而是一个uint16_t的变量,压根就进不了回调函数。
对于这次调串口遇到的坑,小弟整理在了博客,如果有需要可以去看看。
http://blog.csdn.net/qq_42041980/article/details/92718642
评分
查看全部评分