配置串口重定向

0 阅读2分钟

一般在调试过程中遇到这个数据的传输不知道正不正确,我之前一般都是使用这个OLED显示屏等进行的,hal库提供的串口收发函数,功能比较简单,不能进行格式化的输入输出,感觉不是很方便,于是就提出了这个现在用的串口重定向,使用这个printf函数,使得调试能够更好的可见。

正常的在STM32CubeMX创建c8t6的基础就不再赘述,这边基本上保持着默认,时钟就72Mhz,然后串口的话使用如下:

image-20260310202451337-1773145497372-1.png

之后点击创建工程就可以了(勾选工程的生成器记得是这个MDK)

image-20260310203930112.png

MicroLIB 是 ARM 官方为嵌入式系统量身定制的精简版 C 标准库(C Standard Library),咱们使用的这个printf函数调用的文件给减少

接下来在头文件中添加**#include <stdio.h>**

printf函数实际上就是要调用这个fputc的这个头文件,而这么的这个串口的输出本来就是要使用这个 HAL_UART_Transmit() 这个函数

于是在这个fuptc这个函数当中再调用这个即可,下边是完整的代码

int fputc(int ch,FILE *f)
 
{
 
	//采用轮询方式发送1字节数据,超时时间设置为无限等待
	 
	HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,1000);
	 
	return ch;
 
}

有关这个HAL_UART_Transmit函数的内容这边就不多做赘述,大家可以去看其他资料去了解。

注意:fputc这个函数的位置要放在这个主函数的外边

image-20260310205846935.png

最后在主代码的这个当中添加这个printf的这个输出即可。编写烧录

image-20260310205023189.png

732d58ea8bed837f798345ce24ee68b3.jpg

如图便是最后的这个实验现象和补充的接线图

后续

但是实际上这样还是没能解决这个串口还要接受的问题,之后或许可以尝试使用这个物联网esp8266远程查看的串口发送的函数