串口发送有几种写法? (转载)

2023-05-16

转载自:串口发送有几种写法?

串口发送有几种写法?

嵌入式大杂烩  前天

关注「嵌入式大杂烩」,选择「星标公众号」一起进步!

STM32用USART发送字符串,USART_FLAG_TXE和USART_FLAG_TC怎么用?

一:STM32用USART发送字符串

void UART_Send_Message(u8 *Data){  while(*Data!='\0')  {      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.

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

  1. 常见写法一 

图片

图片

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

2.常见写法二 

图片

图片

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

3.常见写法三 

图片

图片

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

4.写法四 

图片

图片

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

5.写法五(正确写法) 

图片

图片

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

串口发送有几种写法? (转载) 的相关文章

  • Postman安装与使用(转载)

    转载自 xff1a https www cnblogs com fnng p 9136434 html Postman安装与使用 2018 06 04 22 58 虫师 阅读 418868 评论 13 编辑 收藏 举报 Postman一款非
  • Python requests HTTP验证登录实现流程

    对我而言最重要的是这几句 假设url为http xxx yyy zzz 用户名为admin 密码为123456 则访问的网址应该为http admin 123456 64 xxx yyy zzz http username password
  • 记一次Ubuntu 18.04 内核升级(转载)

    https zhuanlan zhihu com p 75669680 记一次Ubuntu 18 04 内核升级 CCCCCaO 闷骚得很 前言 原本使用 Ubuntu Server 18 04 2 LTS 来搭建一个NextCloud服务
  • 有图形化工具升级linux内核 ukuu-gtk

    有图形化工具升级linux内核 ukuu gtk https zhuanlan zhihu com p 75669680 转载自 xff1a https os 51cto com art 201905 596204 htm 借助UKUU在U
  • 网络通信1—TCP程序编写步骤(参照 Ubuntu 16.04 版本)(转载)

    转载自 xff1a https blog csdn net wenfei11471 article details 79478105 网络通信1 TCP程序编写步骤 xff08 参照 Ubuntu 16 04 版本 xff09 wenfei
  • select实现简单TCP通信(ubuntu 18.04)

    用法 cilent IP地址 然后在终端输入内容敲回车就可以了 端口号在代码里写的 转载自 xff1a https www cnblogs com soldierback p 10701684 html select实现简单TCP通信 ub
  • C语言网络编程(2)— TCP通信(转载)

    转载自 xff1a C语言网络编程 xff08 2 xff09 TCP通信 Willliam william的博客 CSDN博客 c语言tcp网络编程 C语言网络编程 xff08 2 xff09 TCP通信 Willliam william
  • 在ubuntu+vs code上通过HTTP协议实现服务器端和客户端通信(转载)

    转载自 xff1a 在ubuntu 43 vs code上通过HTTP协议实现服务器端和客户端通信 DP323的博客 CSDN博客 在 ubuntu 43 vs code上通过HTTP协议实现服务器端和客户端通信 DP323 2021 06
  • 常见元件、封装及尺寸

    封装类型 贴片元器件封装形式是半导体器件的一种封装形式 表面贴片技术 xff08 SMT xff09 所涉及的零件种类繁多 xff0c 有许多已形成业界通用标准 xff0c 这主要是一些芯片电容电阻等 xff1b 有许多仍在不断的变化 xf
  • C++:C语言实现HTTP的GET和POST请求

    似乎写代码发HTTP请求需要自己把完整的协议帧写出来 xff1f 而不是单纯填个URL就行了 xff0c 那既然完整协议帧都写出来了 xff0c 那我直接TCP发不就可以了 xff1f 还是说不能这样 基本你百度搜 c 43 43 发送ht
  • 字符串连接函数strcat,这个可以好好用用

    字符串连接函数strcat xff0c 这个可以好好用用 C 43 43 xff1a C语言实现HTTP的GET和POST请求 方方和圆圆 博客园 C 43 43 编写的Linux下Http请求 c 43 43 httplinux 其它代码
  • HTTP 账号密码验证

    http请求带用户名和密码验证 wdk的博客 CSDN博客 url带用户名和密码 转载自 xff1a HTTP 账号密码验证 qq 25600055的专栏 CSDN博客 HTTP 账号 密码验证 173300598 2018 05 28 1
  • http authorization 基本认证

    转载自 xff1a http authorization 基本认证 szchenrong 博客园 http authorization 基本认证 http协议是无状态的 xff0c 浏览器和web服务器之间可以通过cookie来身份识别 桌
  • HTTP报文(这篇讲得比较详细)

    转载自 xff1a HTTP报文 逆心 博客园 之前写过一篇HTML报文 xff0c 但是感觉写完之后还是不懂 xff0c 最近终于有时间开始看 HTTP权威指南 xff0c 看完之后觉得还是比之前的理解更加深入了 xff0c 提取HTTP
  • libcurl可以发送http请求

    libcurl可以发送http请求 轻量级C 43 43 实现的httpserver和httpclient c 43 43 httpserver C 43 43 代码类资源 CSDN下载 转 libcurl库使用方法 xff0c 好长 xf
  • Http Get请求简单实例(C++)

    转载自 xff1a 掘金 https juejin cn post 6844903897161531400 Http Get请求简单实例 xff08 C 43 43 xff09 HTTP报文 HTTP请求报文 请求行 xff1a GET H
  • 纯C++实现的HTTP请求封装(POST/GET)

    转载自 xff1a 纯C 43 43 实现的HTTP请求封装 xff08 POST GET xff09 阳光柠檬 的技术笔记 CSDN博客 纯C 43 43 实现的HTTP请求封装 xff08 POST GET xff09 时间 2016
  • [转]www-authenticate认证过程浅析

    转载自 xff1a 转 www authenticate认证过程浅析 maoliran的博客 CSDN博客 转 www authenticate认证过程浅析 新一下的兰天 2016 07 06 18 22 20 18002 正在上传 重新上
  • http Digest认证计算方法整理

    摘要认证及实现HTTP digest authentication 简书 HTTP Basic和Digest认证介绍与计算 诸子流 博客园 不要不知道上面说的URI是什么意思啊 图解HTTP 第 8 章 确认访问用户身份的认证 简书 8 1

随机推荐