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

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,并保存

自定义函数名
#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");

浙公网安备 33010602011771号