文章目录
- 前言
- 一、工程配置
- 二、串口重定向的原因
- 三、实现串口重定向
- 1.如何实现重定向
- 2.具体步骤
- 总结
前言
这篇文章主要讲解什么是串口重定向,为什么要串口串口重定向。
一、工程配置
1.芯片选型
我这里使用的是STM32 103ZET6大家可以根据自己板子的型号进行芯片的选择
2.基本配置
(1)设置STlink仿真debug
(2)开启外部高速时钟
(3)串口设置
设置串口为异步通信,并打开串口中断。
这里的波特率直接使用最大的就好了,波特率越大串口传输数据的速度越快。
(4)设置时钟树
这里也没什么具体要求直接使用最大的72MHZ即可,频率越大单片机速度越快。
(5)生成代码
这里的操作大家不要小看了,很多人因为最后生成工程出错了导致整个工程出错。
设置的工程名字和路径都不能包含有中文名,否则会报错。
勾选生成独立的.c和.h文件
二、串口重定向的原因
平时我们使用串口给上位机发送数据都是使用HAL库自带的函数进行发送,对于不熟悉这个函数的人来说用起来可能不太方便,还有一个最重要的就是使用这个函数只能发送字符串。不能使用发送中文和数字的功能。
HAL库自带的串口发送函数
这里就暂时不介绍这个函数的用法了。
HAL_UART_Transmit
使用这个函数去发送数字或者中文数据时,需要格式化字符串,需要使用到sprintf,这对于C语言基础知识不好的同学来说又增加了负担,而且使用起来还麻烦。
所以这里给大家带来一个简便的方法:串口重定向。
三、实现串口重定向
1.如何实现重定向
在C语言中我们一般是使用printf函数进行输出到屏幕,scanf函数进行输入。
在嵌入式设备中,一般使用串口进行输入,输出。
而printf函数的输出就是依赖于fputc函数实现的,所以我们只需要重写fputc函数即可。
2.具体步骤
使用微库。MicoroLIB 是缺省 C 库的备选库,它对标准 C 库进行了高度优化使代码更少,占用更少资源。为使用 printf、 scanf 函数需要
在文件中包含 stdio.h 头文件
在uart.c文件下包含 #include <stdio.h>因为在这里我们需要重新实现fputc函数
fputc函数的改写
int fputc(int ch,FILE *f)
{
HAL_UART_Transmit(&huart1,(uint8_t*)&(ch),1,1000);
return (ch);
}
将fputc函数改写后我们就可以使用printf函数给上位机发送数据了。
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init();
MX_TIM1_Init();
/* USER CODE BEGIN 2 */
printf("hello world\r\n");
/* USER CODE END 2 */
总结
使用printf函数和上位机通信是非常的方便的。希望大家都能够掌握。