STM32G030C8T6:USART串口通信(中断)

本专栏记录STM32开发各个功能的详细过程,方便自己后续查看,当然也供正在入门STM32单片机的兄弟们参考;
本小节的目标是,系统主频64 MHZ,采用高速外部晶振,通过芯片PB6,PB7 的USART1 口,实现串口通信。

原理:电脑上的串口调试器软件通过USB转TTL模块发数据给板子,板子把收到的数据发送给模块,数据在串口调试器软件上显示。

涉及到的知识:配置UART引脚,串口通信,STM32CubeMX的使用

我是将PB7作为RX,PB6作为TX,使用USART1,如果你要使用其他引脚,或者使用USART2,换成其他引脚即可;

文章目录

  • [1 新建工程](#1 新建工程)
  • [2 配置SWD下载引脚](#2 配置SWD下载引脚)
  • [3 配置USART](#3 配置USART)
  • [4 配置RCC](#4 配置RCC)
  • [5 设置系统主频](#5 设置系统主频)
  • [6 生成工程](#6 生成工程)
  • [7 增加代码实现串口收发](#7 增加代码实现串口收发)

1 新建工程

点击File 菜单下的New Project

选择芯片型号,如下图所示先输入芯片型号,目前这边输入STM32G030C8,

双击选择,就确定了芯片型号,界面会变成如下图所示

2 配置SWD下载引脚

如下图所示,在Pinout&Configuration 栏目的System Core 下,先点击SYS,再勾选Serial Wire 框,

配置好SWD 下载引脚设置:

3 配置USART

因为STM32G030C8T6默认的USART1引脚为PA9和PA10,所以如果直接在STM32CubeMX上点USART1,那么点亮的引脚会是PA9和PA10,而我是要使用PB6和PB7,因此,先点击PB6,PB7,将其配置为UART口,如下所示:

先点击PB6,将其配置为USART1_TX

然后点击PB7,将其配置为USART1_RX:

配置完成后,PB6和PB7均被点亮:

然后使能中断,如下图所示:

4 配置RCC

如下图,先点击RCC,在HSE 配置中选择Crystal/Ceramic Resonator 外部晶振设

5 设置系统主频

如下图, 先点击Clock Configuration 栏目,按下图的1,2,3,4 步骤完成系统64MHZ 主频设置:

6 生成工程

按照下图的步骤,进行项目配置,项目名称和路径设置等,生成项目的类型选择STM32CubeIDE(我这里以STM32CubeIDE为例,如果你要试用keil5,那就选择MDK-RAM,如果要使用makefile,就选择Makefile),注意项目名称和路径不要有中文名;

最后全部设置完毕后点击create code,生成项目代码:

生成的工程如下图所示:

7 增加代码实现串口收发

如下图实现数组的定义,数据接收回调函数定义,接收数据,发送数据。

c 复制代码
uint8_t aTxBuffer[] = "HelloWorld";//定义发送数组的内容,长度10字节
	#define COUNTOF(__BUFFER__)   (sizeof(__BUFFER__) / sizeof(*(__BUFFER__)))
	#define TXBUFFERSIZE                      (COUNTOF(aTxBuffer) - 1)//计算长度宏定义
/* Size of Reception buffer */
#define RXBUFFERSIZE                      TXBUFFERSIZE//定义接收数据的长度
	uint8_t aRxBuffer[RXBUFFERSIZE];//定义接收数组
	__IO ITStatus UartReady = RESET;//状态控制位,SET说明收到数据

//串口接受回调函数,接收到数据,状态位置位
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  /* Prevent unused argument(s) compilation warning */
	 UartReady = SET;
  /* NOTE : This function should not be modified, when the callback is needed,
            the HAL_UART_RxCpltCallback can be implemented in the user file.
   */
}
c 复制代码
	if (HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, RXBUFFERSIZE) != HAL_OK)//接收中断使能
  {
  }
	 while(UartReady != SET)//判断是否有接收到数据,没有则一直等待
  {
  }
	if(HAL_UART_Transmit_IT(&huart1, (uint8_t *)aRxBuffer, TXBUFFERSIZE) != HAL_OK)//发送数据
  {
		UartReady=RESET;//状态清0
  }

测试:

按图1连接,板子的PA9,PA10,GND分别跟USB转TTL模块的RXD,TXD,GND相连,板子上电,用串口调试器发送Helloworld,板子能返回Helloworld,说明板子串口收发OK。

相关推荐
蜀黍@猿10 分钟前
【GD32】ROM Bootloader、自定义Bootloader区别
单片机·嵌入式硬件
物随心转1 小时前
ARM处理器的NEON技术
嵌入式硬件
sheepwjl2 小时前
《嵌入式硬件(六):ARM汇编核心内容总结》
汇编·arm开发·嵌入式硬件
小莞尔3 小时前
【51单片机】【protues仿真】基于51单片机公交报站系统
stm32·单片机·嵌入式硬件·51单片机·proteus
写点什么呢3 小时前
Cubemx+Fatfs(解决挂载Fatfs失败的问题)
单片机·嵌入式硬件
物随心转3 小时前
ARM的big.LITTLE架构
嵌入式硬件
月阳羊3 小时前
【硬件-笔试面试题-81】硬件/电子工程师,笔试面试题(知识点:详细讲讲同步时钟与异步时钟通信)
java·经验分享·单片机·嵌入式硬件·面试
猪八戒1.04 小时前
4.2 I2C通信协议
stm32·单片机·嵌入式硬件
然后,是第八天4 小时前
[模块教学]VK16K33_8×16LED矩阵屏的驱动以及技术文档,矩阵屏, 详细配置说明
stm32·单片机·iic·8×16点阵屏
指针刺客4 小时前
串口数据收发的设计
单片机·嵌入式硬件