关于stm32的串口溢出中断-u球体育app下载

单片机 > 单片机程序设计 > 详情

关于stm32的串口溢出中断

发布时间:2024-11-11 发布时间:
|

之前遇到奇怪的问题:

 

串口中断处理函数中加了溢出中断处理:

if(usart_getitstatus(usart1,usart_it_ore) != reset)  //产生溢出中断

{

       utemp = usart_receivedata(usart1);           //扔掉接收的数据

       usart_clearitpendingbit(usart1, usart_it_ore);      //清溢出中断标志位

}

参考手册isr寄存器:


位 3 ore: 溢出错误

在rxne=1 的的条件下(也就是上次数据还没有读走),串口接收寄存器又接收好

了一个字节的数据并准备往rdr 寄存器去转移的时候,会由硬件将这个位置1。

由软件向usart_icr 寄存器的orecf 位写1,可以清除这个标志。

如果usart_cr1 寄存器中的rxneie 位或eie 位是1,就会产生中断请求。

0: 没有溢出错误

1: 检测到溢出错误



cr1中的rxneie已经使能,实际溢出发生时keil中观察ore的确被置位为1。

然鹅,,,,,,,,

就算ore置位为1,这个if语句也不通过。。。。。






后来网上找到这句话:

“ore中断只能使用usart_getflagstatus(usart1, usart_flag_ore) 读到(没有使能usart_it_err中断时)”

惊奇的发现还有usart_getflagstatus可以用!


usart_getitstatus(usart1,usart_it_ore)这个函数在usart_it_err未使能时并不能正确ore的正确状态!!!!!!

可以使用usart_getflagstatus(usart1,usart_flag_ore)读取,或者初始化时使能usart_it_err。关于usart_it_err在库函数中的定义:

(##) usart_it_err: specifies the interrupt source for error interrupt   (frame error, noise error, overrun error)

 

 

补充一下这俩函数的区别(看库函数更直接):

it主要就是与中断相关的,检查usart中断产生与否,当usart发送完成后会有usart_it_tc中断,因此可以用来判断,而usart_getflagstatus是usart标志位设置与否,其中就有发送完成标志位usart_flag_tc所以也可用来判断。而最终都是操作isr寄存器


关键字:stm32  串口  溢出中断 

『本文转载自网络,u球体育app下载的版权归原作者所有,如有侵权请联系删除』

热门文章 更多
使用ni开发系统和amr系统实现自动化仪表读数系统的设计
网站地图