OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4970|回复: 2

关于《读取USARTx->SR能避免莫名其妙的错误》该文的问题

[复制链接]

80

主题

268

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
441
金钱
441
注册时间
2014-8-11
在线时间
84 小时
发表于 2015-9-19 03:02:02 | 显示全部楼层 |阅读模式
5金钱
 在许多中断接收的函数中都会有如题的注释提示
以前没多在意
最近搞了下STM8S208的UART3,串口调试的时候发现发送一个字符过去后进入对应的接收中断,UART3_RX_STA字节数表示为加1,但是BUF里面
却是空的,然后我打印了下UART3->DR,发现没有数据。
单步调试发现UART3->SR发现里面的FE位在接收到数据后被置为1了,查了手册说是帧错误,然后就千万头草泥马奔腾。。。。。

相同的程序用在UART1上一点问题都没有,FE也没有置位,所以我认为UART3->DR为空是不是与FE有关,但有关我又有什么办法?
所以我尝试了下在return UART3->DR前读取下USARTx->SR,发现并没有什么软用。。。。

详细备注:
在接收到字节后串口就返回该字节,由于进了中断,UART3_RX_STA++还运行了(我用的延时等待接受算法,过了10ms就默认接收完了)
所以UART3_RX_STA最高位置1,主函数就开始对外打印数据,回发字节前我用printf发了“你所发的信息为:”
那么问题来了:在设置用外部时钟24M的时候调试助手不能收到“你所发的信息为:”,也没有我发过去的那个东东的回显
                        在设置内部时钟分频为2M作为主时钟的时候能收到“你所发的信息为:”,但没有我发过去的那个东东的回显
                            
我设置过所有的波特率传输,都这样。。。。。。单步调试观察寄存器也没发现其它的初始化对UART3的波特率有影响

但是我用我的GPS接在UART3上,UART3是能够正常收到数据的,我的USB转TTL也测试过了没问题。。。。。

如上所述,有没有人知道怎么破

我是一只菜鸟,但我会大鹏展翅
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2015-9-20 23:57:11 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

33

主题

218

帖子

0

精华

高级会员

Rank: 4

积分
568
金钱
568
注册时间
2015-1-12
在线时间
75 小时
发表于 2022-2-22 13:50:35 | 显示全部楼层
遇到过类似问题,每次系统上电,单片机和模块通信,单片机发同一条指令,单片机读到模块返回的第一条报文是错误的,第二条以后的报文正确。程序中加上读取USARTx->SR,上述现象才消除
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-28 06:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表