在STM32中使用printf发送字符串到串口

发布者:素心悠远最新更新时间:2018-06-10 来源: eefocus关键字:STM32  printf  发送字符串  串口 手机看文章 扫描二维码
随时随地手机看文章

问题:在使用STM32调试时,经常使用串口发送信息,为了方便调试与串口发送信息,用printf()函数实现通过串口打印信息。


方法一:


1.添加包含printf()函数的头文件:#include “stdio.h” 

2.重写 stdio.h 头文件中的 int fputc(int ch, FILE *f) 函数


int fputc(int ch, FILE *f)

{

    while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);

    //等待先前的字符发送完成

    USART_SendData(USART1, (uint8_t) ch);

    //发送字符

    return ch;

}

//示例函数中使用了USART1来发送消息

//实际情况可以根据硬件板来决定使用哪个串口


注意:使用while循环先等待先前的字符发送完成,避免造成字符串首字符发送丢失的问题。 

3.将该函数” int fputc(int ch, FILE *f) “放在main()函数能够调用到的文件中,KEIL->Options for Target’xxx’->Target->Code Generation,勾选Use MicroLIB


方法二:


//加入以下代码,支持printf函数,而不需要选择use MicroLIB    

#if USART_DEBUG

#pragma import(__use_no_semihosting)             

//标准库需要的支持函数                 

struct __FILE 

{

    int handle; 


};


FILE __stdout;       

//定义_sys_exit()以避免使用半主机模式    

_sys_exit(int x) 

{

    x = x; 

}

//重定义fputc函数 

int fputc(int ch, FILE *f)

{      

    while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET)

    {}

    USART_SendData(USART1,(uint8_t)ch); 

    return ch;

}

#endif 


使用以上任一方法,均可实现printf()函数打印字符串重定义到USART1。


关键字:STM32  printf  发送字符串  串口 引用地址:在STM32中使用printf发送字符串到串口

上一篇:STM32模拟串口输出偶有乱码
下一篇:STM32中使用printf打印串口数据

推荐阅读最新更新时间:2024-03-16 16:05

STM32F7xx —— 串口通信
一、串口初始化过程 1、时钟使能; 2、GPIO初始化; 3、串口波特率设置; 4、串口控制; 5、数据发送与接收 二、几个重要的串口函数 HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart); // 串口初始化 HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout); // 串口发送 HAL_StatusTypeDef HAL_UART_Receive(UART_Ha
[单片机]
STM32学习笔记之GPIO的基本使用
楼学习中主要使用的资料有 战舰V3资料盘——教学视频 《STM32F1开发指南-库函数版本_V3.1》 (PDF) 《零死角玩转STM32》 野火出版 使用的学习板为屹讯电子嵌入式平台v2(MCU为 STM32F103RCT6) **某些IO口带有FT标识,代表其最大工作电压达到5V CPU能直接读取外设电平 上拉电阻的作用????????????????? 下拉电阻 CPU能直接读取外部电压变化(模拟量) 0-3.3v 输出控制电路置1,输出由外部电路决定(上拉或下拉) 输出控制电路置0,输出为0 置1置0的写入由CPU执行 输出控制电路的写入由外设模块决定 输出控制电路置1,输出1;置0,输出0。
[单片机]
<font color='red'>STM32</font>学习笔记之GPIO的基本使用
STM32之独立看门狗与窗口看门狗了解一下
  STM32之独立看门狗与窗口看门狗总结   一、独立看门狗   STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效。   看门狗的原理:单片机系统在外界的干扰下会出现程序跑飞的现象导致出现死循环,看门狗电路就是为了避免这种情况的发生。看门狗的作用就是在一定时间内(通过定时计数器实现)没有接收喂狗信号(表示 MCU 已经挂了),便实现处理器的自动复位重启(发送复位信号) 。   在键值寄存器(IWDG_KR)中写入 0xCCCC,开始启用独立看门狗;此时计数器开始从其复位值 0xFFF 递减计数。当计数器计数到末尾 0x000 时,会产生一个复位信号(IWDG_RESET)。无论何时
[单片机]
<font color='red'>STM32</font>之独立看门狗与窗口看门狗了解一下
STM32移植lwip之官方工程修改
本篇目标:在之前的硬件基础上,修改ST官方移植lwip的工程,使PC机能ping通stm32 材料准备: 硬件基础:stm32f407+lan9303 官方资料:包含代码和移植手册(stm32官方移植lwip资料) 修改代码:包含移植后的代码(STM32官方移植lwip修改代码) 跟着文件路径打开其中一个工程,先选择不带操作系统的练习测试 文件路径:STM32F4x7_ETH_LwIP_V1.1.1 - Project - Standalone - tcp_echo_server - MDK-ARM - Project.uvproj 先编译一下,出现3个Warning,其中两个是变量定义未使用,不影响暂且不管,还有一
[单片机]
<font color='red'>STM32</font>移植lwip之官方工程修改
2-单片机温度检测记录系统(温度时间串口传输)
具体实现功能 具体功能: 1、LCD显示实时时钟:年、月、日、时、分、秒; 2、每30秒采样温度,LCD更新显示温度值; 3、按键触发存储当前温度和时钟信息(年、月、日、时、分); 4、按键触发串口传输存储的温度和时钟信息,在串口调试助手上显示当前的温度及时间。 5、温度测量精度:0.1℃。 单片机介绍 51单片是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM,32 位I/O 口线,
[单片机]
2-单片机温度检测记录系统(温度时间<font color='red'>串口</font>传输)
51单片机心形灯实现串口通信编程
心形灯原理图 编译软件:Keil uVision5 (如有需要可点此链接下载:https://download.csdn.net/download/qq_36931762/11343174) 单片机程序下载软件:STC-ISP (如有需要可点此链接下载:https://download.csdn.net/download/qq_36931762/11343157) 程序代码: 灯状态处于0亮1灭 发送方: #include reg52.h sbit k1=P3^2; sbit k2=P3^3; sbit k3=P3^4; sbit k4=P3^5; #define LED1 P0 #define LED2 P2
[单片机]
51单片机心形灯实现<font color='red'>串口</font>通信编程
基于VSCode搭建STM32开发环境
众所周知, Keil 是一款收费软件,虽然可以Po解使用,但很多 公司 还是有点害怕,想必有不少读者都收到过**函。 之前,开发 单片机 项目,可以说 Keil 是最佳选择之一,但VSCode横空问世之后,这种格局被打破。 因为 VSCode 免费且好用,可以安装各种插件,很多 工程师 逐渐从Keil 转向了 VSCode。而且,VSCode还能实现 Keil 不能实现的一些功能。 下面就给大家分享一下 VSCode 搭建 STM32 开发环境的一些常规且使用的功能。 一、需要的软件和工具 下载 最新版 VS Code: 安装好插件,具有良好的代码补全与调试功能。 下载 LLVM:用于代码补全,其实可以理解
[单片机]
基于VSCode搭建<font color='red'>STM32</font>开发环境
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved