STM32学习笔记五——STM32中使用printf打印串口数据
2019-07-16 22:14
549 查看
摘要
该方法适用于STM32,实现了使用printf等标准C流函数输出数据的办法,极大的减少了输出串口数据时所需要 做的数据处
1、实现原理
在C库中,printf()等输出流函数都是通过fputc()这个函数实现的,所以我们通过重映射的方式,修改这个函数 的定义使它输出在STM32的寄存器中,便可以实现使用printf()函数在STM32串口上输出数据的功能。
2、Keil 环境重映射
在STM32的Keil开发环境中,C的库函数有两种实现方
使用标准的C函数库
就是我们平常在PC Window平台上用的C库函数,此库的的优点在于实现的功能全面。但是由于这个库基本上是 专为PC设计的,故而如果在嵌入式芯片中调用时将会使得工程文件变得十分庞大。
将下列代码加入工程,无需使用#include调用即可生效
/* * libc_printf.c * * 使用标准C库时,重映射printf等输出函数的文件* * 添加在工程内即可生效(切勿选择semihost功能) */ #include <stdio.h> #include "stm32f10x.h" #pragma import(__use_no_semihosting) //标准库所需的支持函数 struct __FILE { int handle; }; FILE __stdout; //定义_sys_exit()以避免使用半主机模式 void _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
摘自Keil官网介绍 <http://www.keil.com/arm/microlib.asp> 基本就是说:Microlib是缺省 C库的备选库。 它旨在与需要装入到极少量内存中的深层嵌入式应用程序配合使用。 这些应用程序不在操作系统中运行。microlib进行了高度优化以使代码变得很小。 它的功能比缺省 C库少,并且根 本不具备某些 ISO C特性。 某些库函数的运行速度也比较慢,例如,memcpy()。
同样的将下列代码加入工程,并在Keil设置中勾选Use MicroLib。
/* * microlib_printf.c * keil工程内勾选使用microlib时,重映射printf等输出函数的文件 * 添加在工程内即可生效(注意:仅在使用microlib有效) */ #ifdef UART_PRINT #include <stdio.h> //include "stm32f10x.h" //重映射fputc函数,此函数为多个输出函数的基础函数 int fputc(int ch, FILE *f) { //修改此处的while循环条件 // while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); //与寄存器,以修改输出端口 // USART_SendData(USART1, (uint8_t) ch); return ch; } //输入函数,如上 int GetKey (void) { // while (!(USART1->SR & USART_FLAG_RXNE)); //如上 // return ((int)(USART1->DR & 0x1FF)); } #endif
相关文章推荐
- STM32高级开发(12)-在GCC中使用printf打印串口数据
- STM32中使用printf打印串口数据
- STM32学习笔记8——串口输出数据丢失问题
- matlab学习笔记1:使用串口将多路传感器数据导入csv表格,并使用matlab绘图
- STM32在IAR和MDK中使用printf进行串口打印的实现方法
- stm32学习笔记----双串口同时打开时的printf()问题
- 大数据学习笔记:编写脚本分发配置,数据分布,以及使用代码打印调试信息
- STM32多串口共用printf打印串口数据
- STM32 使用 printf 发送数据配置方法 -- 串口 UART, JTAG SWO, JLINK RTT
- (STM32 A串口2)接收(STM32 B数据printf2),同时STM32 A使用串口1printf给电脑
- STM32学习笔记-配置串口,printf重定向
- 【STM32学习】 串口接收数据 使用串口空闲中断与DMA
- STM32 使用printf打印串口信息
- STM32学习笔记之-串口中断接收不定数据buff
- STM32软件学习笔记(一)基于HAL库的STM32F429单片机串口打印程序
- STM32学习笔记——使用SysTick定时器做延时
- STM32-串口实验学习笔记
- IOS 学习笔记17 iPhone开发之使用NSUserDefaults存储数据
- 使用printf函数实现串口信息打印——设置IAR和Keil的Options
- 微软企业库4.1学习笔记(三十二)数据访问模块 在应用中使用数据访问模块