Ⅰ、写在前面
今天这篇文章分享的知识点比较少,但比较重要,是大部分人在实际项目开发中都容易忽视,且容易犯下的低级错误。
本文讲述在项目开发中,或在学习中经常遇到USART发送字符串,对方没有接收完成(最后一两字节),也就是最后字节数据丢失了。具体可以看下面章节实验。
关于本文的更多详情请往下看。
Ⅱ、实例工程
为了方便大家学习,提供实验源代码工程给大家参考。
STM32F10x_SART(验证USART发送字符串):
https://yunpan.cn/ckInh8YTwWHVP访问密码 81f9
提供下载的实例实现的功能比较简单,主要是用于验证不同情况下,发送字符的不同。
实例实现功能可以从下面main函数中看的出来,打印数据,进入待机。为了方便用户进入待机不能下载程序,例程使用了一个唤醒按键PC13(可以修改),唤醒有一个LED闪烁和延时,这个期间可以重新下载代码。
Ⅲ、本文要点
这里主要说的是在特殊情况下发送字符软件代码的写法。
特殊情况指的是:
1.调用发送字符串函数“发送完”本机立即掉电;
2.调用发送字符串函数“发送完”从机立即掉电;
3.调用发送字符串函数“发送完”立刻进入待机或停机;
其实本文主要说的是两个标志位:USART_FLAG_TXE 和 USART_FLAG_TC.
USART_FLAG_TXE发送缓冲区空标志:说明可以往数据寄存器写入数据了,但并不代码数据发送完成了。
USART_FLAG_TC发送完成标志:这个才是代表USART在缓冲区的数据发送完成了,即从机接收到了数据。
这两个标志的区别在于:它们分别表示数据在发送过程中,在两个不同的阶段中的完成情况。TXE 表示数据被从发送缓冲区中取走,转移到的移位寄存器中,此时发送缓冲是空的,可以向其中补充新的数据了。而 TC 则表示最后放入发送缓冲区的数据已经完成了从移位寄存器向发送信号线 Tx 上的转移。所以,判定数据最终发送完成的标志是 TC,而不是 TXE.
下面讲述在不同代码写法下,得到不同实验效果【调试助手接收数据】:
1.常见写法一
这种写法在不是特殊(不掉电、不待机等)情况下,问题不大,USART数据会成功发送出去。 但是在上面说的特殊情况下,问题就来了,代码只将数据放到了发送缓冲区,而没有发送出去就掉电或待机了,这个时候其实最后两个字符是没有发送出去的。
2.常见写法二
这种写法达到的效果和上面存在不同的就是倒数第二个数据发送出去了,也就是只有最后一个字符是没有发送出去的。
3.常见写法三
这种写法达到的效果和上面两种写法有不一样,发送了10个字符。
4.写法四
这种写法按理说可以实现功能,但实际多次试验结果确实第一字节数据丢失了。
5.写法五(正确写法)
这种写法是比较完成,为了保守起见,在特殊情况下使用该写法。。
至此,常见软件写法都给出了源代码和试验效果,请根据自己实际情况写代码验证。
Ⅳ、说明
以上几点内容比较容易出现问题,希望对你项目开发起到帮助作用。
以上总结仅供参考,若有不对之处,敬请谅解。。
-
源代码
+关注
关注
96文章
2947浏览量
67018 -
USAR
+关注
关注
0文章
4浏览量
8410 -
main
+关注
关注
0文章
38浏览量
6212
发布评论请先 登录
相关推荐
为什么很多古建筑、寺容易着火?
![为什么<b class='flag-5'>很多</b>古建筑、寺<b class='flag-5'>容易</b>着火?](https://file1.elecfans.com//web3/M00/03/B8/wKgZPGdrtSGAWv2uAAIRpQc_mQU316.png)
电平匹配问题,简单却容易被忽视
![电平匹配问题,简单却<b class='flag-5'>容易</b>被<b class='flag-5'>忽视</b>](https://file.elecfans.com/web2/M00/50/DA/pYYBAGLH6TyAB71EAAAPQ7KgtYA038.png)
一文看懂为什么贴片共模电感的感量在电路中会不稳定
NAS工具软件大盘点:瞧瞧哪个被你遗漏了
创建Aurix项目失败怎么解决?
【RISC-V信息速递】反X86和ARM垄断?很多人低估了RISC-V的颠覆性
![【RISC-V信息速递】反X86和ARM垄断?<b class='flag-5'>很多人</b>低估了RISC-V的颠覆性](https://file.elecfans.com/web2/M00/02/C4/pYYBAGDSzfeAP86XAAAO5PbqJbI698.png)
如何挑选一个合适的HIS系统? 基于B/S架构,JAVA语言,springboot最新技术栈开发的整套云HIS系统源码 HIS源码
![如何挑选<b class='flag-5'>一</b><b class='flag-5'>个</b>合适的HIS系统? 基于B/S架构,JAVA语言,springboot最新技术栈开发的整套云HIS系统源码 HIS源码](https://file1.elecfans.com//web2/M00/EA/7B/wKgaomZUPlSAXHJgAAFwpLYREFs201.png)
串口发送函数HAL_UART_Transmit( huart1, transmit,len, timeout) 里的timeout一般设置多少比较合适?
一体式贴片电感封装尺寸是不是都一样
关于STM32 DMAMUX模块具体的应用示例代码
![<b class='flag-5'>关于</b>STM32 DMAMUX模块具体的应用示例代码](https://file1.elecfans.com/web2/M00/C5/98/wKgZomYA0KWAXr1uAAActZx-jhs970.png)
电动车火灾频发,如何预防?这一点很多人都忽略了
![电动车火灾频发,如何预防?这<b class='flag-5'>一</b>点<b class='flag-5'>很多人</b><b class='flag-5'>都</b>忽略了](https://file1.elecfans.com/web2/M00/C2/13/wKgZomXgGOaAa1eaAADdeP8FkU0468.png)
评论