F407的hal库串口一直进入串口接收中断的bug

2019-07-20 09:46发布

//串口6中断服务程序
代码是仿照串口1的程序该来的,测试时串口接收数据比较多时,就容易导致这个bug,一直进入串口接收中断,if条件一直满足,即使串口6的硬件连接都断开了,依然始终进入串口接收中断
串口1有时也会出现这个问题,一直进入串口接收中断,程序死在这里,不能执行其他的操作,也不进入hardfault。
请问各位大神,有遇到过这个问题吗?有什么解决方法呢?
void USART6_IRQHandler(void)                       
{
        u8 Res;
        u8 flag;
#if SYSTEM_SUPPORT_OS                 //使用OS
        OSIntEnter();   
#endif
        if((__HAL_UART_GET_FLAG(&UART6_Handler,UART_FLAG_RXNE)!=RESET))
        {
        HAL_UART_Receive(&UART6_Handler,&Res,1,1000);
                usart6_rec_buf[wk2114_read_len++]=Res;
        }
        HAL_UART_IRQHandler(&UART6_Handler);       
#if SYSTEM_SUPPORT_OS                 //使用OS
        OSIntExit();                                                                                           
#endif
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
Noctis
1楼-- · 2019-07-20 10:13
 精彩回答 2  元偷偷看……
Noctis
2楼-- · 2019-07-20 14:52
HAL_UART_Receive() 是阻塞式函数,不要在中断中使用!!!
江枫三号楼
3楼-- · 2019-07-20 16:17
Noctis 发表于 2018-1-12 10:09
HAL_UART_Receive() 是阻塞式函数,不要在中断中使用!!!

在实际调试时发现,程序并没有停在HAL_UART_Receive这里,程序是一直在运行的,一直进入中断,if条件一直满足。
原子的源码程序就是推荐这种写法的。
江枫三号楼
4楼-- · 2019-07-20 19:12
 精彩回答 2  元偷偷看……
abdfgh
5楼-- · 2019-07-20 21:18
 精彩回答 2  元偷偷看……
江枫三号楼
6楼-- · 2019-07-20 23:24
abdfgh 发表于 2018-1-28 15:18
交易看HAL_USART_.c的官方库函数的说明介绍,最方便是用DMA模式,平常使用IT模式的接收发送函数,只有程序 ...

使用的是gprs模块,接收发送长度不确定,就没用DMA。刚开始是使用IT模式,但是在接收数据时,有时会无缘无故得持续进入接收中断,即使把接收线断开,还是会进入,原因不明。最后改用那个阻塞函数,加了个超时判断,暂时没发现问题。
时间紧,功能多,有些东西都没时间细细研究,能用没出现问题,就糊弄过去了,等时间充裕了可能要好好研究部一番hal库的串口。

一周热门 更多>