stm32 串口发送数据第一字节丢失
来源:互联网 发布:淘宝网美都袋鼠皮相 编辑:程序博客网 时间:2024/05/22 04:47
使用stm32f10x调试串口通讯时,发现一个出错的现象,硬件复位重启之后,发送测试数据0x01 0x02 0x03 0x04..接收端收到的数据为:0x02 0x03 0x04,第一个数据丢失。
查阅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没有被清除掉。
查阅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);
0 0
- stm32 串口发送数据第一字节丢失
- stm32 串口发送数据第一字节丢失
- STM32串口发送数据第一个字节丢失问题
- stm32串口发送数据,丢失字节问题分析
- stm32串口发送数据,丢失字节问题分析
- stm32 串口第一字节丢失问题分析
- 关于STM32串口第一个字节丢失
- STM32串口第一个字节丢失解决办法
- Stm32串口发送字节数据
- stm32串口首次发送数据丢失
- STM32串口第一个字节丢失问题的分析过程
- STM32串口第一个字节丢失问题的分析过程
- STM32串口第一个字节丢失问题的分析过程
- STM32串口第一个字节丢失问题的分析过程
- STM32串口第一个字节丢失问题的分析过程
- STM32串口第一个字节丢失问题的分析过程
- STM32串口第一个字节丢失问题的分析过程
- STM32 串口发送数据(发送一个字节,以及数组)
- UVA - 12260 Free Goodies
- Linux命令:tar
- 同步化,同步,异步化,异步操作的区别
- Ubuntu上搭建Hadoop环境(单机模式+伪分布模式)
- C函数中,可变长参数的传递?
- stm32 串口发送数据第一字节丢失
- 数字图像处理之几何运算
- Linux命令:git
- 配置Mysql用户权限命令
- 使用Delayed job处理Rails中的异步任务
- 网络编程之简单网络通信
- android中位图Bitmap工具类的实现
- 【SD第一课】SAP SD overview
- unable to start program XXX 拒绝访问解决