随着嵌入式开发技术的不断进步,STMicroelectronics 的 STM32 系列 MCU 在性价比与功能性之间达到了绝佳平衡。本文以 STM32G071RB 为例,全面讲解该 MCU 的开发步骤和实际应用案例,助力初学者快速上手。
一、STM32G071RB 的硬件概述STM32G071RB 是 ST 的主流级 MCU 系列,采用 Arm Cortex-M0+ 内核,具备高达 64 MHz 的主频,内置多种外设支持,包括 12-bit ADC、USART、I2C、SPI 等。同时,它还集成了硬件 DMA 和内部 EEPROM,适合工业控制和家用电器应用。
二、开发工具介绍开发 STM32G071RB 的必要工具包括:
- STM32CubeIDE:官方集成开发环境,提供 HAL 库支持。
- ST-LINK/V2:用于程序烧录与调试。
- NUCLEO-G071RB 开发板:官方推荐开发板,方便快速验证项目。
三、项目实例:基于 STM32G071RB 的 UART 通信以下通过 UART 通信的基本案例,展示 STM32G071RB 的开发流程:
1. 硬件连接
将 STM32G071RB 的 USART2 接口与 PC 通过 USB 转串口模块连接,使用以下引脚:
- TX(PA2)接模块 RX
- RX(PA3)接模块 TX
- GND 接模块 GND
2. CubeMX 配置
打开 STM32CubeIDE,创建新工程,选择 G071RB。使用 CubeMX 配置:
- 激活 USART2 外设
- 设置波特率为 115200
- 使用默认 HAL 驱动
3. HAL 库实现 UART 数据发送
在 main.c 文件中,使用 HAL 库完成简单的数据发送功能:
#include "main.h"
UART_HandleTypeDef huart2;
// 初始化 UART
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART2_UART_Init();
char message[] = "Hello, STM32G071RB!\r\n";
while (1)
{
HAL_UART_Transmit(&huart2, (uint8_t *)message, sizeof(message) - 1, HAL_MAX_DELAY);
HAL_Delay(1000); // 每隔一秒发送一次
}
}
// USART2 初始化函数
static void MX_USART2_UART_Init(void)
{
huart2.Instance = USART2;
huart2.Init.BaudRate = 115200;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
huart2.Init.Mode = UART_MODE_TX_RX;
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart2) != HAL_OK)
{
Error_Handler();
}
}
// GPIO 初始化函数
static void MX_GPIO_Init(void)
{
__HAL_RCC_GPIOA_CLK_ENABLE();
}
// 系统时钟配置
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK |
RCC_CLOCKTYPE_PCLK1;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
}
4. 调试与运行
编译程序并通过 ST-LINK 烧录到 STM32G071RB。打开串口调试工具,配置波特率为 115200,查看 STM32 MCU 每秒发送的消息。
四、总结STM32G071RB 是一款性能可靠、功能丰富的中端 MCU。通过本文案例,我们可以看到基于 HAL 库的开发方式非常高效。同时,在实际应用中,您还可以扩展如中断通信、DMA 数据传输等功能,进一步提升系统性能。
|