本文主要是介绍重定义fputc函数到串口printf输出(代码 + 应用实例),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 前言
- 一、重定义fputc函数
- 写法1(我目前使用的)
- 写法2(网上常见的)
- 写法3(网上常见的)
- 一起交流一下鸭~
- 二、勾选Use MicroLib
- 三、main函数中应用printf输出
- 四、注意事项(问题现象:程序卡在fputc函数)
- 五、小结
前言
- 芯片型号:STM32F103VCT6
- 串口:USART1
- 目的:重定义fputc函数到串口输出,实现printf
.
一、重定义fputc函数
-
写法1(我目前使用的)
int fputc(int ch, FILE *f) { /* 发送一个字节数据到USART1 */USART1->SR;USART_SendData(USART1, (uint8_t) ch);/* 等待发送完毕 */while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); return (ch); }
-
写法2(网上常见的)
int fputc(int ch, FILE *f) {/* 发送一个字节数据到USART1 */USART_SendData(USART1, (uint8_t) ch);/* 等待发送完毕 */while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); return (ch); }
-
写法3(网上常见的)
int fputc(int ch, FILE *f) { /* 判断串口是否发送完成 */while((USART1->SR & 0X40) == 0);/* 发送一个字节数据到USART1 */USART1->DR = (uint8_t) ch; return ch; }
-
一起交流一下鸭~
你们一般用的那种写法?
对以上三种写法有什么看法?你觉得各有什么利弊?
.
二、勾选Use MicroLib
.
三、main函数中应用printf输出
int main(void)
{Usart1_init(115200); // 配置Usart1底层,波特率 - 115200printf("\r\n 写这篇文章的作者是个超级大可爱 \r\n");
}
.
四、注意事项(问题现象:程序卡在fputc函数)
-
调用printf前要先做以下两点:
- 1、勾选Use MicroLib;
- 2、配置Usart1底层
.
五、小结
- 欢迎纠正
- ☆⌒(*^-゜)v THX!!
- 码字不易,记得点小心心 ( •̀ ω •́ )✧
这篇关于重定义fputc函数到串口printf输出(代码 + 应用实例)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!