STM32
直播中

李麒铭

7年用户 1399经验值
私信 关注
[问答]

GD32fxxx stm32fxx printf c语言怎么实现?

GD32fxxx STM32fxx printf c语言怎么实现?

回帖(1)

李煜启

2021-12-1 14:09:02
1,设置

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






2,添加
再在代码中加入函数 :


#include


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


    return ch;
}


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


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


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


#pragma import(__use_no_semihosting)        
1
//标准库需要支持函数        
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标准库,毕竟标准库,稳定。微库的话可能会有一些实现出问题,目前貌似也没啥问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分