GD32fxxx stm32fxx printf c语言实现

1,设置

使用printf 需要进行重定向,printf 实际上是使用串口输出。
其实很简单:
在keil中 勾选箭头所示的 Use MicroLIB 使用微库
在这里插入图片描述

2,添加

再在代码中加入函数 :

#include <stdio.h>

int fputc(int ch, FILE* stream)
{
    
    
    while (!(USART1->SR & USART_FLAG_TXE));
USART_SendChar(USART1, (uint8_t)ch);

    return ch;
}

此函数原本是将字符ch打印到文件指针stream所指向的文件流去的,现在我们不需要打印到文件流,而是打印到串口1

注意:需要将头文件#include <stdio.h>加入 ,上面函数的红色部分就是中断里的判断那一句,不加也可以,加上做个判断而已。加入后就可以使用printf 函数了,

这只是一种方法 还有其他方法:不使用微库

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

FILE __stdout;       
//定义_sys_exit()以避免使用半主机模式
_sys_exit(int x) 
{
    
     
x = x; 
}
//重定义fput()函数。UART5:根据需求更改串口
int fputc(int ch, FILE *f)
{
    
    
/*将printf内容发往串口*/
USART_SendData(UART5,(uint8_t)ch);
  while(USART_GetFlagStatus(UART5, USART_FLAG_TC) == RESET);
return ch;
}

一般选择第二种方法,第二种方法使用c标准库,毕竟标准库,稳定。微库的话可能会有一些实现出问题,目前貌似也没啥问题。

猜你喜欢

转载自blog.csdn.net/qq_15555275/article/details/107052114
今日推荐