一、前言
1、简介
前面在UART发送中已经讲解过如何调用HAL库的HAL_UART_Transmit函数来实现串口发送,而在调用这个函数来实现串口发送的话,但是在发送数据或者字符的时候,需要将数据或字符都先转换成字符并存在一个数组,或者分开发几次,这是会出现一些不便之处,不能像printf一样方便。
所以这篇博客就说说如何在串口上实现用printf函数来发送,实现方法也非常简单。
2、UART简介
嵌入式开发中,UART串口通信协议是我们常用的通信协议之一,全称叫做通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)。
3、准备工作
按照UART详解中完成所有配置操作并生成代码,就可以开始下面操作。
二、代码部分
1、创建新的“.c”、“.h”文件(命名按照自己习惯)
2、在“.h”文件中添加(最后需要空出一行)
#ifndef _CORE_PRINTF_H_
#define _CORE_PRINTF_H_ #include "stdio.h"
#include "Usart.h" #endif
3、在“.c”文件中添加(最后需要空出一行)
#include "Core_Printf.h" #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)
{
/* 选择USART1发送 */
while((USART1->SR&0X40)==);//循环发送,直到发送完毕
USART1->DR = (uint8_t) ch;
return ch;
}
#endif
4、添加Include头文件(在需要调用到的函数中添加)
/* USER CODE BEGIN Includes */
#include "Core_Printf.h"
/* USER CODE END Includes */
5、整个main函数如下
int main(void)
{
/* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */
SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */
/* USER CODE BEGIN WHILE */
while ()
{
/* UART printf发送 */
printf("\r\n欢迎来到LLLIN000的博客!!");
/* 延迟1s */
HAL_Delay();
/* USER CODE END WHILE */ /* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
6、编译、下载烧写
7、实现效果
说明:
按照上面的操作完成后,就可以在串口发送上实现printf的发送功能,非常方便使用。
三、结尾
1、总结
这篇博客补全了 未提及的Printf发送方式,我们可以将这两个代码文件保存下来,日后可以直接在其他项目调用即可。
2、回顾
1)UART详解
2)UART发送
3)UART接收
3、后续
待补充……
~
~
~
~
感谢阅读~
欢迎大家关注我的博客,一起分享嵌入式知识~