STM32使用printf函数给串口打印信息的执行步骤为:

1.重定向printf函数

给uart.c文件中增加如下函数:

//重定向c库函数printf到USART1
int fputc(int ch, FILE *f)
{
/* 清SR寄存器中的TC标志 */
USART_ClearFlag(USART1,USART_FLAG_TC); /* 发送一个字节数据到USART1 */
USART_SendData(USART1, (uint8_t) ch); /* 等待发送完毕 */
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
 return (ch);
}

2.增加头文件stdio

#include <stdio.h>

3.勾选Use MircoLIB

以上3条,缺一不可,如果你只做了第一步,编译的时候,就会报错,如下所示:

CFG\uart.c(52): error:  #20: identifier "FILE" is undefined

如果只做了前两步,而没有勾选Use MicorLIB,编译器虽然不会报错,但是串口不会输出数据。

很多人做了重定向函数以后,输出一串字符的第一个字符会丢失,根本原因是因为SR寄存器中的TC标志默认是置1的。

解决方法1:和我上面的重定向函数一样,在开始先用USART_ClearFlag(USART1,USART_FLAG_TC);函数把TC标志清0。

解决方法2:写字符串的时候,前面留一个空格。

两种方法选一个即可。

给出一个使用printf函数在STM32串口1输出数据的完成工程源代码:

点击下载:【例程2.6】printf函数(MDK5工程)

转自:http://www.rationmcu.com/stm32/1517.html

STM32使用printf丢失第一个字母的问题的更多相关文章

  1. 关于STM32中printf函数的重定向问题

    printf函数一般是打印到终端的,stm32芯片调试中经常需要用到串口来打印调试信息,那能不能用串口实现类似windows的Console中的printf呢? 答案是肯定的,那就是printf函数的 ...

  2. STM32 使用 printf 发送数据配置方法 -- 串口 UART, JTAG SWO, JLINK RTT

    STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK) http://home.eeworld.com.cn/my/space-uid-338727-blogid-47 ...

  3. MDK中STM32使用Printf函数详细解析【转载】

    在用MDK调试STM32板子串口时,为了方便串口调试,调用了printf()函数,用Keil仿真是,串口不能正确的输出,软件仿真时,总是卡在那 里.有点纳闷,然后调用USART_SendData()函 ...

  4. STM32中printf重定向到串口

    学习STM32过程中,经常打交道的莫过于串口,你可以将任何信息,当然重要的是调试信息打印到串口中输出,总是用一个字节发送函数或者字符串发送函数 总是有些不放便,之前编程中熟悉的莫过于printf了,下 ...

  5. 如果简化stm32中printf函数的使用——首先重定向

    STM32单片机极简方法 使用宏定义 代替复杂的重定向printf()函数,实现串口打印.(HAL库例程)https://blog.csdn.net/wu10188/article/details/9 ...

  6. STM32—重定向printf和getchar函数到串口

    在STM32测试串口的时候经常需要在开发板和上位机之间传输数据,我们可以用c语言中的printf()函数和getchar()函数来简化传输. 以printf()为例: printf()函数实际上是一个 ...

  7. STM32 的 printf() 函数串口重定向(HAL库标准库都适用)

    1.建立工程 2.核心:添加新文件usar_fputc.c (名字随便自己命名),把文件添加到项目中去 #include "stdio.h" #include "stm3 ...

  8. stm32串口输出丢失第一个字符的问题及原因

    因为TC和TXE 标志位在复位的时候会被置1,导致第一次没有发送. 所以在初始化串口的时候可以增加一句 USARTx->SR=0;(如 USART1->SR=0;)

  9. STM32串口发送第一个字符丢失解决之道

    stm32用printf函数重定向到串口USART1发现第一个字符没打印出来具体如下: 刚开始修改fputc函数如下: int fputc(int ch,FILE *f){USART_SendData ...

随机推荐

  1. Oracle归档模式与非归档模式设置

    (转自:http://www.cnblogs.com/spatial/archive/2009/08/01/1536429.html) Oracle的日志归档模式可以有效的防止instance和dis ...

  2. SQLSERVER store procedure 临时表

    有些时候显示重复数据时,使用: ) 但有些时候表A过大或者逻辑复杂.显示数据时,会造成性能的影响,这时你就可以使用临时表:   ) create table #temp( XXX , XXX) )in ...

  3. set, map, string, find(), string name[100],等的混合

    Unrequited Love Time Limit: 16 Seconds      Memory Limit: 131072 KB There are n single boys and m si ...

  4. LeetCode OJ:Remove Duplicates from Sorted List (排好序的链表去重)

    Given a sorted linked list, delete all duplicates such that each element appear only once. For examp ...

  5. Linux安全运维笔记2018-03-01更新

    本人wechat:YWNlODAyMzU5MTEzMTQ=. *** # 修改关键目录文件的权限 chmod u-x,g-r /home/lema chmod 444 /home/lema # 用户权 ...

  6. windows下memcached安装以及php_memcache.dll扩展

    http://kimi.it/258.html http://kimi.it/259.html https://www.cnblogs.com/elenaPeng/p/6877530.html htt ...

  7. Android快速开发-选项卡

    介绍 几行代码实现Android选项卡界面,支持标准底部Tab自定义视图选项卡,头部文字选项卡. 底部自定义视图选项卡 先来看看实现下图中的效果我们代码应该怎么写? 实现上图效果只需以下代码: pub ...

  8. 神经网络中的Softmax激活函数

    Softmax回归模型是logistic回归模型在多分类问题上的推广,适用于多分类问题中,且类别之间互斥的场合. Softmax将多个神经元的输出,映射到(0,1)区间内,可以看成是当前输出是属于各个 ...

  9. I.MX6 U-Boot ping网络

    /********************************************************************* * I.MX6 U-Boot ping网络 * 说明: * ...

  10. Eclipse环境搭建配置操作

    1.选择window 2.设置字体 3.设置编码格式:国际编码:UTF-8 第一个地方设置编码格式 第二个地方设置编码格式:这个更重要些 4.配置26个英文小写字母. 作用:能够在开发时提示你,快速开 ...