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

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

3天内不再提示

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

jf_pJlTbmA9 来源:jf_pJlTbmA9 作者:jf_pJlTbmA9 2023-11-02 16:20 次阅读

一、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);
}

pYYBAGIB2JCANeDlAABaPG26uyU307.jpg
poYBAGIB2JKAAgOoAADcQH4C2Vw401.jpg

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。

下面讲述在不同代码写法下,得到不同实验效果【调试助手接收数据】:

常见写法一

poYBAGIB2JSAYHr3AAALTrKKaP4183.png
pYYBAGIB2JWAEg8vAAAdFRfPn5I835.png

这种写法在不是特殊(不掉电、不待机等)情况下,问题不大,USART数据会成功发送出去。但是在上面说的特殊情况下,问题就来了,代码只将数据放到了发送缓冲区,而没有发送出去就掉电或待机了,这个时候其实最后两个字符是没有发送出去的。

2、常见写法二

pYYBAGIB2JeAQgDlAAAKWjsaLQQ970.png
poYBAGIB2JiAVDcbAAAc5wK0SCo307.png

这种写法达到的效果和上面存在不同的就是倒数第二个数据发送出去了,也就是只有最后一个字符是没有发送出去的。

3、常见写法三

poYBAGIB2JmAOj7BAAALWgTxmTA496.png
pYYBAGIB2JqAEEQAAAAdF6NcPn4113.png

这种写法达到的效果和上面两种写法有不一样,发送了10个字符。

4、写法四

pYYBAGIB2JuAP9qiAAAJIDOgFXs339.png
poYBAGIB2J2AGqmWAAAgHdBothY493.png

这种写法按理说可以实现功能,但实际多次试验结果确实第一字节数据丢失了。

5、写法五(正确写法)

poYBAGIB2J6AVfi8AAAJtYBIDMc825.png
pYYBAGIB2J-AUs4EAAAdl4VsIbs308.png

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

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

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348755
  • 串口
    +关注

    关注

    14

    文章

    1483

    浏览量

    74513
  • USART
    +关注

    关注

    1

    文章

    186

    浏览量

    30409
收藏 人收藏

    评论

    相关推荐

    西门子SMART200PLC一键启停的几种写法

    在生产中,由于安装环境,成本控制,操作便利等因素,会用到一键启停的控制,比如电机控制,阀门控制等等,今天我给大家聊聊常见的几种写法,为了直观通俗,我们用LAD(梯形图)来写。
    发表于 07-14 09:21 2233次阅读
    西门子SMART200PLC一键启停的<b class='flag-5'>几种</b><b class='flag-5'>写法</b>

    栅漏电流噪声有哪几种模型?这几种模型有什么局限性?

    常见的栅漏电流噪声模型有哪几种这几种模型的特性是什么?有什么局限性?
    发表于 04-09 06:44

    栅漏电流噪声有哪几种模型?这几种模型具有什么特性和局限性?

    栅漏电流噪声特性是什么?栅漏电流噪声有哪几种模型?这几种模型具有什么特性和局限性?
    发表于 04-14 06:53

    这几种常见的薄膜电阻器都了解吗?

    这几种常见的薄膜电阻器都了解吗?
    发表于 06-07 06:30

    常见的整流电路有哪几种?如何去区分这几种常见的整流电路?

    常见的整流电路有哪几种?其特性是什么?如何去区分这几种常见的整流电路?对整流电路中二极管的要求有哪些?
    发表于 07-11 07:19

    什么是串口通信?串口通信的基本方式有哪几种

    什么是串口通信?串口通信的基本方式有哪几种?异步数据的数据发送过程有哪些步骤?串口通信的数据格式是怎样的?
    发表于 07-16 08:21

    如何使用bxCAN过滤器的这几种工作模式呢

    bxCAN过滤器的工作模式有哪几种?如何使用bxCAN过滤器的这几种工作模式呢?对应的代码示例是怎样的?
    发表于 11-01 07:07

    串口接收/发送有哪几种模式?

    串口接收/发送有哪几种模式?
    发表于 12-09 08:02

    总结下单片机的这几种架构

    “从毕业到工作的这10年的时间,自己使用的单片机架构也在升级,从最初的前后台顺序执行到时间片轮转调度再到现在RTOS,下面就结合一些案例来总结下这几种架构吧”01—前后台顺序法这种方法,...
    发表于 12-09 07:04

    串口发送数据的方式有哪几种

    串口发送数据的方式有哪几种
    发表于 12-10 07:49

    STM32串口数据的接收与发送处理的几种模式分别是哪些

    STM32串口发送数据为什么会丢失呢?怎样去解决?STM32串口数据的接收与发送处理的几种模式分别是哪些?
    发表于 12-10 07:37

    C语言的main函数有几种写法

    从学习C语言开始就一直写个一个函数,那么你知道它的标准写法什么什么样吗? main函数,又称主函数,是程序执行的起点,我们平时写的main函数是什么样呢? 1,是这样? main(){} 2,还是
    的头像 发表于 10-15 11:04 3068次阅读

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

    它们分别表示数据在发送过程中,在两个不同的阶段中的完成情况。TXE 表示数据被从发送缓冲区中取走,转移到的移位寄存器中,此时发送缓冲是空的,可以向其中补充新的数据了。而 TC 则表示最后放入
    发表于 02-08 15:16 2次下载
    <b class='flag-5'>串口</b><b class='flag-5'>发送</b>的<b class='flag-5'>这几种</b><b class='flag-5'>写法</b>,你<b class='flag-5'>用过</b><b class='flag-5'>几种</b>?

    LABVIEW打开调用子VI的几种办法

    总结了LABVIEW打开调用子VI的几种办法,程序写法
    发表于 08-20 15:31 49次下载

    对HPM6750的这几种调试方式展开介绍

    HPM6750支持jlink、dap和ft2232等多种调试方式,本文将对这几种调试方式展开介绍,方便大家灵活选用不同的调试方式。
    的头像 发表于 02-01 09:56 2592次阅读