普中STM32-PZ6806L开发板(HAL库函数实现-USART1 printf+scanf/gets)

简介

实现printf+scanf/gets通过USART1 的发送接收。

电路原理图

板载USB CH340串口电路原理图

普中STM32-PZ6806L开发板(HAL库函数实现-USART1 printf+scanf/gets)_第1张图片
主芯片串口引脚图
普中STM32-PZ6806L开发板(HAL库函数实现-USART1 printf+scanf/gets)_第2张图片
我的板子板子自带串口坏掉了, 所以使用USB转TTL线, 连接如下
电路原理图
普中STM32-PZ6806L开发板(HAL库函数实现-USART1 printf+scanf/gets)_第3张图片
实物图

其他知识

scanf是以空白符(空格、制表符、换行等等)为结束标志的,当遇到空白符是就会结束一次输入,如果你需要读取空格的话可以使用gets或者getchar。

实现步骤

创建项目

参考 普中STM32-PZ6806L开发板(STM32CubeMX创建项目并点亮LED灯)

初始化USART1

普中STM32-PZ6806L开发板(HAL库函数实现-USART1 printf+scanf/gets)_第4张图片
其他的保持默认就好

Keil 打开支持MicroLIB支持

不打开无法正常使用printf等标准库
普中STM32-PZ6806L开发板(HAL库函数实现-USART1 printf+scanf/gets)_第5张图片

添加用户代码

main.c

#include "stdio.h"
#include "string.h"
// printf 等的底层调用函数, 重定义之后printf将调用此函数进行字符打印
int fputc(int ch, FILE *file)
{
	uint8_t temp[1] = {ch};
	HAL_UART_Transmit(&huart1, temp, 1, 0xffff);
	return HAL_OK;
}

// scanf 等的底层调用函数,  重定义后scanf将调用此函数获取输入数据
int fgetc(FILE *f)
{
    uint8_t ch = 0;
    HAL_UART_Receive(&huart1, &ch, 1, 0xffff);
    return ch;
}

int main()
{
...
	printf("Very Welcome!!!\r\n");
	while (1)
	{
	    memset(buf, 0, sizeof(buf)/sizeof(uint8_t)); // 内存块数据清零
		gets("%s", buf); // 从串口获取数据
		printf("Recv: %s\r\n", buf); // 打印获取到的数据
	}
...
}

共赏

普中STM32-PZ6806L开发板(HAL库函数实现-USART1 printf+scanf/gets)_第6张图片

参考

普中STM32-PZ6806L开发板(HAL库函数实现-批量操作GPIO引脚实现跑马灯)

你可能感兴趣的:(普中STM32-PZ6806L,stm32,嵌入式硬件,单片机,普中)