STM32串口重定向(代码法+微库法)

一 STM32串口重定向介绍

       STM32是一款基于ARM Cortex-M内核的微控制器,广泛应用于各种嵌入式系统中。在STM32的开发过程中,串口通信是一个非常重要的功能,它允许微控制器与外部设备或上位机进行数据传输和通信。然而,在某些特殊情况下,我们可能需要对STM32的串口进行重定向,以满足特定的应用需求。

1.1 什么是串口重定向

       串口重定向,顾名思义,就是将STM32的串口通信功能从一个物理端口转移到另一个物理端口,或者从物理端口转移到内存缓冲区等虚拟端口。通过串口重定向,我们可以灵活地配置STM32的串口通信,使其适应不同的硬件环境和应用需求。

1.2 为什么需要串口重定向

1.硬件资源限制:在某些情况下,STM32的硬件资源可能无法满足所有串口通信的需求。通过串口重定向,我们可以将有限的串口资源进行合理分配,实现多路串口通信。

2.调试和测试需求:在开发过程中,我们可能需要将STM32的串口输出重定向到上位机或其他调试设备,以便实时查看和记录串口数据。

3.系统集成需求:在将STM32集成到更大的系统中时,可能需要与其他设备或模块进行串口通信。通过串口重定向,我们可以将STM32的串口与其他设备的串口进行连接,实现数据交互。

二 以标准库来演示代码法的使用

串口重定向代码:

//加入以下代码,支持printf函数,而不需要选择use MicroLIB	  
#if 1
#pragma import(__use_no_semihosting)             
//标准库需要的支持函数                 
struct __FILE 
{ 
	int handle; 

}; 

FILE __stdout;       
//定义_sys_exit()以避免使用半主机模式   

void _sys_exit(int x) 
{ 
	x = x; 
} 
//重定义fputc函数 
int fputc(int ch, FILE *f)
{      
	while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
    USART1->DR = (u8) ch;      
	return ch;
}
#endif 

加入此段代码就可以直接使用printf()函数。 

三 以HAL来演示微库法的使用

串口重定向代码:

int fputc(int ch, FILE *f)  //串口重定向
{
	HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF); 	
  	return ch;
}

微库法采用Keil的微库,只需要重写 fputc() 函数。其实质就是把串口发送一个字符的函数,封装到了fputc函数中。

使用这种方法,需要在Options for Target里勾选Use MicroLIB,否则程序会跑飞。

6906414f33df4474993ebd660c1d5a1e.png

四 printf()函数使用

由于主程序中调用了printf()函数,因此需要添加标准输出头文件:

#include "stdio.h"

写好串口重定向代码,然后就可以使用printf()函数了,例如:

printf("hello world");

 就可以通过串口输出字符串"hello world"。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

如愿小李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值