完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
printf函数一般是打印到终端的,stm32芯片调试中经常需要用到串口来打印调试信息,那能不能用串口实现类似windows的Console中的printf呢?
答案是肯定的,那就是printf函数的重定向。 使用KEIL5对stm32的printf函数进行重定向,有两种方法:一种是使用微库,另一种是不使用微库。 方法1--使用微库: 1、使用微库,在KEIL5中点击options for target,在Target标签下有个Use MicroLIB---勾选,使用微库。 2、在串口文件中添加如下代码: #include "stdio.h" #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE* f) #endif /* __GNUC__ */ #ifdef __cplusplus extern "C" { #endif //__cplusplus PUTCHAR_PROTOTYPE { while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET) ; USART_SendData(USART2, (uint8_t)ch); return (ch); } #ifdef __cplusplus } #endif //__cplusplus 修改相应的串口号,初始化,就能使用printf了。 方法2--不使用微库(那么就要强调不使用半主机(no semihosting)模式) 1、不使用微库(平台式keil-MDK),点击options for target,在Target标签下有个Use MicroLIB---取消勾选,不使用微库。 2、在串口文件中添加如下代码: #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE* f) #endif /* __GNUC__ */ #ifdef __cplusplus extern "C" { #endif //加入以下代码,支持printf函数,而不需要选择use MicroLIB #pragma import(__use_no_semihosting) //定义_sys_exit()以避免使用半主机模式 void _sys_exit(int x) { x = x; } void _ttywrch(int x) { x = x; } //标准库需要的支持函数 struct __FILE { int handle; }; FILE __stdout; //重定义fputc函数 PUTCHAR_PROTOTYPE { while((USART2->SR & 0X40) == 0);//循环发送,知道发送完毕 USART2->DR = (u8)ch; return ch; } #ifdef __cplusplus } #endif //__cplusplus 当然,头文件#include "stdio.h"别忘了加上。同样的,修改相应的串口号,初始化,就能使用printf了。 如果编译的时候出现FILE __stdout;编译不过,可以打开stdio.h文件,将typedef struct __FILE FILE; 修改为 typedef struct __FILE{}FILE; 即可。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1617 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1543 浏览 1 评论
977 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1595 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 05:27 , Processed in 0.603730 second(s), Total 47, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号