void UART_Send_Byte(USART_TypeDef *USARTx, uint8_t cha)
{
USART_SendData(USARTx, cha);
while(USART_GetFlagStatus(USARTx,USART_FLAG_TXE)==RESET) ;
}

这是发送单个字符的函数,其中while(USART_GetFlagStatus(USARTx,USART_FLAG_TXE)==RESET) ; 这句代码非常重要,

如果没有这句代码,发送一连串数据的时候就可能出现:

USART的发送寄存器(TDR)还没发送出去数据,就被总线新来的数据覆盖,最后可能只打印出一个字符。


发送字符串函数应该为:

void UART_Send_String(USART_TypeDef *USARTx, char *str)
{
int i=0;
#if 0   
while(*(str+i)!='\0')
{
USART_SendData(USARTx, *(str+i));//错误的,没有进行TXE检测
i++;
}
#endif #if 1
do
{
UART_Send_Byte(USARTx, *(str+i));//正确的,进行了TXE检测
i++; }while(*(str+i)!='\0'); #endif while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)!=SET) ; }

STM32-USART打印字符、字符串函数自己犯的错误反思的更多相关文章

  1. js函数易犯的错误

    1.定义一个js函数时不能写在另一个函数里面. 2.定义一个打开网页自动执行的函数,一定要注意加载的顺序.如果是不是自动执行的,而是等页面加载完后事件触发的,那写在任何地方都没问题. 错误的:

  2. iOS 中基础字符判断函数收集(如判断大小写、数字等)

    函数:isdigit 用法:#include 功能:判断字符c是否为数字 说明:当c为数字0-9时,返回非零值,否则返回零. 函数:islower 用法:#include 功能:判断字符c是否为小写英 ...

  3. Linux c字符串中不可打印字符转换成16进制

    本文由 www.169it.com 搜集整理 如果一个C字符串中同时包含可打印和不可打印的字符,如果想将这个字符串写入文件,同时方便打开文件查看或者在控制台中打印出来不会出现乱码,那么可以将字符串中的 ...

  4. C 字符/字符串常用函数

    string.h中常用函数 char * strchr(char * str ,char ch); 从字符串str中查找首次出现字符ch的位置,若存在返回查找后的地址,若不存在则返回NULL void ...

  5. C 字符/字符串经常使用函数

    string.h中经常使用函数 char * strchr(char * str ,char ch); 从字符串str中查找首次出现字符ch的位置,若存在返回查找后的地址.若不存在则返回NULL vo ...

  6. 【C++实现python字符串函数库】二:字符串匹配函数startswith与endswith

    [C++实现python字符串函数库]字符串匹配函数startswith与endswith 这两个函数用于匹配字符串的开头或末尾,判断是否包含另一个字符串,它们返回bool值.startswith() ...

  7. JavaScript 字符串函数 之查找字符方法(一)

    1.JavaScript查找字符方法   首先看一张 有关字符串函数的查找字符的方法图 接下里补充里面的方法说明 2.charAt()     charAt() 方法返回字符串中指定位置的字符 语法 ...

  8. Linux C 字符串函数 sprintf()、snprintf() 详解

    一.sprintf() 函数详解 在将各种类 型的数据构造成字符串时,sprintf 的强大功能很少会让你失望. 由于 sprintf 跟 printf 在用法上几乎一样,只是打印的目的地不同而已,前 ...

  9. [stm32] USART USART1收发功能工程

    >_<!功能:PC端发送一个特定的字符:0x0d 0x0a,单片机则返回一句话,如图: >_<!知识: 1.复用功能I/O和调试配置(AFIO)  为了优化外设数目,可以把一些 ...

  10. [转载]Linux C 字符串函数 sprintf()、snprintf() 详解

    一.sprintf() 函数详解 在将各种类 型的数据构造成字符串时,sprintf 的强大功能很少会让你失望. 由于 sprintf 跟 printf 在用法上几乎一样,只是打印的目的地不同而已,前 ...

随机推荐

  1. VS 生成事件 xcopy 报错的解决方法

    出现这种情况有可能原因有2种可能: 1.目标文件夹设为只读:此时报错:MSB3073 代码4 ,输出显示:访问遭到拒绝. 解决:去掉文件夹只读属性. 2.缺少环境变量:报错为::MSB3073 代码9 ...

  2. springboot项目的创建和兼容jsp和注解开发,详细有效(注解和配置两种)

    如果这篇博客能给你带来帮助不胜荣幸,如果有不对的地方,都是码农欢迎指正.直接进入正题 在这里首先我要声明一下我个人的感觉如果你会ssm(spring+mybatis+springmvc)的话,那么你可 ...

  3. [Linux系统]安装时出现Requires: libc.so.6(GLIBC_2.17)(64bit) Requires: systemd Requires: libstdc++.so时解决办法

    yum install glibc.i686 yum list libstdc++*

  4. redis底层数据结构之快速列表(quicklist)

    快速列表(quicklist) redis3 .2版本之前,List类型数据使用的底层数据结构是压缩列表(ziplist)或双向链表(linkedlist),当列表元素个数比较少并且每个元素占用空间比 ...

  5. mysql:数据库加解密查询

    解密:SELECT CONVERT (AES_DECRYPT(UNHEX( column_name), '密钥') USING utf8) AS column_name,from table_name ...

  6. 8.class 类

    一.基础语法 class 类名 { } 二.类的属性 基础语法: class 类名 { 属性名: 数据类型 = 属性值; contructor(形参名: 数据类型) { this.属性名 = 属性值; ...

  7. Xrdp服务安装配置实现Linux远程桌面访问以及问题处理

    0x00 基础介绍 0x01 安装桌面环境 Ubuntu 系列 0x02 Xrdp 安装使用 How to Install xrdp on Ubuntu ? How to Install xrdp t ...

  8. [CSAPP]第一章 计算机系统漫游 学习笔记

    CSAPP 第一章 计算机系统漫游 1.1 信息就是位+上下文 系统中所有信息-----包括磁盘文件.内存中的程序.内存中存放的用户数据以及网络上上传的数据,都是由一串比特表示的.同时区分不同数据对象 ...

  9. Python的入门学习Day 28~30——form”夜曲编程“

    Day 28 in Day 29 time: 2021.8.26. ​ 时间模糊了界限,虽我日渐走远.转眼而过的二十多天,既留下了夏天在沙滩上的足迹,同时也为黄金色的秋日铺上留白的画卷.键盘敲时,熟悉 ...

  10. 使用layui+jQuery实现点击数据修改,即点即改。

    使用layui+jQuery实现点击数据修改即可修改 首先要用到layui的官网手册 地址:https://www.layui.com/ 注意1.  此功能是在使用layui展示数据的基础上实现 3. ...