STMCU小助手
发布时间:2022-2-8 21:12
|
STM32在使用串口时,有时需要使用串口输出来观察程序运行状态。这时,我们需要将printf进行重定向。 具体重定向方法为: 1、 添加printf的头文件 #include <stdio.h> : d x9 H- y. r O* [2 m9 F" u1 \2、重写int fputc(int ch, FILE *f)函数 ( i, K" h( Y* nint fputc(int ch, FILE *f); 函数 int fputc(int ch, FILE *f) { USART_SendData(USART1, (uint8_t) ch); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); return ch; } 3、修改一下选中Use MicroLIB Target——Code Generation——选中Use MicroLIB M' u6 u( \4 u6 E- J. d方法2,也可以避免使用半主机模式进行操作。 #if 1 #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((USART1->SR&0X40)==0);//循环发送,直到发送完毕 USART1->DR = (u8) ch; return ch; } #endif 0 P3 K$ \+ l- E* b需要注意的还有自己的波特率,在stm32f10x.h中修改 & K( y& ^" m* V" U, q( A( \: q#define HSE_VALUE ((uint32_t)8000000) /*写自己板子的波特率即可,默认是没有的 */ #if !defined HSE_VALUE5 `1 r$ ~! B, ~7 a) @! \ #ifdef STM32F10X_CL #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */) S1 V+ p1 m: |" n; b1 x9 a #else 1 u5 Q, n2 n3 o/ ^! G0 J #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */$ l, P& Z# D) S/ O+ f #endif /* STM32F10X_CL */4 R1 F' J+ o& Y% c& q, q# n0 m #endif /* HSE_VALUE */ |
实战经验 | 基于STM32G0B1的全桥移相+同步整流PWM解决方案
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
【福利三:逢7发帖赢大礼】8、基于STM32G070板子的Ymodem串口协议IAP Bootloader开发
【福利三:逢7发帖赢大礼】7、基于STM32G070板子TF卡的FATFS移植
【福利三:逢7发帖赢大礼】6、基于STM32G070板子spiflash的FATFS移植
【福利三:逢7发帖赢大礼】5、基于STM32G070板子IRDA红外遥控接收解码
【福利三:逢7发帖赢大礼】4、基于STM32G070板子SPI flash 移植SFUD库
【福利三:逢7发帖赢大礼】基于STM32G070板子的uart shell移植设计
【福利三:逢7发帖赢大礼】3、基于STM32G070板子的YModem串口协议通信
【福利三:逢7发帖赢大礼】2、基于STM32G070板子的OLED移植U8G2库
微信公众号
手机版