STM32视频教程

UART的printf重定向

作者:陈广
日期:2021-11-21


视频播放地址

点击播放

重定向源码

在main.h中引入头文件

#include "stdio.h"

在 usart.c 的前部加入:

#ifdef __GNUC__
/* With GCC, small printf (option LD Linker->Libraries->Small printf
   set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */

在 usart.c 的后部加入:

PUTCHAR_PROTOTYPE
{
	while((USART2->SR & 0x40) == 0);
	USART2->DR = (uint8_t)ch;
	return ch;
}

注意事项

如果无法接收到数据,请在printf函数输出内容的后面加上\n,或在printf方法后加上一句代码:

fflush(stdout);

使用中断接收数据源码

使能UART中断:

LL_USART_EnableIT_RXNE(USART2);

中断服务函数源码:

void USART2_IRQHandler(void)
{
	if(LL_USART_IsEnabledIT_RXNE(USART2))
	{
		uint8_t ch = LL_USART_ReceiveData8(USART2);
		while(!LL_USART_IsActiveFlag_TXE(USART2));
		LL_USART_TransmitData8(USART2, ch);
	}
}
;

© 2018 - IOT小分队文章发布系统 v0.3