5917|6

65

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

USART_ClearFlag [复制链接]

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);
    }
  }
此帖出自stm32/stm8论坛

最新回复

                                      详情 回复 发表于 2008-9-17 11:02
点赞 关注
 

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

香主:快来呀。。

                                 USART_FLAG_TXE、USART_FLAG_RXNE这两个标志能用USART_ClearFlag这个函数清除吗?
此帖出自stm32/stm8论坛
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

请看 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 怎么理解?

此帖出自stm32/stm8论坛
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

4
 

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

                                 请下载最新的STM32固件库和相应的手册。
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

5
 

我来说一说

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

回复

82

帖子

0

TA的资源

一粒金砂(初级)

6
 

感谢chuzhujun_

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

此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

7
 

这个例子很有问题的。



  
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表