Ⅰ、写在前面

今天这篇文章分享的知识点比较少,但比较重要,是大部分人在实际项目开发中都容易忽视,且容易犯下的低级错误。

本文讲述在项目开发中,或在学习中经常遇到USART发送字符串,对方没有接收完成(最后一两字节),也就是最后字节数据丢失了。具体可以看下面章节实验。

关于本文的更多详情请往下看。

Ⅱ、实例工程

为了方便大家学习,提供实验源代码工程给大家参考。

STM32F10x_USART(验证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.写法五(正确写法)

这种写法是比较完成,为了保守起见,在特殊情况下使用该写法。。

至此,常见软件写法都给出了源代码和试验效果,请根据自己实际情况写代码验证。

Ⅳ、说明

以上几点内容比较容易出现问题,希望对你项目开发起到帮助作用。

以上总结仅供参考,若有不对之处,敬请谅解。

Ⅴ、最后

我的博客:http://blog.csdn.net/ybhuangfugui

微信公众号:EmbeddDeveloper

更多精彩文章我将第一时间在微信公众号里面分享,如果不想错过,可以关注我的微信公众号。

本着免费分享的原则,方便大家手机学习知识,定期在微信平台分享技术知识。如果觉得文章的内容对你有用,又想了解更多相关的文章,请用微信搜索EmbeddDeveloper” 或者扫描下面二维码、关注,将有更多精彩内容等着你。

关于USART很多人都容易忽视的一个问题相关推荐

  1. 很多人都忽视了账号基建重要性

    很多人都忽视了账号基建重要性,是指账号的基础搭建,包括名称.头像.领域.简介.背景图等,相当于一个门店形象.某个人或某家公司给人的第一印象.用户点开你的账号首先看到的就是这些,账号基础搭建做不好直接影 ...

  2. 信号完整性测试,关于SMA装配的细节,很多人都忽视了

    作者 | 萧隐君,仿真秀专栏作者 SMA转接头是射频微波.天线和高速电路测试经常用到的一种连接器,应用非常广泛,种类也很多.在信号完整性的测试夹具中,2.92mm的SMA用的较多,它的带宽可以到40G ...

  3. 移植后php感染,除了排斥、感染…移植后容易发生的这项疾病,很多人都忽视了!...

    原标题:除了排斥.感染-移植后容易发生的这项疾病,很多人都忽视了! 发生率高.危险性强,论起移植术后最让人头疼的,一定是排斥反应和术后感染这两大难题.殊不知,移植术后还有一种疾病正在悄悄的破坏人体. ...

  4. 波音737-800座位图哪个好_「科普」汽车哪个座位才安全?很多人都不知道

    汽车行驶,安全永远是最重要的. 平时司机开车要注意保持车距,小心慢行. 而身为乘客,乘车时又需要注意什么呢? 平时乘坐汽车时,你一般会坐在哪里?A?B?还是C呢?大多数人会毫不犹豫地说,驾驶席的后方座 ...

  5. “感动阿里”的技术小二刘畅:善良的事情,我身边很多人都在做

    凌晨四点半,正是人们为甜蜜的梦乡收尾的时候,刘畅却在这个时候因一阵急促的捶门声而惊醒,门外是一个女孩惊慌失措地喊叫声:"我妈跳楼了,快救救她!" 这位腼腆的阿里巴巴CBU技术小二, ...

  6. 很多人都在埋怨没有遇到好的团队,但好的团队不可能凭空出现,一流的团队不能仅靠团队成员努力,作为Leader,要有可行的规划,并坚定地执行、时势地调整(转)...

    <西游记>中的唐僧团队历经千难万险,终于求得真经,目标明确.分工合理为这支队伍最终走向成功奠定了基础.唐僧从一开始,就为这个团队设定了西天取经的目标,虽然经历各种挫折与磨难,但目标从未动摇 ...

  7. python语言有什么用-为什么现在很多人都使用Python语言有什么优势

    很多人觉得程序猿是高薪的代表,很多人都想学习一门编程语言,如果你想选择一种语言来入门编程,那么Python绝对是首选!其非常接近自然语言,精简了很多不必要的分号和括号,非常容易阅读理解.接下来一起看看 ...

  8. 车仪表台上的装饰_仪表台放这个东西,相当于定时炸弹,很多人都忽略了

    阅读本文前,请您先点击上面的蓝色字体"总李谈车",再点击"关注",这样您就可以继续免费收到文章了.每天都有分享,完全是免费订阅,请放心关注.原创持续更新&quo ...

  9. 现在是不是很多人都不愿意在银行存钱?

    虽然很多朋友口口声声说不会把钱存在银行,但实际上却悄悄地在银行存款,这点可以从存款数据看出来. 据有数据显示,自1979年至2018年这39年间,我国金融机构各项存款余额同比增速从未跌破9%. 虽然最 ...

最新文章

  1. 菜鸟学习javascript实例教程
  2. 线程死锁与共享变量的使用(转载)
  3. 前端学习(2240):构造Vue的的利器-脚手架vue-cli3
  4. python两个同切圆_求两个圆的交点
  5. POWERSPLOIT-Recon(信息侦察)脚本渗透实战
  6. java一个式子开根号语句_Oracle查询语句,你知道几个?(上)
  7. 配置文件中符号报错,无法识别
  8. 推荐一个准确率99.9%的离线IP地址定位服务!
  9. 推荐两个高仿抖音 App 项目
  10. 启发式搜索算法 - 以A*为中心来说明启发式算法本质是要找有效的heuristic需要满足的性质
  11. 数字图像处理篇(1)数字图像基础
  12. idea显示前进和后退按钮
  13. 格拉姆-施密特过程的程序实现
  14. Spring Social实现QQ社交登录、注册
  15. windows2012R2安装python3.x版本报错0x80240017
  16. 微信小程序开发什么工具好?
  17. echarts散点图x轴和y轴在中间位置
  18. 【软考】【系统架构设计师】最小生成树知识点
  19. ffmpeg代码实现往视频文件里面叠加文字
  20. (附源码)基于SSM框架的图片分享及评价网站设计与实现 毕业设计201524

热门文章

  1. Python基础常识:导入一个库
  2. python圆柱体积代码_python:表示环绕自身的方形网格(圆柱体)
  3. java date加月_如何在Java中向当前日期添加一个月?
  4. python参数寻优_Libsvm网格参数寻优教程
  5. python解码中文文本报错的解决办法
  6. 《墨菲定律》读书笔记2020.2.3
  7. Linux库的分文件编程
  8. Glid 加载图片不显示(Android9.0无法加载图片)问题
  9. 梅宫主:社群营销之—实体店如何运用社群营销 重新引爆业绩增长
  10. 了解什么是迁移学习理论?以及如何运用实践