串口发送的这几种写法,你用过几种?

一、stm32用usart发送字符串
void uart_send_message(u8 *data){ while(*data!='�') { usart_senddata(usart1, *data); while(usart_getflagstatus(usart1, usart_flag_txe) == reset);//读取串口状态 data++; }} void main(void){ u8 str_buf[500]; memset((char *) str_buf, 0, sizeof(str_buf)); uart_send_message(str_buf);}
while(set == usart_getflagstatus(usart1,usart_flag_rxne));  
含义是:当接收引脚有数据时,状态寄存器的usart_flag_rxne就会为1,此时usart_getflagstatus(usart1,usart_flag_rxne)的返回值就为1(set),若无数据则为reset。
二、usart_flag_txe和usart_flag_tc怎么用
这里主要说的是在特殊情况下发送字符软件代码的写法。
特殊情况指的是:
1)调用发送字符串函数“发送完”本机立即掉电;
2)调用发送字符串函数“发送完”从机立即掉电;
【上面两种主要用于芯片对电源控制的项目中】
3)调用发送字符串函数“发送完”立刻进入待机或停机;
其实本文主要说的是两个标志位:usart_flag_txe 和 usart_flag_tc.
usart_flag_txe发送缓冲区空标志:说明可以往数据寄存器写入数据了,但并不代码数据发送完成了。
usart_flag_tc发送完成标志:这个才是代表usart在缓冲区的数据发送完成了,即从机接收到了数据。
这两个标志的区别在于:它们分别表示数据在发送过程中,在两个不同的阶段中的完成情况。txe 表示数据被从发送缓冲区中取走,转移到的移位寄存器中,此时发送缓冲是空的,可以向其中补充新的数据了。而 tc 则表示最后放入发送缓冲区的数据已经完成了从移位寄存器向发送信号线 tx 上的转移。所以,判定数据最终发送完成的标志是 tc,而不是 txe。
下面讲述在不同代码写法下,得到不同实验效果【调试助手接收数据】:
常见写法一
这种写法在不是特殊(不掉电、不待机等)情况下,问题不大,usart数据会成功发送出去。但是在上面说的特殊情况下,问题就来了,代码只将数据放到了发送缓冲区,而没有发送出去就掉电或待机了,这个时候其实最后两个字符是没有发送出去的。
2、常见写法二
这种写法达到的效果和上面存在不同的就是倒数第二个数据发送出去了,也就是只有最后一个字符是没有发送出去的。
3、常见写法三
这种写法达到的效果和上面两种写法有不一样,发送了10个字符。
4、写法四
这种写法按理说可以实现功能,但实际多次试验结果确实第一字节数据丢失了。
5、写法五(正确写法)
这种写法是比较完成,为了保守起见,在特殊情况下使用该写法。。
至此,常见软件写法都给出了源代码和试验效果,请根据自己实际情况写代码验证。


苹果13promax参数配置详细
三相电机驱动应用中的电压和电流感应
i.MX6ULL嵌入式Linux开发5-根文件系统完善
电子传导不平衡引起的厚正极内反应的不均匀性
天时地利,亚洲最大的海上风电场应运而生
串口发送的这几种写法,你用过几种?
TD-LTE的发展路径之争:F频段还是D频段?
华润微上半年净赚10亿!第三代半导体实现突破,在手订单饱满,正有序扩充产能!
微软发布新版To-Do,引入很多奇妙清单功能
快和ChatGPT一起学习如何为PLC扩展CAN总线通信能力吧
为什么处理器这么耗电,该如何解决
如何从TI新的全集成变压器技术中获益
低温循环水槽(高精度)的产品特点是什么
开源大模型Falcon(猎鹰) 180B发布 1800亿参数
python字符串拼接方式了解
中小企业请收藏丨轻量应用服务器企业选购避坑指南
贾跃亭 FF 将通过 SPAC 合并上市,FF 91 或一年后上市
好奇心对于学习人工智能有帮助吗
SpaceX星链卫星互联网用户已超10000名
最简单的直流放大电路图大全(七款最简单的直流放大电路设计原理图详解)