STM32 中的 printf

Pursue

MDK

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

1
2
3
4
5
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文件最后添加以下代码:

1
2
3
4
5
6
7
8
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

自定义函数名

1
2
3
4
5
6
7
8
9
10
11
12
#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");
评论
目录
STM32 中的 printf