

main.c
#include <stdio.h>
#include "stm32f1xx.h"
int fputc(int ch, FILE *f)
{
/* 1. 先进来就翻转灯------如果灯不闪,说明 printf 没链到这个函数 */
//HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_14);
/* 2. 限时等待,别让任务卡死 */
uint32_t tick = HAL_GetTick();
while (!(USART1->SR & USART_SR_TXE))
{
if (HAL_GetTick() - tick > 10) // 10 ms 等不到就放弃
{
//HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_15); // 再闪一次灯做"超时"提示
return ch; // 直接返回,别让任务死
}
}
USART1->DR = ch;
return ch;
}
main.h
int fputc(int ch, FILE *f);
就可以随便找个地方调用了printf("abc");