完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
现在使用的STM32G031开发程序。对方设备是收发一体的UART(半双工),我是发完之后立刻切换到中断接收模式。数据量不大,但是每次都有overrun错误。不清楚到底是什么原因导致的。
(最初其实是不知道overrun错误的。只是单纯的收不到任何数据。单很奇怪的是每次用逻辑分析仪能看到STM32的RX引脚应当收到的信息,但是UART却一直收不到信息。后来添加了HAL_UART_ErrorCallback的代码,才发现是ORE错误(overrun).) 按照参考手册的信息,overrun错误的原因如下:
大概意思是处理的速度没有接收到的快。 这种情况应当怎么分析呐?我的分析是:1、我的接收buffer太小?实际我应当接收到8个数据。单不排除因为其它原因导致的数据量增加。 2、我的处理速度不够。我使用的是HAL库的Receive函数,除非这个有bug? 3、因为收发通过1K电阻连在一起。发的数据被收到,长度太长。其实我已经在软件避免了类似情况。 关于第一个猜测,已经排除。因为如果buffer不够大。我的buffer开头起码保存了一部分数据吧。实际上没有数据。 关于第二个,我的波特率才115200,不至于来不及处理吧。波特率降到9600也一样的问题。 所以真的不知道是什么原因。以及怎么解决 大神们,怎么看? 看起来我需要用DMA了? |
|
相关推荐
1个回答
|
|
overrun错误指的是在接收中断处理函数中,接收到的数据没有及时读取,导致新接收的数据覆盖了旧数据。
在你的情况下,overrun错误可能是因为你切换到中断接收模式的时机不正确,即发完数据后立即切换到中断接收模式。这样可能会导致中断处理函数还没有来得及读取接收到的数据,新的数据就已经开始接收并覆盖了旧数据。 解决该问题的方法是,在发完数据后,等待足够长的时间再切换到中断接收模式。这样可以确保接收到的数据能够被及时处理。 另外,还有可能是串口配置问题导致的overrun错误。你可以检查一下串口配置是否正确,比如波特率、数据位、停止位和校验位等。 最后,如果问题仍然存在,你可以尝试以下方法进行排查: 1. 检查硬件连接是否正确,确保RX引脚连接正确并运行正常。 2. 在中断接收模式切换之前,先禁用串口接收中断,等待足够长的时间,确保接收到的数据被读取。 3. 检查其他中断是否会影响串口中断的执行,比如优先级设置是否正确。 希望以上信息对解决你的问题有所帮助。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1646 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1566 浏览 1 评论
993 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
692 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1611 浏览 2 评论
1871浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
656浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
526浏览 3评论
542浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
515浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 03:58 , Processed in 0.581087 second(s), Total 50, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号