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

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

1.选择支持printf重定向的库
(1)在Target中选择Use MicroLIB
在这里插入图片描述
(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)为了以后更方便使用,把这个函数加入自己的模版中
在这里插入图片描述
下次用的时候直接点击模版
在这里插入图片描述

4.打印设备运行状态LOG
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_33033059/article/details/108234014
今日推荐