打印
[STM32F1]

进入串口中断之后发生帧错误中断

[复制链接]
1131|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
morbid|  楼主 | 2022-3-9 18:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
家人们,串口工具发数据给单片机,进入中断之后发生帧错误中断,可能是因为什么?我尝试把串口中断的优先级调高也没用

使用特权

评论回复
沙发
Betty1299| | 2022-3-15 13:52 | 只看该作者
不在中断里处理数据,把数据缓存,在中断外执行

使用特权

评论回复
板凳
Alina艾| | 2022-3-15 14:08 | 只看该作者
这个要看看你的代码吧,你数据量有多大啊?

使用特权

评论回复
地板
Charlotte夏| | 2022-3-15 14:19 | 只看该作者
啥是帧错误判断啊?是接收的数据不对 ?

使用特权

评论回复
5
Candic12e| | 2022-3-15 14:49 | 只看该作者
你看看你的波特率是否正确呢?

使用特权

评论回复
6
Allison8859| | 2022-3-15 15:29 | 只看该作者
之前你的数据接收的对么?还是之前对,修改代码之后就不对了呢?

使用特权

评论回复
7
Estelle1999| | 2022-3-15 15:53 | 只看该作者
不是很理解,你先用正确的代码或者demo跑一下看看

使用特权

评论回复
8
Emily999| | 2022-3-15 16:06 | 只看该作者
感觉是你数据处理逻辑有些问题吧

使用特权

评论回复
9
B1lanche| | 2022-3-15 16:34 | 只看该作者
不好说,你可以把代码贴出来,让大家帮你分析分析

使用特权

评论回复
10
Annie556| | 2022-3-15 16:53 | 只看该作者
正常来说不会这样的,不要在中断里判断数据,是收到数据缓存起来

使用特权

评论回复
11
kingkits| | 2022-3-15 17:01 | 只看该作者
异步通讯出现帧错误很正常,如果不使用硬件连线做帧同步,就需要在数据里添加帧头/尾信息以便于区分

使用特权

评论回复
12
Carmen7| | 2022-3-15 17:12 | 只看该作者
你试试用DMA呢?这样是不是能好一些呢?

使用特权

评论回复
13
skyred| | 2022-3-16 13:23 | 只看该作者
现象是什么能接收一半?

使用特权

评论回复
14
morbid|  楼主 | 2022-3-17 14:34 | 只看该作者
家人们,这个问题我已经解决了,但是不知道怎么复现了,只记得加了一句代码
if (__HAL_UART_GET_IT_SOURCE(&huart2, UART_IT_IDLE))
    {
        UART2_IDLECallback();
    }
HAL_UART_IRQHandler(&huart2);
加在中断前面就能正常接收了,虽然是好了,但是不理解的代码我还是没拿来用,于是我翻新写了一个驱动,但还是想理解这个代码,我不理解的地方在于,有数据来了之后就会进入中断,然后接收,最后调用回调函数,整个中断完成。而这里的操作是是先判断指定的串口中断源是否开启,然后直接调用回调函数???补充这里是用了DMA的,所以我是没明白,DMA和中断的关系,也就是接收的整个流程逻辑,我觉得应该是有数据发进来会触发DMA接收中断,将数据存储在DMA指定的BUFF里面,然后串口自己的中断发现有数据发过来,就会进入串口中断,而在串口中断里面,我们只是一个数据的善后工作,比如知道数据的数量,判断中断标志位等等,真正的接收已经在DMA里面完成了。最后在这里真的感谢这个论坛里回复我的家人们,感谢你们的支持和帮助

使用特权

评论回复
15
morbid|  楼主 | 2022-3-17 14:37 | 只看该作者
呃呃,自己说着说着好像又理解了,DMA和串口中断的关系就是DMA处理接收,串口中断做一个善尾的工作,但现在还是不理解这两句代码的逻辑顺序有什么含义

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

37

帖子

0

粉丝