你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Hall库多串口接收时串口中断回调函数重入导致HardFault 0xFFFFFFF1,怎么解决?

[复制链接]
JoneCheng 提问时间:2021-6-28 10:56 / 未解决
STM32F103使用HALL库接收多串口(3个)数据时,当数据接收比较频繁时会引起HAL_UART_RxCpltCallback多次被调用,当中断结束退出时触发Hardfault错误,此时R14为0xFFFFFFF1。串口接收回调函数如下,接收多串口数据并存入多缓冲区

///////////////////////////////// UART //////////////////////////////////
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
        if(huart->Instance == USART1){
                ST_UART1.RecBuf[ST_UART1.WritePointer]=UART1_RecData[0];
                ST_UART1.WritePointer++;
                if(ST_UART1.WritePointer == BUFERLENGTH){
                        ST_UART1.WritePointer=0;
                }
                if(HAL_UART_Receive_IT(&huart1, UART1_RecData, 1)==HAL_BUSY){
                        UART1_RestartRecIT=1;
                }       
        }
        if(huart->Instance == USART2){
                ST_UART2.RecBuf[ST_UART2.WritePointer]=UART2_RecData[0];
                ST_UART2.WritePointer++;
                if(ST_UART2.WritePointer == BUFERLENGTH){
                        ST_UART2.WritePointer=0;
                }
                if(HAL_UART_Receive_IT(&huart2, UART2_RecData, 1)==HAL_BUSY){
                        UART2_RestartRecIT=1;
                }       
        }
        if(huart->Instance == USART3){
                ST_UART3.RecBuf[ST_UART3.WritePointer]=UART3_RecData[0];
                ST_UART3.WritePointer++;
                if(ST_UART3.WritePointer == BUFERLENGTH){
                        ST_UART3.WritePointer=0;
                }
                if(HAL_UART_Receive_IT(&huart3, UART3_RecData, 1)==HAL_BUSY){
                        UART3_RestartRecIT=1;
                }       
        }
}


按照正常集成库的设计,各串口都有独立的串口中断响应函数,所以不会存在该问题。但是HAL库回调函数的处理机制会导致不同串口接收时重复调用。这个问题怎么解决?HAL_UART_RxCpltCallback里边如何正确的处理接收才能避免该问题?

收藏 评论1 发布时间:2021-6-28 10:56

举报

1个回答
yklstudent 回答时间:2021-6-28 15:23:06
换USART+DMA方式吧

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版