【STM32】printf函数重定向至UART 打印设备状态LOG

这样做的好处:可以很好的监控设备,以适当取代麻烦的debug; 用printf()函数代替串口发送,更易用
很简单,分两步

1.选择支持printf重定向的库
(1)在Target中选择Use MicroLIB
【STM32】printf函数重定向至UART 打印设备状态LOG_第1张图片
(2)或者在usart.c中添加

#pragma import(__use_no_semihosting)             
//标准库需要的支持函数                 
struct __FILE 
{
      
	int handle; 

}; 

FILE __stdout;       
//定义_sys_exit()以避免使用半主机模式    
int _sys_exit(int x) 
{
      
	x = x; 
} 

2.重定义fputc函数
(1)使用HAL库

//重定义fputc函数 
int fputc(int ch, FILE *f)
{
           
  
	HAL_UART_Transmit(&huart4,(uint8_t *)&ch,1,0xFFFF);
    
	return ch;
}

(2)或者寄存器操作

//重定义fputc函数 
int fputc(int ch, FILE *f)
{
           
  
	while((UART4->SR&0X40)==0){
     ;}//循环发送,直到发送完毕  
	UART4->DR = (uint8_t)ch;  
	return ch;
}
  

3.使用
(1)使用的时候直接printf就行

printf("-------------------");

(2)为了以后更方便使用,把这个函数加入自己的模版中
【STM32】printf函数重定向至UART 打印设备状态LOG_第2张图片
下次用的时候直接点击模版
【STM32】printf函数重定向至UART 打印设备状态LOG_第3张图片

4.打印设备运行状态LOG
【STM32】printf函数重定向至UART 打印设备状态LOG_第4张图片

你可能感兴趣的:(嵌入式,stm32,printf)