你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

串口错误怎么恢复?

[复制链接]
everkimage 提问时间:2018-6-20 17:05 /
芯片是STM32F0系列的。调试的时候,板子进入某个断点,而PC端一直在发串口数据,这个时候只要再按F10就会跑到串口中断里面,但是不一定是收数据,也不知道串口的什么标记置位了,在串口状态寄存器有好多错误标记都置位了。
错误原因估计是中断的时候串口的硬件缓存区溢出了或什么的,反正它知道有很多数据没有来得及接收。
请问下这个时候怎么恢复串口,有库函数吗?
收藏 评论13 发布时间:2018-6-20 17:05

举报

13个回答
he129807 回答时间:2018-6-21 11:00:28
一般进行2个操作就可以了
1,清除错误标志。
2,读一次DR寄存器。
但是要不要记录错误,并作一些处理,就是你应用程序的事了。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

zhdzhd-174422 回答时间:2018-6-21 10:14:27
基本的中断服务函数:
if(USART_GetFlagStatus(USART2, USART_FLAG_ORE) != RESET)
{
USART_ClearFlag(USART2, USART_FLAG_ORE); //清除溢出中断
}

if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART2, USART_IT_RXNE);
//rebuf[num++] = USART_ReceiveData(USART2); 读取串口数据
}

具体的可以参考以下链接:
http://blog.csdn.net/qq_34401994/article/details/76359581
https://www.stmcu.org.cn/module/ ... p;page=1#pid2346823

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

电子星辰 回答时间:2018-6-20 17:09:23
我看着有点混乱,要不你先把程序发上来,说说大概哪些有问题

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

与龙共舞 回答时间:2018-6-20 17:23:21
库函数 和 寄存器都有 防止串口溢出错误的。
比如放2个进去
   if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)            
//    {
//        USART_ITConfig(USART1, USART_IT_TXE, DISABLE);                  
//    }

//    if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)==SET)
//    {
//        USART_ClearFlag(USART1,USART_FLAG_ORE);        
//        USART_ReceiveData(USART1);                                
//    }

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

z258121131 回答时间:2018-6-20 17:53:44
检测到串口错误后进行清除处理

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

radio2radio 回答时间:2018-6-20 20:36:21
我的经验是,如果使用RTE的串口库,就没有这样的问题,所有出错情况无需理会。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

TLLED 回答时间:2018-6-21 08:45:51
这是在仿真模式吗,进入中断后,清除标志位会不会有改善啊。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

stm1024 回答时间:2018-6-21 08:49:22
你使用的JLink调试吗?还是用的仿真调试?
一般情况是,出现串口错误,把串口的GPIO配置、工作模式什么的都全重新设置一遍,就可以恢复了。不过这是治标不治本,一定要定位到出错的地方

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

everkimage 回答时间:2018-6-21 10:15:20
本帖最后由 everkimage 于 2018-6-21 10:17 编辑
stm1024 发表于 2018-6-21 08:49
你使用的JLink调试吗?还是用的仿真调试?
一般情况是,出现串口错误,把串口的GPIO配置、工作模式什么的都 ...

jlink调试。程序正常运行是没事的,就是调试的时候有点别扭。PC端没100毫秒发一次数据,某一次执行到我们设定的中断了,人的反映当然没那么快,所以CPU处于停止状态,而串口一直有数据到,但是因为没有执行中断来接收数据,串口状态寄存器很多错误标记被置位了。我用的是IAR,调试不论是单步还是连续执行,程序中设置的断点就不会被执行到,也不知道在执行什么,串口中断也不再进去了,似乎串口硬件也不再响应数据了,所以想怎么复位串口。
如果说重新初始化,不知道那个错误标记被设置时,重新初始化。
有没有官方的处理方式?
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版