L1 STM32 单片机核心认知与 GPIO 基础
本课目标
能识别 STM32 型号与资源,解释 GPIO 输入、输出及复用模式,并正确选择 HAL_GPIO_WritePin、HAL_GPIO_TogglePin 和 HAL_GPIO_ReadPin。
一、STM32 单片机核心认知:从基础到本质
1.1 STM32 单片机是什么?
首先明确核心概念:STM32 单片机并非单纯的一颗芯片,而是意法半导体(ST Microelectronics)推出的 32 位微控制器(MCU,Microcontroller Unit),更准确地说,它是高度集成的片上系统(SOC)。
大家可将其理解为 “浓缩到极致的微型计算机(小大脑)”—— 它把通用计算机的 CPU 内核、存储单元(RAM/Flash)、各类外设(GPIO / 串口 / 定时器)、电源管理模块、总线接口全部集成在一块芯片上,麻雀虽小五脏俱全,是嵌入式硬件设备的核心控制大脑,所有硬件控制指令均由其发出并执行。

本课程及战队 C.ONE 电控组的入门开发,均以STM32F103C8T6为核心开发芯片,它是 STM32F 系列的经典入门款,也是开发板的核心部件。类比一下苹果手机,可以看出来依次是品牌、产品类型、产品系列、规格型号。

1.1.1 STM32 核心产品系列分类
STM32 的系列繁多,字母 A、F、G、H、L、W 均有对应系列,很多同学刚接触会眼花缭乱,其实入门阶段只需吃透 F 系列即可,这是课程学习和战队开发的主力,其他系列简单了解适用场景,后续遇到具体需求再深入研究。
| 系列 | 核心内核 | 主频 | 核心特征 | 典型适用场景 |
|---|---|---|---|---|
| F 系列 | Cortex-M3/M4 | 72MHz~180MHz | 课程主力:外设最丰富、性价比最高、开发资料最全,战队 RoboMaster 机器人开发亦使用该系列 | 入门开发、机器人、物联网、工业控制、智能硬件 |
| G 系列 | Cortex-M0 | 48MHz | G系列核心搭载高精度数字定时器,实际主频参数适配高实时性控制需求 | 常用型号G474,广泛应用于超级电容数控调节功率环路,精准保障环路稳定运行。 |
| L 系列 | Cortex-M3/M0 | 48MHz~72MHz | 超低功耗、宽电压供电 | 电池供电设备,如便携手环、户外传感器、无线温湿度计 |
| H 系列 | Cortex-M7/M9 | 216MHz 及以上 | 高性能、大存储、多外设 | 高端工业控制、复杂智能设备,如高精度测控仪、工业机器人 |
| W 系列 | Cortex-M3/M0 | 48MHz~72MHz | 集成蓝牙 / WiFi / 射频 | 物联网无线设备,如 WiFi 智能灯、蓝牙温湿度计、远程控制模块 |


1.1.2 STM32F103C8T6 规格型号分类
这部分是基础中的基础,后续遇到其他 STM32 芯片,也可通过此方法快速识别。STM32 的型号后缀是引脚数 + Flash 容量 + 封装类型 + 温度范围的组合,缺一不可,STM32F103C8T6 的后缀参数如下表,同时附上 F103 系列通用后缀参考,后续选型直接查阅即可。

1.2 STM32 单片机能干什么?
了解 STM32 的定义后,大家必然会问:它具体能做什么?答案其实非常广泛 ——凡是需要电子控制的硬件设备,几乎都能以 STM32 为核心实现。 其核心能力是脱离通用计算机,独立实现对外部硬件的精准控制、实时信号检测与外设通信,应用场景覆盖消费电子、工业控制、机器人、物联网等多个领域。结合本课程学习,将其能力分为基础硬件控制和实战作品拓展两个层面,可清晰看到学习路径,且需牢记:所有能力的基础都是 GPIO。
1.2.1 基础硬件控制能力
通过本课程的 STM32+GPIO 学习,可独立实现以下基础硬件控制,这是所有复杂开发的底层基础,需亲手实操、练熟手感:
LED 控制:点亮、熄灭、闪烁、呼吸灯效果; 按键检测:按键按下 / 松开识别(解决按键消抖问题); 简单外设驱动:蜂鸣器发声(不同音调、不同节奏)、舵机角度转动与精准控制、直流电机调速; 信号检测:数字传感器信号读取(如红外感应、触摸传感器、限位开关)。
1.2.2 实战作品拓展
基础硬件控制练熟后,结合后续要学的串口、ADC、定时器等外设,可开发 / 复刻各类趣味作品,甚至贴合战队 RoboMaster 开发的竞赛、工业设备,实现知识落地,这也是嵌入式开发的乐趣所在: 趣味小作品:仿生蝴蝶、赛博小狗桌宠、流水灯摆件、人体感应智能小夜灯; 竞赛 / 工业设备:RoboMaster 英雄 / 步兵 / 哨兵机器人、避障智能小车、工业控制模块。
1.3 如何学习 STM32 单片机?
刚接触 STM32 时,最有效的方法不是堆叠理论,而是“理解原理 + 动手验证 + 复盘问题”。建议遵守以下原则:
- 从小项目入手:先完成 LED 点亮和按键输入,再逐步挑战传感器、执行器和机器人控制。
- 每节课都亲手验证:完成接线、CubeMX 配置、CLion 构建和 Ozone 调试,不能只看截图。
- 先吃透 GPIO 再进阶:理解输入输出、上下拉、复用和 HAL 调用后,再进入串口、ADC 与定时器。
- 遵循固定工作流:按 CubeMX 配置、CLion 编码构建、Ozone 下载调试的顺序工作,并记录关键配置。
- 用证据解决问题:结合数据手册、HAL 手册、原理图和测量结果,形成自己的排查记录。
二、从 STM32 硬件控制引入 GPIO:为什么必须学 GPIO?
上一节课我们明确了嵌入式开发的核心认知转变:写代码不再是为了在控制台输出计算结果,而是为了改变芯片引脚的电平状态,从而控制物理世界。 STM32 作为嵌入式设备的 “小大脑”,内部的 CPU、存储、外设等所有核心模块均封装在芯片内部,无法直接与外部的 LED、按键、电机等硬件交互。想要让STM32 的 “想法” 传递给外部硬件,也想STM32 感知外部硬件的状态,就必须有专门的 “桥梁”—— 这个桥梁就是GPIO(General Purpose Input/Output)通用输入输出口 ,这也是我们要花大功夫学习 GPIO 的核心原因。
2.1 GPIO 的核心定位:STM32 的 “手脚”
若将 STM32 比作人的大脑,那么GPIO 就是手和脚,分工明确、缺一不可;没有手和脚,大脑再聪明也无法做事、无法感知世界,STM32 亦是如此: “手”——GPIO 的输出功能:STM32 通过 GPIO 向外部硬件输出高低电平信号,主动控制外部硬件,如让 LED 亮、蜂鸣器响、舵机转到指定角度,均是 GPIO “手” 的工作; “脚”——GPIO 的输入功能:STM32 通过 GPIO 读取外部硬件的电平信号,感知外部环境的变化,如检测按键是否按下、红外传感器是否检测到物体、限位开关是否触发,均是 GPIO “脚” 的工作。 核心结论:没有 GPIO,STM32 就是一个 “孤立的大脑”,无法与外部硬件产生任何交互。后续所有外设开发、硬件控制,均以 GPIO 为基础展开,GPIO 学扎实,后续学习会事半功倍。
2.2 STM32 控制硬件的本质:操作 GPIO 电平
务必牢记:STM32 对外部硬件的控制,本质上是配置 GPIO 工作模式并读写引脚电平。STM32F103 的普通 GPIO 使用 3.3 V 逻辑,高电平约为 3.3 V,低电平约为 0 V;不要向普通引脚直接输入 5 V。LED 的有效电平由硬件接法决定:Blue Pill 的 PC13 LED 通常低电平点亮,而 Stellaris-Nexus 的 PB0、PA7、PA6 RGB LED 依据原理图为高电平点亮。按键检测同样要先确认外部上拉或内部上下拉,再决定按下时应读取高电平还是低电平。
三、GPIO 核心基础理论:从端口分布到工作模式
3.1 GPIO 的基本定义
GPIO(General Purpose Input/Output)即通用输入输出口,是 STM32 中可自由编程的数字引脚,其核心关键词是 “通用”—— 这也是它与其他专用引脚的最大区别。 所谓 “通用”,是指它无需依赖任何专用外设,可通过用户程序直接将其配置为输入模式或输出模式,实现电平的读取或输出;同时,为最大化利用有限的引脚资源,部分 GPIO 引脚还支持外设复用功能,简单来说就是一个引脚配置的时候可以分配不同的几个功能,既可以做通用 IO,也可以做串口、SPI 等外设的专用引脚,后续学习外设时会详细讲解。 好消息:我们基于HAL 库开发,无需手动操作 STM32 的底层寄存器(寄存器开发难度高,新手易出错),仅需通过 STM32CubeMX 做图形化配置,再调用 HAL 库封装好的函数,即可实现 GPIO 的所有功能,大幅降低开发难度。
3.2 STM32F103C8T6 GPIO 端口分布
STM32F103C8T6 为 48 引脚的 LQFP 封装,其 GPIO 分为GPIOA、GPIOB、GPIOC、GPIOD四个独立的端口,每个端口理论上有 16 个引脚,编号从 0 到 15。 但受芯片硬件设计限制,并非所有引脚均可使用,如 GPIOC 仅有 PC13、PC14、PC15 三个引脚可用,GPIOD 仅有 PD0、PD1 两个引脚可用,还得考虑引脚的复用。实操中,主要使用GPIOA、GPIOB、GPIOC三个端口,GPIOD 一般仅作备用,各端口详细信息整理如下表,务必记牢,尤其是实操常用引脚和典型应用,这是后续接线、配置的基础。
两个重要的实操提醒: 开发板上的 GPIO 引脚,均以 「端口 + 引脚号」 的形式标注(如 PA0、PB0、PC13),该标注与芯片引脚一一对应,接线时务必严格按标注操作,接错引脚不仅会导致硬件不工作,还可能烧毁芯片或外设; PC13 是新手的 “练手神器”,它是纯通用 IO,无复用功能,不会与其他外设冲突,且直接连接开发板的板载 LED,无需额外接线,后续的闪烁、流水灯实操,均可先使用该引脚练手。

3.3 GPIO 核心功能分类
为充分利用有限的 GPIO 引脚资源,STM32F103C8T6 的 GPIO 设计了通用功能、复用功能、复用功能重映射三类功能。 入门阶段,只需重点掌握通用功能,这也是本次实操的全部使用功能;复用功能和重映射功能做基础了解即可,后续学习串口、SPI、定时器等外设时再深入拆解,无需钻牛角尖。
3.3.1 通用功能
这是 GPIO 最基础、最常用的功能,也是新手最先接触的功能,核心特征仅有一个:由用户程序直接控制 GPIO 引脚,无需依赖任何片上外设。 简单来说,编写的代码可直接告诉 GPIO 引脚 “输出高电平”、“输出低电平”,也可直接读取 GPIO 引脚的当前电平状态,无任何中间环节,控制逻辑简单:用户程序 → GPIO 寄存器 → GPIO 引脚 → 外部硬件 / 信号 典型应用:LED 控制、按键检测、蜂鸣器基础驱动等纯硬件控制场景,均使用通用功能。
3.3.2 复用功能
设计复用功能的原因:STM32 内部集成了串口、SPI、I2C、定时器等大量外设,这些外设均需要引脚与外部硬件通信,但 STM32 的引脚数量有限,为节省引脚资源,设计了引脚复用—— 让同一个 GPIO 引脚,具备 “通用 IO” 和 “外设专用引脚” 两种身份。 核心特征:当 GPIO 引脚被配置为复用功能时,引脚不再由用户程序直接控制,而是由 STM32 内部的片上外设模块托管,引脚的电平状态由外设的工作状态决定,仅需配置外设的参数,无需直接操作 GPIO 引脚。 控制逻辑:用户程序 → 片上外设 → GPIO 寄存器 → GPIO 引脚 → 外部设备 典型示例:PA9/PA10 两个引脚,通用功能是普通 IO,可用于控制 LED、按键;复用功能是 USART1(串口 1)的发送 / 接收引脚,由串口模块托管,此时这两个引脚用于实现 STM32 和电脑的串口通信,无法再作为通用 IO 使用。
3.3.3 复用功能重映射
复用功能重映射的核心特征:通过配置 STM32 的重映射寄存器,把冲突的外设复用功能,从原引脚移动到芯片的备用 GPIO 引脚,让原本冲突的外设能各自使用独立的引脚,从而实现同时工作。 典型示例:USART1 的默认复用引脚是 PA9/PA10,若 PA9/PA10 被其他外设占用,可通过重映射,将 USART1 的复用功能移动到 PB6/PB7 引脚,这样 USART1 就能正常工作了。 入门小提示:STM32F103C8T6 仅支持部分重映射,并非所有外设的复用功能都能重映射;且入门阶段基本不会遇到引脚冲突问题,因此该功能仅做了解,无需深入研究,后续遇到具体问题再学习即可。

3.4 GPIO 的 8 种工作模式
通过 STM32CubeMX 配置 GPIO 端口配置寄存器,可将每个 GPIO 引脚独立配置为 8 种工作模式(每个引脚的模式可不同,互不影响),这为开发提供了极大的灵活性。 8 种模式分为 输入模式和输出模式两大类,不同模式对应不同的硬件特性和应用场景。

3.4.1 输入模式:核心用于读取外部电信号
输入模式的核心功能,是让 STM32 通过 GPIO 引脚感知外部硬件的电平状态,如检测按键、读取传感器信号,均需将 GPIO 配置为输入模式。 4 种输入模式的核心区别,在于引脚内部是否接入上拉 / 下拉电阻,这个电阻直接决定了引脚悬空时的默认电平,也是解决 “电平不确定” 问题的关键,务必理解清楚。
| 模式名称 | 核心性质 | 硬件特征 | 核心特点 | 典型应用场景 |
|---|---|---|---|---|
| 上拉输入 | 数字输入 | 内部集成上拉电阻(相当于接了一根隐形的线到 3.3V) | 悬空时默认高电平,外部接低电平时,引脚电平被拉低,读取为低电平 | 按键检测、低电平触发的传感器检测(红外、限位开关) |
| 下拉输入 | 数字输入 | 内部集成下拉电阻(相当于接了一根隐形的线到 GND) | 悬空时默认低电平,外部接高电平时,引脚电平被拉高,读取为高电平 | 高电平触发的传感器检测、特定低电平默认的场景 |
| 浮空输入 | 数字输入 | 无内部上拉 / 下拉电阻 | 悬空时电平不确定(受外界电磁干扰,一会高一会低),只能读取明确的高低电平 | 数字传感器信号读取、其他 MCU 的 IO 信号输入 |
| 模拟输入 | 模拟输入 | GPIO 数字功能失效,引脚直接接入 ADC 模块 | 无法读取数字电平,只能采集连续的模拟电压信号(0~3.3V) | 温湿度传感器、光敏电阻、电位器等模拟传感器信号采集 |
为什么需要上拉 / 下拉电阻?
若引脚悬空(既不接 3.3V,也不接 GND,也不外接硬件),无上拉 / 下拉电阻的话,引脚电平会受外界电磁干扰,忽高忽低,程序会读取到错误信号(如按键未按,程序却判定为按下)。
而上拉电阻,相当于给引脚接了一根隐形的线到 3.3V,因此引脚悬空时电平默认为高;当按键按下时,引脚被接到 GND,电平被拉低为低电平,程序就能清晰识别出 “按键按下了”。这也是按键检测优先使用上拉输入模式的原因,新手使用该模式基本不会出问题。

3.4.2 输出模式:核心用于控制外部硬件
输出模式的核心功能,是让 STM32 通过 GPIO 引脚向外部硬件输出高低电平信号,如控制 LED 亮灭、驱动蜂鸣器、控制舵机,均需将 GPIO 配置为输出模式。
4 种输出模式分为通用输出和复用输出,核心区别在于谁来控制引脚(控制主体):通用输出由用户程序控制,复用输出由 STM32 内部的片上外设控制;而通用输出的推挽、开漏两种模式,核心区别在于引脚内部的驱动结构,这直接决定了引脚的驱动能力和电平输出特性。
| 模式名称 | 核心性质 | 控制主体 | 硬件驱动结构 | 核心特点 | 典型应用场景 |
|---|---|---|---|---|---|
| 推挽输出 | 数字输出 | 用户程序 | 内部集成 P-MOS+N-MOS 双管驱动(两个开关,一个管高电平,一个管低电平) | 驱动能力强,可直接输出稳定的高 / 低电平(高 = 3.3V,低 = 0V),能直接带动小功率外设 | LED、蜂鸣器、舵机基础控制,所有基础硬件控制 |
| 开漏输出 | 数字输出 | 用户程序 | 内部仅集成 N-MOS 管(只有一个控制低电平的开关) | 低电平稳定(0V),高电平为高阻态(悬空),需外接上拉电阻才能输出真正的高电平,支持 “线与” 功能 | I2C/CAN 总线通信、多引脚电平联动 |
| 复用推挽输出 | 数字输出 | 片上外设 | 推挽驱动结构,由外设托管 | 外设控制的电平输出,驱动能力强,不用用户程序干预 | 串口 Tx 引脚、定时器 PWM 输出、SPI 通信 |
| 复用开漏输出 | 数字输出 | 片上外设 | 开漏驱动结构,由外设托管 | 外设控制的电平输出,需外接上拉电阻 | I2C/CAN 总线的外设复用通信 |
核心硬件知识讲解:
推挽输出是入门阶段最常用、最推荐的输出模式,务必吃透其原理。其内部有两个 MOS 管,如同两个开关,一个负责输出高电平,一个负责输出低电平,两个开关交替导通,能输出足够的驱动电流(虽电流不大,但足够带动 LED、蜂鸣器等小功率外设)。 简单来说,推挽输出能直接输出稳定的高、低电平,无需额外外接任何零件,新手直接使用即可;我们控制 LED 使用的就是该模式,后续驱动蜂鸣器、舵机也会使用。 而开漏输出,内部仅有一个控制低电平的 MOS 管,能输出稳定的低电平,但想要输出高电平,必须外接上拉电阻,否则为悬空的高阻态,外部硬件无法识别高电平;该模式主要用于 I2C、CAN 等总线通信场景,新手阶段基本无需使用。


3.5 GPIO 核心操作函数
我们全程基于STM32 HAL 库开发,最大的好处是:无需手动操作底层寄存器,直接调用 HAL 库封装好的 GPIO 专用函数,即可实现电平的读取、输出、翻转,简单高效。 所有和 GPIO 操作有关函数均集成在stm32f1xx_hal_gpio.h头文件中,该文件无需手动编写,STM32CubeMX 会自动生成,仅需在代码中直接调用即可。本次实操仅需掌握4个核心函数,这是基础中的基础,必须熟记;且 CLion 有强大的智能代码补全功能,输入函数前几个字符(如 HAL_GPIO_T),CLion 会自动提示后续函数名,你也无需死记硬背所有字符,大幅提升编码效率。 下文将讲解每个函数的函数原型、参数说明、调用示例及使用注意点,结合实操场景(控制 LED、检测按键),做到一看就懂、一用就会。
极其重要的规则:
其实第一节课也已经讲过,所有的自定义代码,必须写在 STM32CubeMX 生成的/* USER CODE BEGIN ... /和/ USER CODE END ... */注释块之间!若不写在注释块里,后续在 CubeMX 中修改配置并重新生成代码时,编写的代码会被直接删除,务必注意!
3.5.1 电平输出函数:HAL_GPIO_WritePin ()
函数功能:手动设置指定 GPIO 引脚输出高电平或低电平,精准控制引脚的电平状态;适用于 LED 亮灭、蜂鸣器开关、舵机复位等需要精准控制电平的场景,是最基础的输出函数。
函数原型:
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);参数说明(参数必须和 CubeMX 生成的函数原型一致,否则会出错):
GPIOx:GPIO 端口,如 GPIOA、GPIOB、GPIOC,必须与 CubeMX 中配置的端口一致;
GPIO_Pin:GPIO 引脚,如 GPIO_PIN_0、GPIO_PIN_13,必须与 CubeMX 中配置的引脚号一致;
PinState:电平状态,仅两个选择:GPIO_PIN_SET(输出高电平)、GPIO_PIN_RESET(输出低电平)。
使用注意点:不同开发板的 LED 有效电平可能不同。Blue Pill 的 PC13 LED 通常低电平点亮;Stellaris-Nexus 的 RGB LED 根据原理图为高电平点亮。必须先看原理图,再决定使用 GPIO_PIN_SET 还是 GPIO_PIN_RESET。
调用示例:设置 Stellaris-Nexus 的 PB0 引脚,高电平点亮红色 LED,低电平熄灭红色 LED。
// 点亮PB0红色LED
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
// 熄灭PB0红色LED
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);3.5.2 电平翻转函数:HAL_GPIO_TogglePin ()
函数功能:自动翻转指定 GPIO 引脚的电平状态(高→低、低→高),无需手动设置电平;适用于 LED 闪烁、流水灯等需要电平交替变化的场景,是上一节课点亮 LED 的核心函数,实用性极强。
函数原型:
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);参数说明:
GPIOx:GPIO 端口,如 GPIOB、GPIOC;
GPIO_Pin:GPIO 引脚,如 GPIO_PIN_0、GPIO_PIN_13。
使用注意点:该函数的翻转是 “自动的”,无论引脚当前为何种电平,调用一次就会改变一次;结合 HAL_Delay () 延时函数,可轻松实现 LED 闪烁。
调用示例:翻转 PC13 引脚电平(实现板载红色 LED 闪烁)
// 翻转PC13电平,板载LED亮灭自动切换
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);3.5.3 电平读取函数:HAL_GPIO_ReadPin ()
函数功能:读取指定 GPIO 引脚的当前电平状态,函数会返回一个值表示引脚的电平状态;适用于按键检测、传感器信号读取等输入模式场景,是检测外部硬件状态的核心函数。
函数原型:
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);参数说明:
GPIOx:GPIO 端口,如 GPIOA(按键接在 GPIOA);
GPIO_Pin:GPIO 引脚,如 GPIO_PIN_0、GPIO_PIN_1(两个按键)。
返回值:仅两个结果,与 WritePin 的电平状态一致:GPIO_PIN_SET(读取到高电平)、GPIO_PIN_RESET(读取到低电平)。
使用注意点:按键为上拉输入模式,因此按键按下时读取到低电平(GPIO_PIN_RESET),松开时读取到高电平(GPIO_PIN_SET),程序根据返回值判断按键状态。
调用示例:读取 PA0 引脚电平(检测按键 1 是否按下)
// 读取PA0电平,若为低电平,则表示按键1按下(上拉输入模式)
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_RESET)
{
// 按键1按下,执行对应操作,比如翻转PC13电平,让LED闪烁
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
// 延时消抖,避免按键抖动导致多次触发,后续会讲
HAL_Delay(20);
}3.5.4 毫秒延时函数:HAL_Delay ()
函数功能:实现毫秒级的精准延时,让程序暂停指定时间后再继续执行;适用于控制 LED 闪烁频率、按键消抖、外设驱动时序等场景,是嵌入式开发中最常用的延时函数,也是上一节课点亮 LED 的核心辅助函数。
函数原型:
void HAL_Delay(uint32_t Delay);参数说明:
Delay:延时时间,单位是毫秒(ms),如 500 表示延时 500 毫秒(0.5 秒),1000 表示延时 1 秒,20 表示延时 20 毫秒。
使用注意点:该函数的延时是 “精准的”,基本能实现预期的延时效果,新手阶段使用该函数即可;后续若需要更精准的延时,会学习定时器,现阶段无需考虑。
调用示例:延时 500ms,控制 LED 闪烁频率(亮灭各 500ms)
while(1)
{ HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
HAL_Delay(500); // 延时500ms
}HAL 库函数命名小技巧:
HAL 库的函数命名有固定规则,均以HAL_开头,随后是模块名(如 GPIO、UART、ADC),最后是功能名(如 WritePin、ReadPin、TogglePin)。掌握该规则,后续学习其他外设的函数时(如串口的 HAL_UART_Transmit ()),可快速识别为 “HAL 库 - 串口模块 - 发送函数”,大幅提升学习效率。
四、本节小结
本节课我们吃透了 STM32 单片机和 GPIO 的基础理论,核心重点如下:
看懂 STM32F103C8T6 的型号后缀和核心参数,明确其为课程核心开发芯片;
理解 GPIO 的核心定位 ——STM32 的 “手脚”,是控制外部硬件的唯一桥梁;
学习GPIO的八个核心实操模式,理解原理,会配置;
熟记 4 个 HAL 库核心函数:HAL_GPIO_WritePin ()、HAL_GPIO_TogglePin ()、HAL_GPIO_ReadPin ()、HAL_Delay (),能熟练调用并应用于实操。
这部分内容虽为理论,但均是后续实操的基础,务必理解清楚,而非死记硬背。下一节课我们将把这些理论落地,点亮led灯,按键控制LED,真正掌握 GPIO 的输入和输出功能,体会嵌入式开发的乐趣。