打印
[STM32G0]

STM32G071RB:入门级MCU的高性价比之选

[复制链接]
76|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
童雨竹|  楼主 | 2024-12-11 07:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在嵌入式开发领域,STMicroelectronics(意法半导体)的STM32系列因其性能强大、外设丰富、功耗低而深受开发者青睐。STM32G071RB是一款基于Arm Cortex-M0+内核的MCU,主频为64 MHz,集成了丰富的外设功能和内置硬件加密单元,非常适合工业控制和物联网应用。本文将详细介绍STM32G071RB的特性,并通过一个UART串口通信的代码示例来展示它的实际应用。

一、STM32G071RB的核心特点
  • 性能与低功耗的平衡
    作为Cortex-M0+系列的产品,STM32G071RB主频达到64 MHz,同时支持多种低功耗模式,适用于功耗敏感的设备。
  • 丰富的外设接口
    STM32G071RB集成了多种外设,包括I2C、SPI、UART、ADC、DAC和CAN接口,满足多样化需求。
  • 增强的安全性
    该MCU内置硬件AES加密单元和真随机数生成器,为物联网设备提供更高的安全性。
  • 内置硬件分压器
    支持VREF外部参考电压,提高ADC采样精度。
  • 开发资源丰富
    STM32G071RB兼容STM32CubeIDE和STM32CubeMX,提供易于使用的开发工具链和代码库。


二、开发环境准备
  • 硬件

    • STM32G071RB Nucleo开发板
    • USB数据线
    • 调试工具(如ST-LINK V2)
  • 软件

    • STM32CubeIDE
    • STM32CubeMX

三、代码示例:UART通信实现以下代码实现了通过USART2接口发送和接收数据的功能,开发者可以连接PC进行测试。
#include "main.h"

// UART句柄定义
UART_HandleTypeDef huart2;

// 函数声明
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);

int main(void)
{
    uint8_t txData[] = "Hello, STM32G071RB!\r\n";
    uint8_t rxData[10];

    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_USART2_UART_Init();

    while (1)
    {
        // 发送数据
        HAL_UART_Transmit(&huart2, txData, sizeof(txData) - 1, HAL_MAX_DELAY);

        // 接收数据
        HAL_UART_Receive(&huart2, rxData, sizeof(rxData), HAL_MAX_DELAY);

        // 将接收到的数据回传
        HAL_UART_Transmit(&huart2, rxData, sizeof(rxData), HAL_MAX_DELAY);
    }
}

// 配置系统时钟
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_ON;
    RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
    RCC_OscInitStruct.PLL.PLLM = 1;
    RCC_OscInitStruct.PLL.PLLN = 8;
    RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7;
    RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
    RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;

    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_PLLCLK;
    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

    if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
    {
        Error_Handler();
    }
}

// 初始化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 Error_Handler(void)
{
    while (1)
    {
    }
}
四、代码解析
  • UART初始化
    通过MX_USART2_UART_Init()函数配置USART2的波特率、数据位、停止位等参数。
  • 数据收发流程
    在主循环中,开发板会先发送“Hello, STM32G071RB!”字符串,然后等待接收数据并回传。
  • 系统时钟配置
    采用内部HSI时钟源,通过PLL配置主频为64 MHz。


五、总结STM32G071RB凭借其高性价比和丰富的功能,成为入门级嵌入式开发的优质选择。通过简单的UART通信示例,我们可以感受到其开发环境的便利和硬件功能的强大。未来可以结合ADC、CAN等外设开发更多高级应用。

使用特权

评论回复
沙发
公羊子丹| | 2024-12-11 07:40 | 只看该作者
这个串口通信例子很实用,马上动手试试!

使用特权

评论回复
板凳
周半梅| | 2024-12-11 07:41 | 只看该作者
STM32G071RB的安全性模块让我很感兴趣,适合物联网应用。

使用特权

评论回复
地板
帛灿灿| | 2024-12-11 07:41 | 只看该作者
内置AES硬件加速器,真是安全领域的福音啊。

使用特权

评论回复
5
万图| | 2024-12-11 07:41 | 只看该作者
Nucleo板子用起来确实方便,点赞!

使用特权

评论回复
6
Wordsworth| | 2024-12-11 07:41 | 只看该作者
HSI时钟源的配置步骤很清晰,干货满满。

使用特权

评论回复
7
Bblythe| | 2024-12-11 07:42 | 只看该作者
看到Cortex-M0+内核能跑这么快,真是惊喜!

使用特权

评论回复
8
Pulitzer| | 2024-12-11 07:42 | 只看该作者
有没有计划再写个ADC相关的教程?挺想学的。

使用特权

评论回复
9
Uriah| | 2024-12-11 07:42 | 只看该作者
感觉G071RB适合初学者练手,功能丰富又不复杂。

使用特权

评论回复
10
Clyde011| | 2024-12-11 07:42 | 只看该作者
回传数据的功能不错,调试的时候很方便。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

45

主题

3789

帖子

0

粉丝