大家好,在学习USART通信实验时,看到
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
于是就在中文参考手册中参考了TC的清零方法:
“该位由软件序列清零(读取 USART_SR 寄存器,然后写入USART_DR 寄存器)。TC 位也可以通过向该位写入‘0’来清零”
可见,可以采用先读SR,再写DR的方式清零;或直接向TC位写0.
现在有一个小小的疑问:
例如,USART_RX_BUF数组中有三个数据,123.
当t=0时,通过USART_SendData()发送第一个数据1;接着执行while语句,若没有发送完成,则while等待;若发送完成,此时,
USART_GetFlagStatus()返回SET,这时,TC位为1.
接着执行t=1,通过USART_SendData()发送第二个数据2;接着执行while语言,那么问题来了,t=0时的TC位是怎么清零的呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
首先,不读SR,直接写DR也会将SR[TC]清零。
如果按照你自己的解释,那么SR复位值是0x00C0,为什么单片机复位后第一字节发送之前并没有任何读SR,依然正常。
最后,如果你真有疑问,不妨做个小实验来验证一下(自己想)。这,要比我直接告诉你强一万倍。
再最后,我留意到手册里还有一句话不知道你看到没有:
最最后,对这种“小”问题(其实并不小)抱有热心非常值得肯定。
但学习,除了要提出问题,最好还要能解决问题。
一周热门 更多>