STM32 中的 printf

MDK

在usart.c文件最后添加以下代码:

int fputc(int ch, FILE *f) 
{
    HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 1000);
    return (ch);
}

并引用#include <stdio.h>,勾选Microlib

stm-op1.png

GCC

在usart.c文件最后添加以下代码:

int _write(int fd, char *pBuffer, int size)
{
    for (int i = 0; i < size; i++) {
        while ((USART1->SR & 0X40) == 0); // 等待上一次串口数据发送完成
        USART1->DR = (uint8_t)pBuffer[i]; // 写TDR,串口将发送数据
    }
    return size;
}

在构建器选项中添加-u_printf_float,并保存

stm-op2.png

自定义函数名

#include "stdio.h"

//首先定义接收数组
uint8_t u_buf[256];   

//阻塞发送就可定义
#define u1_printf(...) HAL_UART_Transmit(&huart1, (uint8_t *)u_buf, sprintf((char*)u_buf,__VA_ARGS__), 0xFFFF)
//同时对于DMA
#define u1_DMA_printf(...) HAL_UART_Transmit_DMA(&huart1, (uint8_t *)u_buf, sprintf((char*)u_buf,__VA_ARGS__))

//使用方法同'printf'
u1_printf("hello world!\r\n");
posted @ 2025-11-15 14:31  流水灯明  阅读(1)  评论(0)    收藏  举报