【STM32+HAL库】---- 串口实现scanf输入和printf输出

硬件开发板:STM32G0B1RET6
软件平台:cubemax+keil+VScode

1 新建cubemax工程

1.1 配置系统时钟树

image

1.2 UART配置

查阅原理图,可知G0开发板的UART2连接到了板卡搭载的ST-Link上,故开启UART即可
image
UART2对应着PA2,PA3引脚
image
展开connectivity,找到USART2,模式选择异步通信模式Asynchronous,注意波特率为115200(默认即可)
image

1.3 导出工程

...略

2 keil配置

进入keil的魔术棒界面,在Target设置里勾选Use MicroLIB,避免进入半主机模式
image

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 现象

image

posted @ 2024-01-12 15:03  晚风也温柔  阅读(468)  评论(0编辑  收藏  举报