【STM32+HAL库】---- 串口实现scanf输入和printf输出
硬件开发板:STM32G0B1RET6
软件平台:cubemax+keil+VScode
1 新建cubemax工程
1.1 配置系统时钟树
1.2 UART配置
查阅原理图,可知G0开发板的UART2连接到了板卡搭载的ST-Link上,故开启UART即可
UART2对应着PA2,PA3引脚
展开connectivity,找到USART2,模式选择异步通信模式Asynchronous,注意波特率为115200(默认即可)
1.3 导出工程
...略
2 keil配置
进入keil的魔术棒界面,在Target设置里勾选Use MicroLIB,避免进入半主机模式
3 代码
3.1 在usart.h中引入头文件和函数声明
#include "stdio.h"
int fgetc(FILE *f);
int fputc(int ch,FILE *f);
3.2 在usart.c中重定向scanf和printf
//重定向scanf
int fgetc(FILE *f)
{
uint8_t ch=0;
HAL_UART_Receive(&huart2,&ch,1,0xffff);
return ch;
}
//重定向printf
int fputc(int ch,FILE *f)
{
uint8_t temp[1]={ch};
HAL_UART_Transmit(&huart2,temp,1,2);
return ch;
}
3.3 main.c函数
int main(void)
{
int a;
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART2_UART_Init();
printf("USART is ok!\n");
printf("please input a:\n");
scanf("%d",&a);
while (1)
{
printf("a=%d\n",a);
HAL_Delay(1000);
}
}
4 现象
本文来自博客园,作者:晚风也温柔,转载请注明原文链接:https://www.cnblogs.com/zxr-blog/p/17959499