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

[复制链接]
1160|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进行测试。
  1. #include "main.h"

  2. // UART句柄定义
  3. UART_HandleTypeDef huart2;

  4. // 函数声明
  5. void SystemClock_Config(void);
  6. static void MX_GPIO_Init(void);
  7. static void MX_USART2_UART_Init(void);

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

  12.     HAL_Init();
  13.     SystemClock_Config();
  14.     MX_GPIO_Init();
  15.     MX_USART2_UART_Init();

  16.     while (1)
  17.     {
  18.         // 发送数据
  19.         HAL_UART_Transmit(&huart2, txData, sizeof(txData) - 1, HAL_MAX_DELAY);

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

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

  26. // 配置系统时钟
  27. void SystemClock_Config(void)
  28. {
  29.     RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  30.     RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  31.     RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  32.     RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  33.     RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  34.     RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  35.     RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  36.     RCC_OscInitStruct.PLL.PLLM = 1;
  37.     RCC_OscInitStruct.PLL.PLLN = 8;
  38.     RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7;
  39.     RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
  40.     RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;

  41.     if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  42.     {
  43.         Error_Handler();
  44.     }
  45.     RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1;
  46.     RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  47.     RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  48.     RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

  49.     if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
  50.     {
  51.         Error_Handler();
  52.     }
  53. }

  54. // 初始化USART2
  55. static void MX_USART2_UART_Init(void)
  56. {
  57.     huart2.Instance = USART2;
  58.     huart2.Init.BaudRate = 115200;
  59.     huart2.Init.WordLength = UART_WORDLENGTH_8B;
  60.     huart2.Init.StopBits = UART_STOPBITS_1;
  61.     huart2.Init.Parity = UART_PARITY_NONE;
  62.     huart2.Init.Mode = UART_MODE_TX_RX;
  63.     huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  64.     huart2.Init.OverSampling = UART_OVERSAMPLING_16;

  65.     if (HAL_UART_Init(&huart2) != HAL_OK)
  66.     {
  67.         Error_Handler();
  68.     }
  69. }

  70. // 初始化GPIO
  71. static void MX_GPIO_Init(void)
  72. {
  73.     __HAL_RCC_GPIOA_CLK_ENABLE();
  74. }

  75. // 错误处理
  76. void Error_Handler(void)
  77. {
  78.     while (1)
  79.     {
  80.     }
  81. }
四、代码解析
  • 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硬件加速器,真是安全领域的福音啊。
万图 发表于 2024-12-11 07:41 | 显示全部楼层
Nucleo板子用起来确实方便,点赞!
Wordsworth 发表于 2024-12-11 07:41 | 显示全部楼层
HSI时钟源的配置步骤很清晰,干货满满。
Bblythe 发表于 2024-12-11 07:42 | 显示全部楼层
看到Cortex-M0+内核能跑这么快,真是惊喜!
Pulitzer 发表于 2024-12-11 07:42 | 显示全部楼层
有没有计划再写个ADC相关的教程?挺想学的。
Uriah 发表于 2024-12-11 07:42 | 显示全部楼层
感觉G071RB适合初学者练手,功能丰富又不复杂。
Clyde011 发表于 2024-12-11 07:42 | 显示全部楼层
回传数据的功能不错,调试的时候很方便。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

174

主题

6250

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部