OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2877|回复: 5

F429串口接收中断卡死,求大神们解决

[复制链接]

23

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2312
金钱
2312
注册时间
2017-7-6
在线时间
280 小时
发表于 2017-7-20 17:59:51 | 显示全部楼层 |阅读模式
3金钱
先说说具体情况吧,工程中用到F429的串口1、2、4、7接收中断,我用接收中断的回调函数void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)来处理数据,但是有时就会卡死在while(HAL_UART_Receive_IT(&UART1_Handler, (u8 *)aRxBuffer1, RXBUFFERSIZE) != HAL_OK)出不来,这说明我huart->State!=HAL_UART_STATE_READY && huart->State!=HAL_UART_STATE_BUSY_TX;但是我串口的发送端都没发数据了,它还是出不来。很多天了,心塞

最佳答案

查看完整内容[请看2#楼]

好久没人回帖,我后面没用HAL库,问题解决了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

23

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2312
金钱
2312
注册时间
2017-7-6
在线时间
280 小时
 楼主| 发表于 2017-7-20 17:59:52 | 显示全部楼层
好久没人回帖,我后面没用HAL库,问题解决了
回复

使用道具 举报

23

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2312
金钱
2312
注册时间
2017-7-6
在线时间
280 小时
 楼主| 发表于 2017-7-20 18:01:45 | 显示全部楼层
[mw_shl_code=c,true]//´®¿Ú1ÖжϷþÎñ³ÌÐò
void USART1_IRQHandler(void)                       
{
        u8 Res;
        u32 timeout=0;
#if SYSTEM_SUPPORT_OS                 //ʹÓÃOS
        OSIntEnter();   
#endif
       
        HAL_UART_IRQHandler(&UART1_Handler);        //µ÷ÓÃHAL¿âÖжϴ¦Àí¹«Óú¯Êý     
        timeout=0;
        while(HAL_UART_Receive_IT(&UART1_Handler, (u8 *)aRxBuffer1, RXBUFFERSIZE) != HAL_OK)//Ò»´Î´¦ÀíÍê³ÉÖ®ºó£¬ÖØÐ¿ªÆôÖжϲ¢ÉèÖÃRxXferCountΪ1
        {
        timeout++; //³¬Ê±´¦Àí
        if(timeout>HAL_MAX_DELAY) break;       
        }       

#if SYSTEM_SUPPORT_OS                 //ʹÓÃOS
        OSIntExit();                                                                                           
#endif
}[/mw_shl_code]
回复

使用道具 举报

23

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2312
金钱
2312
注册时间
2017-7-6
在线时间
280 小时
 楼主| 发表于 2017-7-20 18:05:14 | 显示全部楼层
[mw_shl_code=c,true]void USART1_IRQHandler(void)                       
{
        u8 Res;
        u32 timeout=0;
#if SYSTEM_SUPPORT_OS                
        OSIntEnter();   
#endif
       
        HAL_UART_IRQHandler(&UART1_Handler);         
        timeout=0;
        while(HAL_UART_Receive_IT(&UART1_Handler, (u8 *)aRxBuffer1, RXBUFFERSIZE) != HAL_OK)
        {
        timeout++; //
        if(timeout>HAL_MAX_DELAY) break;       
        }       

#if SYSTEM_SUPPORT_OS         
        OSIntExit();                                                                                           
#endif
}[/mw_shl_code]
回复

使用道具 举报

23

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2312
金钱
2312
注册时间
2017-7-6
在线时间
280 小时
 楼主| 发表于 2017-7-20 18:08:15 | 显示全部楼层
我想不通的是如果接收端没再接收到数据的话 huart->State应该会改变为HAL_UART_STATE_READY 或则HAL_UART_STATE_BUSY_TX。那么就可以跳出该中断了。但是 没有像我想的那样, 大家有遇到类似的情况吗
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2017-7-21 01:07:30 | 显示全部楼层
帮顶
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-19 15:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表