stm32 PRINTF
时间: 2025-01-02 12:39:22 浏览: 15
### STM32 使用 `printf` 函数实现串口打印
为了使 `printf` 函数能够在 STM32 上通过串口输出信息,需要对其进行重定向处理。以下是详细的说明:
#### 1. 配置串口外设
首先配置好用于通信的串口外设参数,这通常涉及到初始化 UART 或 USART 外设,并设置波特率、字长、停止位等属性。
```c
UART_HandleTypeDef huart1;
void MX_USART1_UART_Init(void)
{
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200; // 设置波特率为115200bps
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
HAL_UART_Init(&huart1);
}
```
#### 2. 定义 `_write` 函数以重定向标准输出流
接下来定义一个 `_write` 函数来替代默认的标准输出行为,该函数会将字符写入指定的串口设备中去。
```c
#include <stdio.h>
#include "stm32f1xx_hal.h"
int _write(int file, char *ptr, int len)
{
(void)file;
HAL_UART_Transmit(&huart1, (uint8_t *)ptr, len, HAL_MAX_DELAY);
return len;
}
```
此部分代码实现了当程序调用 `printf()` 时实际执行的是向串口发送数据的操作[^1]。
#### 3. 测试 `printf` 功能
完成上述两步之后就可以正常使用 `printf` 来测试是否可以成功地经由串口传输字符串给电脑端查看了。
```c
int main(void)
{
/* 初始化HAL库 */
HAL_Init();
/* 系统时钟配置 */
SystemClock_Config();
/* 初始化所有已配置的外围设备及用户回调函数 */
MX_GPIO_Init();
MX_USART1_UART_Init();
while(1){
printf("Hello World!\r\n");
HAL_Delay(1000);
}
}
```
这样就能看到每秒钟一次“Hello World!”的信息被发送到了连接着STM32开发板上的USB转TTL模块所对应的PC终端软件上了[^4]。
阅读全文