串口发送字符串的代码写法
1、字符串的发送
这里主要说的是在特殊情况下发送字符时代码的写法,特殊情况指的是:
(1)调用发送字符串函数“发送完”本机立即掉电;
(2)调用发送字符串函数“发送完”从机立即掉电;
(3)调用发送字符串函数“发送完”立刻进入待机或停机;
上面(1)、(2)两种主要用于芯片对电源控制的项目中
这里主要说的是两个标志位:USART_FLAG_TXE 和 USART_FLAG_TC
USART_FLAG_TXE发送缓冲区空标志:说明可以往数据寄存器写入数据了,但并不代码数据发送完成了。
USART_FLAG_TC发送完成标志:这个才是代表USART在缓冲区的数据发送完成了,即从机接收到了数据。
这两个标志的区别在于:它们分别表示数据在发送过程中,在两个不同的阶段中的完成情况。TXE 表示数据被从发送缓冲区中取走,转移到的移位寄存器中,此时发送缓冲是空的,可以向其中补充新的数据了。而 TC 则表示最后放入发送缓冲区的数据已经完成了从移位寄存器向发送信号线 Tx 上的转移。所以,判定数据最终发送完成的标志是 TC,而不是 TXE.
下面讲述在不同代码写法下,得到不同实验效果:
(1)、写法一
这种写法在不是特殊(不掉电、不待机等)情况下,问题不大,USART数据会成功发送出去。 但是在上面说的特殊情况下,问题就来了,代码只将数据放到了发送缓冲区,而没有发送出去就掉电或待机了,这个时候其实最后两个字符是没有发送出去的。
(2)、写法二
这种写法达到的效果和上面存在不同的就是倒数第二个数据发送出去了,也就是只有最后一个字符是没有发送出去的。
(2)、写法三
这种写法达到的效果和上面两种写法有不一样,发送了10个字符。
(4)、写法四
这种写法按理说可以实现功能,但实际多次试验结果确实第一字节数据丢失了。
(5)、写法五
这种写法是比较完成,为了保守起见,在特殊情况下使用该写法。
转自:https://blog.csdn.net/ybhuangfugui/article/details/52755954