GPIO中的相关寄存器


对于GPIO具体的工作方式,转载一篇博客。
[转] 【STM32】GPIO工作原理(八种工作方式超详细分析,附电路图).

GPIO中的寄存器

一个端口模式寄存器(GPIOx_MODER)
一个端口输出类型寄存器(GPIOx_OTYPER)
一个端口输出速度寄存器(GPIOx_OSPEEDR)
一个端口上拉下拉寄存器(GPIOx_PUPDR)
一个端口输入数据寄存器(GPIOx_IDR)
一个端口输出数据寄存器(GPIOx_ODR)
一个端口置位/复位寄存器(GPIOx_BSRR)
一个端口配置锁存寄存器(GPIOx_LCKR)
两个复用功能寄存器(低位GPIOx_AFRL& GPIOx_AFRH)

具体配置

1. 端口模式寄存器(GPIOx_MODER)

该寄存器有32位,每2位控制一个IO口
在这里插入图片描述

2.端口输出类型寄存器(GPIOx_OTYPER)

只用到低16位,1位控制一个IO
在这里插入图片描述

3.端口输出速度寄存器 (GPIOx_OSPEEDR)

同理,也是两位配置一个IO
在这里插入图片描述

4. 端口上拉/下拉寄存器 (GPIOx_PUPDR)

同上面一样,不再赘述。
在这里插入图片描述

5. 端口输入数据寄存器 (GPIOx_IDR)

低16位,只读,读取IO状态
在这里插入图片描述

6. 端口输出数据寄存器 (GPIOx_ODR)

低16位,设置1输出高电平,设置2输出低电平
在这里插入图片描述

7. 端口置位/复位寄存器 (GPIOx_BSRR)

高16位,写1复位,低16位,写1置位
在这里插入图片描述

8. 端口配置锁定寄存器 (GPIOx_LCKR)

不太了解
在这里插入图片描述

9. 复用功能低位寄存器 (GPIOx_AFRL)

用于引脚复用,4位控制
AFL0 - AFL7和GPIOx0 - GPIOx7一一对应
在这里插入图片描述

10. 复用功能高位寄存器 (GPIOx_AFRH)

用于引脚复用,4位控制
AFH8 - AFH15和GPIOx8 - GPIOx15一一对应
在这里插入图片描述
IO口的复用功能可以查询 “数据手册”复用表Table9

复用表
在这里插入图片描述
e.g.
GPIOA9、GPIOA10分别对应:
GPIOA->AFR[1] |= 7<<4;
GPIOA->AFR[1] |= 7<<8
7表示AF7,为复用数据,4和8表示复用GPIO的引脚位置

时钟使能

由于截图空间有限,只截取了部分,具体请参考STM32F4xx中文参考手册6.3.12

位0 - 8是使能相关GPIO时钟,GPIOA-GPIOI,置1使能
在这里插入图片描述

小结

本文仅对相关寄存器进行说明,欢迎指正。

### GPIO_RIS 寄存器功能与用法 #### 1. 功能解释 GPIO_RIS (Raw Interrupt Status Register, 原始中断状态寄存器) 的主要作用是提供当前 GPIO 中断的未过滤状态信息。该寄存器中的每一位对应一个 GPIO 引脚,当某个引脚上发生指定类型的事件(如上升沿、下降沿或电平变化),对应的位会被设置为 `1` 表示发生了中断请求[^1]。 需要注意的是,RIS 提供的状态是没有经过任何屏蔽处理的原始数据。这意味着即使某些中断被软件或其他硬件机制禁用了,只要实际产生了中断信号,这些信号仍然会在 RIS 中反映出来。 #### 2. 使用方法 为了读取并判断哪些 GPIO 引脚触发了中断,可以通过以下方式访问 GPIO_RIS: - **读取操作**: 对应于每一个可能作为输入端口使用的 GPIO 都有一个关联的位置存储在其内部结构里;如果某条线路确实存在活动,则相应位置会显示高逻辑值 (`1`)。 以下是基于 C 或汇编语言实现的一个简单例子展示如何利用此特性检测具体哪个管脚引起了异常状况的通知消息传递过程: ```c #include <stdint.h> // 定义寄存器地址偏移量 #define GPIO_BASE_ADDR ((volatile uint32_t *)0x400FF000) #define GPIO_RIS_OFFSET 0x0A0 // Raw interrupt status register offset void check_gpio_interrupt() { volatile uint32_t *ris_reg = GPIO_BASE_ADDR + (GPIO_RIS_OFFSET >> 2); uint32_t ris_value = *ris_reg; if(ris_value & (1 << PIN_NUMBER)) { // 如果特定PIN_NUMBER上的bit为1则表示有中断发生 handle_pin_interrupt(PIN_NUMBER); } } ``` 上述代码片段展示了通过直接内存映射技术获取目标微控制器单元(MCU)中通用I/O外设模块下的raw interrupt status registers的内容,并进一步解析其中的信息以便采取适当的动作响应外部世界的变化情况^。 另外,在实际项目开发过程中还需要注意配合其他几个重要的控制元件一起工作才能达到预期效果,比如前面提到过的用于定义各类行为准则属性参数集以及管理允许范围界限等方面发挥重要作用的关键组件——GPIO_IS、GPIO_IBE GPIO_IEV 等多个专用型态变量表单文件夹目录树形图层关系链路连接起来形成完整的解决方案体系架构设计思路框架模型. 最后提醒一点就是关于清除已经识别出来的那些处于激活待命准备就绪等待执行下一步指令动作序列列表里面的各项任务项之前必须要先调用专门负责此项职责使命担当重任角色定位明确清晰无误地指向唯一确定的目标对象即GPIO_IC(Interrupt Clear Register),只有这样才能确保整个系统的稳定可靠高效运行性能表现始终维持在一个较高的水准之上不断向前发展进步成长壮大成熟完善自我超越极限追求卓越成就非凡梦想成真美好未来无限光明灿烂辉煌前景可期值得期待充满希望活力四溢生机勃勃欣欣向荣蒸蒸日上蓬勃发展繁荣昌盛国泰民安天下太平盛世景象呈现眼前令人振奋鼓舞人心士气高涨斗志昂扬全力以赴拼搏奋斗共创佳绩再创辉煌续写传奇谱写新华章开启新征程踏上新征途迎接新时代创造新奇迹铸就新丰碑留下永恒印记铭刻历史长河之中永不磨灭熠熠生辉闪耀光芒万古流芳千秋传颂!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值