记录STM32各类串口中断实验

STM32F407VG使用cubemx LL库,波特率115200,一位停止位,无校验

单片机初始化串口一,PA8高速推挽输出,使用逻辑分析仪100M采样捕获各类串口中断触发时的波形

首先是喜闻乐见的RXNE,理论是只要串口成功接收一byte数据就触发

RXNE中断服务函数代码

 

RXNE波形

可以看到,每接收一个字节之后PA8都会立刻翻转一下,中断是在多个字节发送的间隔触发的

接下来是IDLE,理论是在串口"接收到数据后的一个byte的时间里没有接收到数据"触发

IDLE中断服务函数代码
IDLE波形

 在接收完两个字节后,又等待了一个字节没有数据才触发,实验符合理论

还有ORE,这个可能用得不多,因为这是ERROR的一种,在RXNE和IDLE正常工作得情况下不会出现这种情况。大部分人遇到的最常见的情况是,外部串口不断给单片机发送数据的项目,单步调试单片机串口DR寄存器会卡死在进入断点时最后的一个数据。这其实就是因为触发了溢出错误,因为内核在调试断点处会卡住不去处理RXNE,导致新的数据来了上一个数据还没有处理,也就出现了Overrun error(ORE)。所以这个中断会在RXNE没有正常工作的时候触发,这里故意把RXNE里的代码注释掉,模拟出"收到新数据但没有处理旧数据的情况"

ORE中断服务函数代码

 

ORE波形

 可以看到,每接收到两个byte会触发一次ORE,因为第二个byte才符合ORE的溢出错误判断条件

正确处理ORE可以显著提升带串口的项目的调试体验,虽然正常运行时基本不会遇到,但还是有必要学习一下。

需要注意的是,在LL库里ORE和PE,NF三个错误中断的使能都合并在ERROR这一个中断使能函数里了

ERROR中断使能函数介绍

 但清除标志位函数是独立的

错误中断标志位查询函数定义

 ClearFlag函数同理就不放图了

既然说了ORE,那其他的错误中断也该说一说吧

很不幸,除了ORE之外的错误中断我都没能成功触发,首先是Frame Error(FE),理论是数据接收异常的时候,比如一个字节发送一半断了,或者波特率不匹配就会触发,但实际并没有。

PE和FE的触发条件应该是有重合的,PE是校验错误,如果波特率不匹配自然校验也是错误的

我把PE,FE和NF都判断上,然后使用错误的波特率发送数据,可是一个也没有触发

ERROR中断服务函数代码

 

ERROR波形

 串口波特率115200,我是用256000发送,但PA8没有翻转,也就是说三个中断的条件没有一个触发的,很奇怪。但是因为从来也没用过三种中断也就没有探究下去,有了解的希望评论区给解释一下。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值