700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > STM32 HAL库printf重定向相关笔记

STM32 HAL库printf重定向相关笔记

时间:2018-11-09 13:08:33

相关推荐

STM32 HAL库printf重定向相关笔记

一、两种方法

1、使用微库(use microlib)

1)在魔术棒–>target下勾选use microlib。

2)在main.c或usart.c预编译如下代码

#ifdef __GNUC__#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)#else#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)#endifPUTCHAR_PROTOTYPE{HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,0xFFFF);//阻塞方式打印return ch;}

2、不使用微库

在main.c或usart.c预编译如下代码

#if 1#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((USART1->SR&0X40)==0);//循环发送,直到发送完毕 USART1->DR = (uint8_t) ch;return ch;}#endif

二、相关解释

printf重定向到串口就必须关闭半主机模式。半主机模式简而言之就是将电脑的键盘和显示屏作为(scanf,printf)输入输出外设。第一种方法使用微库将默认关闭半主机模式,但微库会使代码量优化减少,可能造成代码的稳定性降低,微库是面向深层嵌入式开发的(这句话可能是说微库是面向最终产品的,做实验与练习没必要用)。而第二种方法直接手动取消半主机模式,更加方便。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。