其他分享
首页 > 其他分享> > STM32 串口首次发送数据 会丢失第一个字节

STM32 串口首次发送数据 会丢失第一个字节

作者:互联网

查阅stm32f10x参考手册,找到这样一句话:

TC:发送完成

当包含有数据的一帧发送完成后,由硬件将该位置位。如果USART_CR1中的TCIE为1,则产生中断。由软件序列清除该位(先读USART_SR,然后写入USART_DR)。TC位也可以通过写入0来清除,只有在多缓存通讯中才推荐这种清除程序。

0:发送还未完成;

1:发送完成。

注意到这一句:由软件序列清除该位(先读USART_SR,然后写入USART_DR)。 也就是说,要先read USART_SR,然后write USART_DR,才能完成TC状态位的清除。而硬件复位后,串口发送的首个数据之前没有read SR的操作,是直接write DR,也就是说,TC###没有被清除掉。

硬件复位后,串口发送首个数据之前,先读取一下USART_SR,则能够保证首个数据发送时,不出现覆盖的情况。当然,也有别的方法,比如先清除TC状态位,

USART_ClearFlag(USART1, USART_FLAG_TC);USART1->SR&=~(1<<7);

转载自http://t.zoukankan.com/longbiao831-p-4556288.html

标签:发送,USART,SR,清除,STM32,串口,发送数据,DR,TC
来源: https://www.cnblogs.com/huameixiao/p/16384341.html