完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
最近发现,STM32中断接收完成回调函数在USB转CH340模块带电拔插一次以后会出现异常数据。具体的来说是数据出现一次右移,再出现一次右移,以后每次接受接收到的数据都出现位移。引起这个问题的原因可能是拔掉以后导致STM32串口硬件出错。硬件出错必须要复位才行,那怎么在单片机正常运行的时候怎么判断串口硬件出错呢?
我在网上找了很多的资料,大多数的都出现在处理数据上。不是和我问题很接近的。然后我想在HAL库的串口.c文件中找问题所在。 首先,HAL库的串口库stm32f1xx_hal_uart.c中有明确的表示,注意下方红色字体。 在官方库的介绍中,有详细的讲解,如何使用这些函数,以及出现问题怎么解决,我们只要花点时间去琢磨他还是可以找到问题的关键的。 在stm32f1xx_hal_uart.c文件中的这段话大体意思是; (+)错误被认为是可恢复的和非阻塞的:传输可以一直进行到结束,但是错误的严重性将由用户评估:这涉及到帧错误、奇偶校验错误或中断模式接收中的噪声错误。然后检索接收到的字符并将其存储在Rx缓冲区中,设置错误代码以允许用户识别错误类型,并执行HAL_UART_ErrorCallback()用户回调。传输在UART上继续进行侧面。如果用户想要中止它,中止服务应该由用户调用。 (+)错误被视为阻塞:传输无法正确完成,是中止了。这个涉及中断模式接收中的超限错误和DMA中的所有错误模式。错误代码被设置为允许用户识别错误类型,并执行HAL_UART_ErrorCallback()用户回调。 出现错误会在HAL_UART_ErrorCallback()函数中处理,这样的话我们在错误回调函数中复位,当检测到硬件错误,就在这里复位。下面添加复位代码: 先关闭中断,再软件复位。可以解决问题。 复位是最简单的方案,当然有的朋友说,我还有其他的任务要处理,不能在此处复位。这样的话我们在错误中断回调函数里重新初始化串口好像也行。但是我没有试验。有感兴趣的朋友可以试一试。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1936浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
729浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
569浏览 3评论
594浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
552浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 20:35 , Processed in 0.756056 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号