STM32
直播中

刘波

7年用户 937经验值
私信 关注
[问答]

stm32G0B1RCT6在串口快速收发时导致中断服务函数无法进入是怎么回事?

一、问题描述:
usb转485连接电脑和开发板,上位机以1秒1次的频率发送报文查询开发板信息,同时再以200ms的频率通过上位机发送其他信息(相当于上位机可能同时发出两条报文),会直接导致开发板无法进入串口中断服务函数,但其他功能正常,使用的是HAL库。
二、尝试解决:
1、在收到一帧数据后,直接将485芯片切换为发送模式,待处理完数据后切换为接收模式,没解决问题
2、猜测是不是数据溢出,添加错误回调函数,并在里面清除上溢错误,,仿真发现并没有进入错误回调函数



回帖(1)

lotusp

2024-5-22 17:31:28
根据您的问题描述,我将分步骤分析可能的原因并提供解决方案。

1. 首先,我们需要确保串口中断优先级设置正确。如果中断优先级设置过低,可能会导致中断服务函数无法及时响应。请检查您的中断优先级设置,确保它足够高以确保中断服务函数能够及时执行。

2. 其次,检查您的中断服务函数是否正确处理接收到的数据。如果中断服务函数中存在阻塞或延时操作,可能会导致中断服务函数无法及时响应。请确保中断服务函数尽可能高效,避免长时间阻塞。

3. 检查串口接收缓冲区大小。如果缓冲区大小过小,可能会导致数据溢出。请根据实际需求调整缓冲区大小。

4. 检查串口中断触发条件。确保您的中断触发条件设置正确,以便在接收到数据时能够正确触发中断。

5. 考虑使用DMA(直接内存访问)来接收数据。DMA可以减少CPU的负担,提高数据接收效率。如果可能,请尝试使用DMA来接收数据。

6. 如果问题仍然存在,可以尝试使用其他通信协议,如SPI或I2C,以减少串口中断的负担。

7. 最后,如果以上方法都无法解决问题,您可以尝试升级您的固件或硬件,以提高性能。

总之,要解决这个问题,您需要从多个方面进行排查和优化。希望这些建议能帮助您解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分