完善资料让更多小伙伴认识你,还能领取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 __cplusplusextern "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 __cplusplusextern "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遇到的问题求解?
1606 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1538 浏览 1 评论
969 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
681 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1584 浏览 2 评论
1861浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
642浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
514浏览 3评论
528浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
501浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 02:37 , Processed in 0.541756 second(s), Total 48, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号