STM32的Keil4环境下的printf重定向

在使用stm32的usart发送数据时,发现发送数据非常的鸡肋,不同数据格式的数据需要处理,这时十分想念当初的printf函数,随意发送想要的数据,,stm32也能使用printf,但是需要将“stdio.h”函数库中的printf重定向,因为printf()函数的实现时使用fputc()和putchar()函数,编译器在编译时会优先选择文件中的这两个函数,所以自己可以编写以上的两个函数,修改发送的部分,实现重定向,以下是fputc()的重定向函数,使用usart发送数据

fputc()的重定向函数:
int fputc(int ch,FILE *fp)
{
	while(!USART_GetFlagStatus(USART1, USART_FLAG_TXE));
	USART_SendData(USART1, ch);
	while(!USART_GetFlagStatus(USART1, USART_FLAG_TC));

	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32微控制器上,可以通过重定向标准输出流来实现printf函数的重定向。下面是一种常用的方法: 首先,在你的工程中打开一个串口进行通信。你需要确保你的STM32芯片上有一个可用的UART(串口)模块,并且已经正确地配置和初始化了该串口。 然后,你需要重定向标准输出流(stdout)到该串口。这可以通过以下步骤完成: 1. 在你的代码中,添加以下头文件: ```c #include <stdio.h> #include <sys/unistd.h> // 如果使用Keil MDK,可能需要使用 #include <unistd.h> 替代 ``` 2. 定义一个名为 `__io_putchar` 的函数,用于重定义 `_write` 函数,该函数将被printf调用来输出单个字符。在函数内部,你需要使用串口发送函数发送字符。以下是一个示例: ```c int __io_putchar(int ch) { // 发送单个字符到串口 // TODO: 使用你的串口发送函数发送字符 return ch; } ``` 3. 重定义 `_write` 函数。在代码的顶部或者初始化函数中,添加以下代码: ```c // 重定义 _write 函数 // 这样 printf 就会调用 __io_putchar 函数 FILE __stdout; int _write(int file, char *ptr, int len) { int DataIdx; for (DataIdx = 0; DataIdx < len; DataIdx++) { __io_putchar(*ptr++); } return len; } ``` 4. 现在,你可以在你的代码中使用printf函数,输出的内容将会通过串口发送出去。 请注意,以上步骤是一种通用的方法,具体的实现可能会因不同的开发环境和芯片型号而有所变化。你需要根据你的具体情况进行适当的调整和修改。 希望以上信息对你有帮助!如有更多问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值