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。

相关推荐
qq_401700411 小时前
单片机之单总线通信DS18B20和红外遥控
stm32
深圳市尚想信息技术有限公司2 小时前
工业4.0核心引擎!意法STM32F407ZET6 单片机 赋能智能PLC/网关设计
stm32·单片机·嵌入式硬件·st意法·单片机mcu
GodKK老神灭2 小时前
STM32 串口寄存器开发
stm32·单片机·嵌入式硬件
木子单片机4 小时前
基于STM32电子密码锁
stm32·单片机·嵌入式硬件·proteus
郦7775 小时前
MO+内核32位普冉单片机PY32F003开发板
单片机·嵌入式硬件
Ivy烎6 小时前
STM32学习笔记
笔记·stm32·学习
蜡笔小电芯8 小时前
【STM32】 LWIP -TCP 客户端收发数据
网络·stm32·tcp/ip
邹诗钰-电子信息工程8 小时前
嵌入式自学第四十二天
单片机·嵌入式硬件
iCxhust8 小时前
使用 Visual Studio 创建安装包的完整指南
ide·单片机·嵌入式硬件·microsoft·c#·visual studio
深圳市尚想信息技术有限公司10 小时前
意法STM32F103C8T6 单片机ARM Cortex-M3 国民MCU 电机控制到物联网专用
arm开发·stm32·单片机