0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-24 11:38 次阅读

Ⅰ、写在前面

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

本文讲述在项目开发中,或在学习中经常遇到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
收藏 人收藏

    评论

    相关推荐

    为什么很多古建筑、寺容易着火?

    、安全用电隐患 线路老化:古建筑寺庙建成时间久,部分电气线路可能使用多年未更新,绝缘层老化、破损,容易引发漏电、短路事故,进而可能引发火灾。安科瑞+武陈燕+17269603655 过载用电:随着
    的头像 发表于 12-25 15:32 268次阅读
    为什么<b class='flag-5'>很多</b>古建筑、寺<b class='flag-5'>容易</b>着火?

    高速、RF射频信号的参考平面分析

    对于电子爱好者来说,在PCB设计中,参考平面的问题经常让很多人感到困惑。众所周知,电源平面可以作为参考平面,常见的6层板采用电源层
    的头像 发表于 12-25 11:37 244次阅读
    高速、RF射频信号的参考平面分析

    电平匹配问题,简单却容易忽视

    导读在电路设计中,电平匹配是基本要求,但常常被忽视,可能导致设备故障和通信异常。本文我们将揭示如何避免因电平不匹配导致的设备故障,并提供实用的设计建议,确保您的电路设计既高效又稳定。电平匹配
    的头像 发表于 12-20 11:34 403次阅读
    电平匹配问题,简单却<b class='flag-5'>容易</b>被<b class='flag-5'>忽视</b>

    文看懂为什么贴片共模电感的感量在电路中会不稳定

    的参数。本篇我们来探讨很多人关心的问题——贴片共模电感在电路中为什么会感量突然变化。   结合多年的实践经验,我们可以将引起贴片共模电感量突变的原因归纳为以下几点: 1. 温度变化的影响:电感量通常与温度变化有关
    的头像 发表于 11-03 16:39 361次阅读

    NAS工具软件大盘点:瞧瞧哪个被你遗漏了

    很多人听说过NAS,也有很多人正在使用NAS。 NAS用户通常需要安装些软件来扩展其功能,毕竟NAS的功能实在是太多了,光是部署与调试就要耗费大量的时间, 小宝集合了NAS相关实用
    的头像 发表于 08-01 16:26 1580次阅读

    创建Aurix项目失败怎么解决?

    我尝试创建新的 Aurix 项目,但点击底部的 &quot;完成 &quot;后,没有创建新文件,工作区仍然是空的。 我在论坛上搜索了这个问题,发现很多人遇到过这
    发表于 07-23 07:49

    【RISC-V信息速递】反X86和ARM垄断?很多人低估了RISC-V的颠覆性

    原文标题:【RISC-V信息速递】反X86和ARM垄断?很多人低估了RISC-V的颠覆性文章出处:【微信公众号:RISCV国际人才培养认证中心】欢迎添加关注!文章转载请注明出处。
    的头像 发表于 06-08 08:36 273次阅读
    【RISC-V信息速递】反X86和ARM垄断?<b class='flag-5'>很多人</b>低估了RISC-V的颠覆性

    如何挑选合适的HIS系统? 基于B/S架构,JAVA语言,springboot最新技术栈开发的整套云HIS系统源码 HIS源码

    最近有很多人在询问,有没有最优秀的HIS系统?在这里小编是没办法回答的。为什么呢?
    的头像 发表于 05-27 16:03 888次阅读
    如何挑选<b class='flag-5'>一</b><b class='flag-5'>个</b>合适的HIS系统? 基于B/S架构,JAVA语言,springboot最新技术栈开发的整套云HIS系统源码 HIS源码

    USART上对应RTS的GPIO引脚不需要定义吗?

    大家知道USART中RX和TX这两引脚的功能,它们是USART串行通信最常见和必不可少的两引脚。但是
    发表于 04-25 08:05

    STM32抗干扰能力如何?

    ,打算换这个芯片。但是有很多人说STM32抗干扰能力很差,在复杂电池环境下容易死机!各位有没有用它做个类似的产品啊 ?效果如何 ?
    发表于 04-25 06:15

    李彦宏说开源模型会越来越落后,为什么很多人不认同?

    上周,百度董事长兼CEO李彦宏对于开源大模型的番言论引发了争议。
    的头像 发表于 04-24 09:37 634次阅读
    李彦宏说开源模型会越来越落后,为什么<b class='flag-5'>很多人</b>不认同?

    串口发送函数HAL_UART_Transmit( huart1, transmit,len, timeout) 里的timeout般设置多少比较合适?

    字节的等待超时时间,那么以9600波特率为例,发送1字节1ms都不需要,那这个值应该设置很小的值比如10就够了,但为什么网上很多人的例程里都是设置了1000甚至更大?
    发表于 04-11 07:22

    体式贴片电感封装尺寸是不是

    替代的问题。其中,关于不同不同品牌封装尺寸是否样的话题,一直都很多人在讨论。 不同品牌的体式贴片电感,虽然在功能上差不多,但它们的封装尺寸却不相同。比如,某品牌的
    的头像 发表于 04-03 22:45 405次阅读

    关于STM32 DMAMUX模块具体的应用示例代码

    有人通过公众号微信留言,询问是否有关于STM32 DMAMUX模块具体的应用示例代码。同时,个人也发现,虽然STM32片内的DMAMUX不是什么新模块,似乎还是很多人并不太熟悉。这里借机聊聊这方面的内容,重点演示相关功能的实现,以供参考。
    的头像 发表于 03-25 09:15 2620次阅读
    <b class='flag-5'>关于</b>STM32 DMAMUX模块具体的应用示例代码

    电动车火灾频发,如何预防?这很多人忽略了

    电动车火灾频发,选择正规厂家生产的电动车与电池是预防关键。艾迈斯电子提供的第四代智能设备动力连接器LC系列,高载流低温升安全无忧,采用T2紫铜镀银导体和PBT塑壳材质,通过多项测试标准,有效降低火灾风险,为电动车充电安全提供有力保障。
    的头像 发表于 02-29 13:41 458次阅读
    电动车火灾频发,如何预防?这<b class='flag-5'>一</b>点<b class='flag-5'>很多人</b><b class='flag-5'>都</b>忽略了