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。

相关推荐
O。o.尊都假都26 分钟前
STM32之LVGL移植
stm32·单片机·嵌入式硬件·freertos·lvgl
学不动CV了27 分钟前
ARM单片机OTA解析(一)
c语言·arm开发·stm32·单片机·嵌入式硬件·51单片机
一叶舞澎湃32 分钟前
GD32 CAN1和TIMER0同时开启问题
单片机·嵌入式硬件
EutoCool1 小时前
Qt窗口:菜单栏
开发语言·c++·嵌入式硬件·qt·前端框架
易知嵌入式小菜鸡3 小时前
CCS-MSPM0G3507-3-基础篇-PWM输出
stm32·单片机·嵌入式硬件
悟空胆好小6 小时前
分音塔科技(BABEL Technology) 的公司背景、股权构成、产品类型及技术能力的全方位解读
网络·人工智能·科技·嵌入式硬件
Meraki.Zhang7 小时前
【STM32实践篇】:最小系统组成
stm32·单片机·嵌入式硬件·最小系统
Do vis8248 小时前
STM32第二十一天定时器TIM
stm32·单片机·嵌入式硬件
丁满与彭彭9 小时前
嵌入式学习笔记--MCU阶段--day03中断
笔记·单片机·学习
森焱森10 小时前
一文理解锂电池充电、过放修复与电量测量:从原理到实战
c语言·单片机·架构