打印

USART_ClearFlag

[复制链接]
5411|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lxa520|  楼主 | 2008-9-5 11:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
USART_FLAG_TXE、USART_FLAG_RXNE这两个标志能用USART_ClearFlag这个函数清楚吗?
在USART Example2中

 if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
  {
    /* Read one byte from the receive data register */
    RxBuffer[RxCounter++] = (USART_ReceiveData(USART1) & 0x7F);         

    /* Clear the USART1 Receive interrupt */
    USART_ClearITPendingBit(USART1, USART_IT_RXNE);//
这句不是多余的吗?而且它也没效果。。

    if(RxCounter == NbrOfDataToRead)
    {
      /* Disable the USART Receive interrupt */
      USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);
    }
  }
沙发
lxa520|  楼主 | 2008-9-5 16:23 | 只看该作者

香主:快来呀。。

USART_FLAG_TXE、USART_FLAG_RXNE这两个标志能用USART_ClearFlag这个函数清除吗?

使用特权

评论回复
板凳
athlon64fx| | 2008-9-16 17:02 | 只看该作者

请看 RM0008 P631


Bit 5 RXNE: Read Data Register Not Empty. 
This bit is set by hardware when the content of the RDR shift register has been 
transferred to the USART_DR register. An interrupt is generated if RXNEIE=1 in 
the USART_CR1 register. It is cleared by a read to the USART_DR register. 
The RXNE flag can also be cleared by writing a zero to it.
 This clearing sequence 
is recommended only for multibuffer communication.
0: Data is not received
1: Received data is ready to be read.


Bit 7 TXE: Transmit Data Register Empty.
This bit is set by hardware when the content of the TDR register has been 
transferred into the shift register. 
An interrupt is generated if the TXEIE bit =1 in the USART_CR1 register. 
It is cleared by a write to the USART_DR register.
0: Data is not transferred to the shift register
1: Data is transferred to the shift register)
Note: This bit is used during single buffer transmission.


我的问题: 

1. TXE 一直是1, 软件清零无效, 为什么?
2. single buffer 怎么理解?

使用特权

评论回复
地板
香水城| | 2008-9-16 17:57 | 只看该作者

这个例子是错的,在新的版本中已经改正了

请下载最新的STM32固件库和相应的手册。

使用特权

评论回复
5
chuzhujun_| | 2008-9-17 10:10 | 只看该作者

我来说一说

先说楼主的!那句话确实是多余的,可能是由于ST的工程师以前是写STR7的程序的,但是放在这里也没有什么错误,可以说也是一种保险的做法!
这两者都是通过读或者写数据寄存器来清除的,但RXNE flag 还可以通过直接写0到SR寄存器的的这一位上来清除,而TXE 是不可以的,
再说三楼的 ,TXE也不是一直是一的,当你的数据从数据寄存器转移到移位寄存器中才为1的,而如果移位寄存器中还有数据在发送,你的数据还在数据寄存器中等待往移位寄存器中转移时,这一位是0的,他为什么不能由软件来写0,那要从这个寄存器本身的定义来看,由于大部分我们看到的时间都是数据寄存器为空的情况,也就是TXE为1,你如果硬要往这个寄存器中写0,但是其内部的逻辑电路经过判断,发现数据寄存器还是空的话,又把TXE置1了,所以写0当然没有效果啦!呵呵!
single buffer 是单缓冲的意思,也就是平常我们用串口的方式,就等同于51那个串口一样,而对应的multibuffer communication(多缓冲)就是使用DMA通信了!
我的理解这样的,大家有不同观点大家一起讨论纳~

使用特权

评论回复
6
athlon64fx| | 2008-9-17 11:00 | 只看该作者

感谢chuzhujun_

sorry我没看清楚,有些位是只读的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

27

帖子

0

粉丝