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/ 部分信息可能已经过时
相关文章 智能推荐
