完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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里边如何正确的处理接收才能避免该问题? |
|
相关推荐
2个回答
|
|
换USART+DMA方式吧
|
|
|
|
该问题可能是由于中断回调函数(HAL_UART_RxCpltCallback)在中断处理期间被再次触发,从而导致函数重入,引发HardFault错误。
为了解决这个问题,你可以尝试以下方法: 1. 禁用串口中断:可以在进入中断回调函数之前禁用相应串口的中断,然后在退出中断回调函数时重新使能中断。这样可以防止中断回调函数的重入。 2. 使用全局变量或标志:在中断回调函数中使用一个全局变量或标志来检查当前是否正在执行中断回调函数,并在进入中断回调函数之前将其设置为true,在退出中断回调函数时将其重置为false。这样可以防止中断回调函数的重入。 3. 使用信号量或互斥锁:如果你在项目中使用了RTOS(实时操作系统),可以使用信号量或互斥锁来保护中断回调函数。当中断回调函数开始执行时,先获取信号量或互斥锁,然后在退出中断回调函数时释放信号量或互斥锁。这样可以确保同一时间只有一个中断回调函数在执行。 注意:根据你的描述,数据接收比较频繁时会引发问题,这可能暗示了你的系统处理数据的速度跟不上数据的到达速度。你可能需要考虑对数据进行缓冲处理,以便在处理数据时不会发生数据丢失或冲突。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1364 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1359 浏览 1 评论
780 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
562 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1394 浏览 2 评论
1758浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
484浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
420浏览 3评论
414浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
389浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-29 02:49 , Processed in 0.778810 second(s), Total 52, Slave 45 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号