stm32标准库串口重定向
时间: 2025-01-27 22:50:08 浏览: 60
### STM32 标准库实现串口重定向
为了使 `printf` 函数能够在 STM32 中通过 USART 串口输出数据,在标准库中需重新定义 `_write` 或者更常见的做法是覆盖 `fputc` 函数。这使得所有的字符输出操作可以被导向至指定的串口设备。
#### 定义 fputc 函数
通常情况下,可以在项目中的任意 C 文件内添加如下所示的 `fputc` 函数:
```c
#include "stm32f1xx.h"
#include <stdio.h>
// 假设使用USART1作为调试串口
void UART_Config(void);
int fputc(int ch, FILE *f) {
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); // 等待发送缓冲区为空
USART_SendData(USART1, (uint8_t)ch);
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); // 等待传输完成
return ch;
}
```
此代码片段实现了将单个字符发送给 USART1 的功能[^4]。每当调用 `printf` 发送字符时,实际执行的就是这段自定义的 `fputc` 函数逻辑。
#### 初始化配置
在主程序启动前还需要初始化相应的外设资源,比如设置好 GPIO 和 RCC 配置以及开启中断等。这部分工作可以通过调用类似下面这样的函数来完成:
```c
void UART_Config(void){
/* 这里省略了具体的GPIO和RCC配置 */
// 设置波特率、字长、停止位等参数...
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No ;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1,&USART_InitStructure);
USART_Cmd(USART1, ENABLE);
}
```
上述代码完成了对 USART1 外设的基本配置并启用了它的工作模式[^3]。
#### 主函数示例
最后,在应用程序入口处确保已经包含了必要的头文件,并且调用了前面提到的初始化过程:
```c
int main(void){
/* System Clock Configuration */
SystemInit();
/* Initialize all configured peripherals */
UART_Config();
printf("Hello World!\r\n");
while (1){
// 应用程序主体循环
}
}
```
这样就可以成功地让 `printf` 输出的信息经由 USART1 转发到外部终端上了。
阅读全文
相关推荐


















