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

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

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

STM32用USART发送字符串,以USART_FLAG_TXE和USART_FLAG_TC怎么用相关推荐

  1. STM32的USART发送数据时如何使用TXE和TC标志

    在USART的发送端有2个寄存器,一个是程序可以看到的USART_DR寄存器(下图中阴影部分的TDR),另一个是程序看不到的移位寄存器(下图中阴影部分Transmit Shift Register). ...

  2. STM32的USART发送中断标志位USART_IT_TXE和USART_IT_TC

    与STM32的发送中断相关的标志位有USART_IT_TXE和USART_IT_TC. 根据ST芯片手册的信息可知,USART在发送移位寄存器(Transmit Shift Register)前面,还 ...

  3. 野火F1开发板STM32案例-USART使用

    野火F1开发板STM32-USART使用 硬件平台 野火STM32F103ZET6 霸道V2开发板 正点原子F1开发板 STM32蓝色板 软件平台 Keil MDK 5.31 串口调试助手 串口配置步 ...

  4. 嵌入式学习笔记——STM32的USART通信概述

    文章目录 前言 常用通信协议分类及其特征介绍 通信协议 通信协议分类 1.同步异步通信 2.全双工/半双工/单工 3.现场总线/板级总线 4. 串行/并行通信 5. 有线通信.无线通信 STM32通信 ...

  5. 在 stm32CubeMX下生成程序完成流水灯以及完成STM32的USART串口通讯程序实现STM32系统给上位机(win10)连续发送“hello windows”

    目录 一.STM32CubeMX简介及安装 二.利用STM32CubeMX生成代码 1.创建项目 2.配置芯片 3.导出项目 ​ 三.Keil中补充代码完善功能 四.在Keil中观察实验波形 五.US ...

  6. stm32之USART/UART应用实例(详细)

    硬件:STM32F103VCT6 开发工具:Keil uVision4 下载调试工具:ARM仿真器 USART与UART的区别: usart:全双工通用同步/异步串行收发器 uart:全双工通用异步串 ...

  7. 串口通信-STM32的USART串口通讯程序

    目录 一.原理介绍 1.串口协议 2.常用协议标准 1)RS-232 2)RS-485 3.RS232.485电平与TTL电平的区别 1)RS232电平 2)RS485电平 3)TTL电平 4)RS2 ...

  8. STM32单片机ESP8266发送数据到WiFi接收端代码实现

    ESP8266支持的一些指令看我另一篇博文:http://blog.csdn.net/qq_17242837/article/details/53931712 首先需要配置STM32的串口发送和接收, ...

  9. 【STM32】USART

    文章目录 一.USART是什么? 二.硬件基础 1.USART主机接USART从机 2.USART主机接电脑USB 3.USART主机接RS232从机 4.USART主机接RS485从机 三.功能框图 ...

最新文章

  1. zepto和jquery的区别,zepto的不同使用8条小结
  2. 康托展开式---我排第几+逆康托展开
  3. Bootstrap的栅格布局
  4. python 钉钉消息推送_python3实现钉钉消息推送的方法示例
  5. 关于wordpress中更换CKEditor编辑器
  6. IPSEC非单播流量处理
  7. 在什么情况下,刘强东会丧失京东的控制权?
  8. leetcode 973. 最接近原点的 K 个点(排序)
  9. GPRS底层API(转)
  10. Python 文件读写操作-Python零基础入门教程
  11. 关于大量数据的随机打乱重保存.(少了详细解释,之后会更新)
  12. 2.写给设计师看的HTMLCSS入门指导
  13. 华为机试HJ83:二维数组操作
  14. python-图书管理系统2-整体 代码架构
  15. Hvdc-vsc. 基于vsc的柔性直流输电模型 pscad实现
  16. HTML网页设计结课作业 榆林子州 HTML5响应式旅游景区网站模板
  17. java学习——java面试【事务、锁、多线程】资料整理
  18. html清除图层,ps按delete不能删除图层怎么办?
  19. 计算机中插入背景图片怎样操作,word插入背景图片_Word 2007中插入图片的背景设置妙招_word中插入背景图片_word插入图片做背景...
  20. 风生水起的VR直播丨VR直播市场何时迎来爆发期?

热门文章

  1. 阿里开源项目汇总(二十)
  2. 【BZOJ 4555】[Tjoi2016Heoi2016]求和 多项式求逆/NTT+第二类斯特林数
  3. web访问 FastDFS 方法思路
  4. Nginx如何配置虚拟主机?
  5. 使用pngquant来压缩png资源缩小apk
  6. C语言怎么保留n位小数并且四舍五入(附带两种简单方法)
  7. senseFly为eBee农用无人机装备多谱段传感器
  8. vsftp本地用户,虚拟用户,匿名用户同时工作
  9. 朗讯项目的一个概括总结.
  10. Android使用ViewPager实现左右循环滑动及轮播效果