[MM32软件] 灵动 MM32F103 MCU 入门与 GPIO 控制代码详解

[复制链接]
 楼主| Clyde011 发表于 2024-10-17 08:16 | 显示全部楼层 |阅读模式
灵动微电子 (MindMotion) 的 MM32 系列 MCU 以其稳定性和高性价比,在国产 MCU 市场中占有一席之地。MM32 系列基于 ARM Cortex-M 架构,适用于工业控制、智能家居等多种场景。本文以 MM32F103 为例,介绍这款芯片的特点,并通过代码演示如何控制 GPIO 引脚,实现 LED 的点亮与按键检测。

一、MM32F103 的主要特性
  • 高性价比:功能丰富且价格低廉,在工业与消费电子领域非常受欢迎。
  • 丰富的外设支持:包含 UART、SPI、I²C、ADC 等外设接口,方便与传感器或通信模块连接。
  • 主频与存储
    • 主频最高可达 72 MHz
    • 提供多种存储配置,支持最大 128KB Flash 和 20KB RAM
  • 兼容性强:MM32F103 系列与 STM32F1 系列引脚和外设兼容,可无缝替换。
  • 开发工具支持:兼容 Keil、IAR 和灵动官方 MM32Cube 开发平台,开发门槛低。

二、开发环境与工具准备
  • IDE:推荐使用 Keil MDK 或 MM32Cube 平台。
  • 开发板:使用 MM32F103 开发板,测试 GPIO 控制。
  • 硬件连接
    • 将 LED 连接到 GPIO 引脚(如 PA0)。
    • 将按键连接到另一个 GPIO 引脚(如 PC13),通过按键控制 LED 的状态。

三、GPIO 控制代码示例以下代码展示如何通过 GPIO 控制 LED 的亮灭,以及检测按键的状态。
  1. #include "mm32_device.h"  // 包含设备头文件
  2. #include "hal_gpio.h"      // 包含 GPIO 驱动库

  3. // 初始化 GPIO 引脚
  4. void GPIO_Init(void) {
  5.     // 启用 GPIOA 和 GPIOC 的时钟
  6.     RCC->AHB2ENR |= RCC_AHB2ENR_GPIOAEN | RCC_AHB2ENR_GPIOCEN;

  7.     // 配置 PA0 为推挽输出模式,用于控制 LED
  8.     GPIOA->MODER &= ~(3 << (0 * 2));  // 清除模式位
  9.     GPIOA->MODER |= (1 << (0 * 2));   // 设置为输出模式
  10.     GPIOA->OTYPER &= ~(1 << 0);       // 推挽输出
  11.     GPIOA->OSPEEDR |= (3 << (0 * 2)); // 高速模式

  12.     // 配置 PC13 为浮空输入模式,用于检测按键状态
  13.     GPIOC->MODER &= ~(3 << (13 * 2)); // 设置为输入模式
  14.     GPIOC->PUPDR &= ~(3 << (13 * 2)); // 不使用上下拉电阻
  15. }

  16. // 延时函数
  17. void Delay(uint32_t count) {
  18.     for (uint32_t i = 0; i < count * 1000; i++) {
  19.         __NOP();  // 空操作,用于延时
  20.     }
  21. }

  22. int main(void) {
  23.     GPIO_Init();  // 初始化 GPIO

  24.     while (1) {
  25.         // 检测按键状态
  26.         if (GPIOC->IDR & (1 << 13)) {
  27.             // 按键未按下,关闭 LED
  28.             GPIOA->BSRR = (1 << 0) << 16;  // 复位 PA0
  29.         } else {
  30.             // 按键按下,点亮 LED
  31.             GPIOA->BSRR = (1 << 0);        // 设置 PA0
  32.         }
  33.         Delay(100);  // 简单延时,防止按键抖动
  34.     }
  35. }
四、代码解析与运行说明
  • GPIO 初始化

    • 使用 GPIO_Init 函数配置 PA0 为推挽输出,PC13 为浮空输入。
    • 启用 GPIOA 和 GPIOC 的时钟,确保外设能够正常工作。
  • LED 控制逻辑

    • 在主循环中,检测按键的状态。如果按键未按下,则复位 PA0 引脚,关闭 LED。
    • 如果按键按下,则设置 PA0 引脚电平为高,点亮 LED。
  • 延时与按键消抖
    使用简单的空循环实现延时,避免按键按下时由于抖动引起误判。
  • 运行结果

    • 上电后,按下按键时,LED 会亮起;松开按键后,LED 熄灭。

五、MM32F103 的应用场景
  • 智能家居:用于家电的控制模块,如智能开关、灯光调节器。
  • 工业控制:在 PLC 和控制器中作为核心控制单元。
  • 教育培训:MM32F103 的开发板被广泛应用于高校嵌入式系统课程。
  • 物联网设备:搭配无线模块,实现远程监控与数据上传。
  • 消费电子:用于小家电的控制面板,如咖啡机、风扇等设备。

六、总结灵动 MM32F103 MCU 凭借其高性价比和丰富的外设接口,已成为国产 MCU 中的明星产品。本文通过 GPIO 控制 LED 和按键的代码示例,展示了这款芯片的基础操作。对于初学者来说,这款 MCU 提供了良好的入门体验;而对于有经验的开发者,它的丰富功能和兼容性也能满足复杂项目的需求。

公羊子丹 发表于 2024-10-17 08:17 来自手机 | 显示全部楼层
这个延时用空循环实现的,感觉在大项目中不太合适,可以用定时器优化下。
周半梅 发表于 2024-10-17 08:17 来自手机 | 显示全部楼层
MM32 系列的库函数用起来还挺方便的,比直接写寄存器省事多了。
帛灿灿 发表于 2024-10-17 08:18 来自手机 | 显示全部楼层
我觉得这款 MCU 在稳定性上表现还不错,没遇到过死机问题。
童雨竹 发表于 2024-10-17 08:20 来自手机 | 显示全部楼层
有没有人用过它的 ADC?感觉采样速度怎么样?
万图 发表于 2024-10-17 08:20 来自手机 | 显示全部楼层
我在智能家居项目中用过 MM32,跑了一年多一直很稳定。
Wordsworth 发表于 2024-10-17 08:21 来自手机 | 显示全部楼层
这芯片性价比挺高的,用来替换 STM32 是个不错的选择。
Bblythe 发表于 2024-10-17 08:23 来自手机 | 显示全部楼层
有人试过 MM32 配 LoRa 模块吗?感觉通信距离如何?
Pulitzer 发表于 2024-10-17 08:24 来自手机 | 显示全部楼层
用 GPIO 控制 LED 的示例简单易懂,适合新手上手。
Uriah 发表于 2024-10-17 08:24 来自手机 | 显示全部楼层
MM32Cube 的开发环境还不错,就是功能上比 STM32CubeIDE 少一些。
suncat0504 发表于 2024-10-23 19:35 | 显示全部楼层
稳定性好、抗干扰性强,开发容易,是一个好芯片必须具备的。作为国产,灵动微的确很不错!
wangguanfu 发表于 2024-11-28 04:24 来自手机 | 显示全部楼层
垃圾芯片
您需要登录后才可以回帖 登录 | 注册

本版积分规则

139

主题

5508

帖子

0

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

139

主题

5508

帖子

0

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