您的位置 首页 测评

关于STM32的串口溢出中止

关于STM32的串口溢出中断

之前遇到古怪的问题:

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

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单片机中文官网
  • STM32单片机官方开发工具
  • STM32单片机参阅规划

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/156694.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部