写在前面:
本教程隶属于《ARM Cortex-M4裸机开发篇》系列,整套课程共包含14个章节。开发环境基于华清远见FS-MP1A开发板(主控芯片为STM32MP157),M4裸机部分不仅涵盖核心控制,还将深入探索资源扩展板上的各类传感器与执行器件——包括空气温湿度传感器、LED指示灯、数码管、蜂鸣器、震动马达、按键中断、风扇等。本文是该系列的关键环节之一。
资源扩展板作为FS-MP1A的扩展模块,集成了十余种主流传感器、执行器及总线控制器件,非常适合嵌入式项目开发。围绕智慧家庭、智能医疗、智能安防、工业控制、图像识别、环境监测等方向,共提供约十个综合项目案例,配套的文档、源码及应用资料将一并提供。
此外,针对FS-MP1A开发板,除了Cortex-M4裸机系列,还推出了Cortex-A7开发、FreeRTOS、Linux基础与应用开发、Linux系统移植、Linux驱动开发、硬件设计、人工智能机器视觉、Qt应用编程、Qt综合项目实战等系列教程,覆盖领域广泛。
资源扩展板介绍
硬件介绍&资源扩展板可开发项目
扩展板LED灯控制
实验原理
查阅扩展板原理图,对照实物可知扩展板上一共设有四个LED。其中LED4为底板电压指示灯,而LD1、LD2、LD3才是可由用户控制的LED。其工作原理非常经典:
从电路图可见:当LED1引脚输出高电平时,三极管Q1导通,发光二极管LED1点亮。同理,LED2与LED3引脚输出高电平时,LD2与LD3也会相继亮起。
继续追踪原理图,LED1、LED2、LED3分别对应STM32MP157芯片的PE10、PF10、PE8引脚,对应关系清晰明了:
扩展板与底板接口对照图
根据网络编号可直接追踪到CPU管脚,上图已将对应关系标注清楚。汇总如下:
| 原理图网络编号 | 对应管脚 | 管脚功能 | 管脚功能码 |
| LED1 | PE10 | GPIO | ANALOG |
| LED2 | PF10 | GPIO | ANALOG |
| LED3 | PE8 | GPIO | ANALOG |
实验目的
了解LED的工作原理
掌握GPIO口的使用方法,学会通过STM32MP157A的I/O口控制LED
实验环境
FS-MP1A开发平台
ST-Link仿真器
STM32CubeIDE开发软件
PC机(支持XP / Windows 7/10,32位或64位均可)
实验步骤
启动STM32CubeIDE,首先配置CubeMX。
在搜索框中搜索扩展板LED对应的GPIO引脚:PE8、PE10、PF10,左键点击并设置为GPIO_Output。
这里有一个关键点:与其他单片机不同,我们还需要进一步设置“Pin Reservation”为“Cortex-M4”。若不执行此步骤,STM32CubeMX将不会生成GPIO初始化相关代码。具体操作:在已选中的引脚上右键,选择“Pin Reservation”→“Cortex-M4”。
在Code Generator选项卡中,选择“为每个外设生成单独的C和H文件”,这样代码结构更加清晰,便于后续阅读与维护。
完成上述设置后,按Ctrl+S保存,系统会提示是否生成代码。选择Yes即可自动生成工程,系统Clock代码也会一并配置完成。
以上是新建工程的配置流程。若不想从头创建,也可参考12.3.2章节直接导入已有工程——工程路径位于【华清远见-FS-MP1A开发资料\2-程序源码\ARM体系结构与接口技术\Cortex-M4\7_EX_GPIO_LED】。
接下来添加GPIO控制函数。我们需要在main.c中编写控制逻辑,核心是调用HAL库的GPIO引脚输出电平函数。
void bsp_led_on(void)
{
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_8, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_SET);
}
void bsp_led_off(void)
{
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_8, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_10, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_RESET);
}
最后在main.c的循环中调用这两个函数,通过改变GPIO引脚的高低电平,即可实现LED的亮灭控制。

