STM32中使用printf打印串口数据
来源:互联网 发布:quickshow软件下载 编辑:程序博客网 时间:2024/05/22 11:54
STM32使用printf打印串口
- 摘要
该方法适用于STM32,实现了使用printf等标准C流函数输出数据的办法,极大的减少了输出串口数据时所需要做的数据处理。
- 实现原理
在C库中,printf()等输出流函数都是通过fputc()这个函数实现的,所以我们通过重映射的方式,修改这个函数的定义使它输出在STM32的寄存器中,便可以实现使用printf()函数在STM32串口上输出数据的功能。
- Keil环境重映射
在STM32的Keil开发环境中,C的库函数有两种实现方式
- 使用标准的C函数库
就是我们平常在PC Window平台上用的C库函数,此库的的优点在于实现的功能全面。但是由于这个库基本上是专为PC设计的,故而如果在嵌入式芯片中调用时将会使得工程文件变得十分庞大。
将下列代码加入工程,无需使用#include调用即可生效。
/* * libc_printf.c * * Created on: Dec 26, 2015 * Author: Yang * *使用标准C库时,重映射printf等输出函数的文件 * 添加在工程内即可生效(切勿选择semihost功能) */#include <stdio.h>//include "stm32f10x.h" #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;}
- 使用MDK提供的 MicroLib
MicroLib is a highly-optimized library for ARM-based embedded applications written in C. When compared to the standard C library included with the ARM Compiler toolchain, MicroLib provides significant code size advantages required for many embedded systems.
摘自Keil官网介绍 <http://www.keil.com/arm/microlib.asp>
基本就是说:Microlib是缺省 C库的备选库。 它旨在与需要装入到极少量内存中的深层嵌入式应用程序配合使用。 这些应用程序不在操作系统中运行。microlib进行了高度优化以使代码变得很小。 它的功能比缺省 C库少,并且根本不具备某些 ISO C特性。 某些库函数的运行速度也比较慢,例如,memcpy()。
同样的将下列代码加入工程,并在Keil设置中勾选Use MicroLib
/* * microlib_printf.c * * Created on: Dec 26, 2015 * Author: Yang * * keil工程内勾选使用microlib时,重映射printf等输出函数的文件 * 添加在工程内即可生效(注意:仅在使用microlib有效) */#ifdef UART_PRINT#include <stdio.h>//include "stm32f10x.h" //重映射fputc函数,此函数为多个输出函数的基础函数int fputc(int ch, FILE *f){//while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); //修改此处的while循环条件//USART_SendData(USART1, (uint8_t) ch); //与寄存器,以修改输出端口return ch;}//输入函数,如上int GetKey (void) { //while (!(USART1->SR & USART_FLAG_RXNE)); //如上//return ((int)(USART1->DR & 0x1FF));}#endif
- GCC环境重映射
在GCC开源开发环境中,则可以调用nano_printf.c等多种方式重映流函数输出端口
- STM32中使用printf打印串口数据
- STM32高级开发(12)-在GCC中使用printf打印串口数据
- STM32串口打印printf
- STM32 使用printf打印串口信息
- STM32多串口共用printf打印串口数据
- STM32在IAR和MDK中使用printf进行串口打印的实现方法
- STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK)
- STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK)
- STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK)
- STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK)
- STM32串口通信中使用printf发送数据配置方法(开发环境 Keil RVMDK)
- STM32串口通信中使用printf发送数据配置方法 开发环境 Keil
- 在STM32使用串口printf
- 在stm32 单片机程序中使用printf()进行串口调试
- 在STM32中使用printf发送字符串到串口
- stm32 中printf使用
- (STM32 A串口2)接收(STM32 B数据printf2),同时STM32 A使用串口1printf给电脑
- STM32中printf重定向到串口
- std::map与std::set
- 随手记点-mapreduce3
- 重载 & 重写
- Python 安装 pip模块
- 【翻译自mos文章】Oracle Audit Vault 和Database Firewall 12.x 的平台支持情况
- STM32中使用printf打印串口数据
- js中this的用法
- (4.2.24)一种快速毛玻璃虚化效果实现
- 创建线程的几种方式
- [BZOJ 2946]公共串
- SGI STL :: Source Code Analysis :: stl_config.h
- java设计模式——结构型之享元模式
- 第3周项目3:输出星号图(2)
- 001.Pecdraw在绘制文本图元时异常-2015年12月28日