441 字
1 分钟
GPIO(通用输入输出)STM32F103
GPIO(通用输入输出)STM32F103
概述
GPIO 是 MCU 与外部世界交互的最基本接口。每个引脚可以配置为输入、输出、复用功能或模拟模式。
[!NOTE] 关键参考 完整寄存器定义参见 [[RM0008 参考手册]]
寄存器核心块
端口配置寄存器 (CRL/CRH)
GPIOx_CRL:偏移0x00,配置引脚 0-7GPIOx_CRH:偏移0x04,配置引脚 8-15
每个引脚占用 4 位:[CNF1:0 MODE1:0]
- MODE:00=输入,01=输出(最高10MHz),10=输出(2MHz),11=输出(50MHz)
[!tips] 这里的MHz代表压摆率,也就是这个端口电平翻转/变化的快慢,只在需要变化电平时才能体现,可以看作变化曲线的斜率
- CNF:
- 输入模式:00=模拟,01=浮空,10=上拉/下拉,11=保留
- ==输出模式:00=推挽,01=开漏,10=复用推挽,11=复用开漏==
![[Pasted image 20260520161851.png]] ![[Pasted image 20260520161930.png]]
输入/输出数据寄存器 (IDR/ODR)
GPIOx_IDR:偏移0x08,只读,反映引脚电平状态GPIOx_ODR:偏移0x0C,可读写,当引脚为输出时设置电平 ![[Pasted image 20260520162053.png]] ![[Pasted image 20260520162117.png|697]]
位设置/清除寄存器 (BSRR/BRR)
GPIOx_BSRR:偏移0x10,只写- 低 16 位(
BSy):写 1 使对应 ODR 位置位(高电平) - 高 16 位(
BRy):写 1 使对应 ODR 位复位(低电平) - 原子操作!避免读-改-写错误,推荐用于安全代码。 ![[Pasted image 20260520162515.png]]
配置锁定寄存器 (LCKR)
GPIOx_LCKR:偏移0x18,可以冻结引脚配置直到下次复位。- 安全设计中用于防止意外重配置。
典型操作序列
点亮 PC13 LED(寄存器版)
// 1. 开启 GPIOC 时钟(RCC_APB2ENR 位4)*(volatile uint32_t*)0x40021018 |= (1 << 4);
// 2. 配置 PC13 为推挽输出(GPIOx_CRH 高 4 位清空,MODE13=11,CNF13=00)*(volatile uint32_t*)0x40011004 &= ~(0xF << 20); // 清空 PC13 配置位*(volatile uint32_t*)0x40011004 |= (0x3 << 20); // MODE13=11,CNF13=00(推挽)
// 3. 输出低电平点亮(假设 LED 阴极接 PC13,阳极接 VDD)*(volatile uint32_t*)0x40011010 = (1 << 13); // BR13 置位,PC13 输出低 分享
如果这篇文章对你有帮助,欢迎分享给更多人!
GPIO(通用输入输出)STM32F103
https://caoyue.xin/posts/stm32/gpio/ 部分信息可能已经过时
相关文章 智能推荐
1
素数判定算法
算法 从试除法到 Miller-Rabin,ACM 中判定素数的全套武器——试除、筛法、概率判定,以及什么时候该用哪个
2
纯新手入门 Agent 编程(Vibe Coding)指南——从零搭建你的 AI 编程助手
教程 零基础新手如何用 Cherry Studio + DeepSeek 搭建 AI Agent 编程环境,实现 Vibe Coding(氛围编程)——一种面向结果的自然语言编程方式。从 Git 安装到 Agent 配置,完整图文教程。
3
贡献法学习笔记
算法 从史莱姆困难版学到的贡献法——换一个问题,交换求和顺序,是ACM从铜牌迈向银牌的核心思维模式
4
Lenovo Legion Q7CN 风扇控制协议 — 完整逆向记录
硬件 逆向 Lenovo Legion Pro 7 (Gen 10, Q7CN BIOS) 风扇控制协议全过程。从 USBPcap 抓包失败到 WMI 缓冲区破解,最终实现在 Linux 上控制三风扇曲线。含完整协议格式、Windows/Linux 实现代码。
5
ST 表(Sparse Table)
算法 区间最值查询(RMQ)的倍增解法,Sparse Table 原理与模板
