关于GD32F407 GPIO寄存器的思考

[复制链接]
 楼主| zyftank 发表于 2025-7-27 21:23 | 显示全部楼层 |阅读模式
本帖最后由 zyftank 于 2025-7-28 06:38 编辑

当我们对GPIO进行置位操作时,对应的库函数是对BOP寄存器进行了赋值,翻看用户手册里写到BOP对应的PIN位置1时,会将相对应的OCTL寄存器的PIN位置1,拉高PIN电平。

对GPIO进行位清除操作的时候,是对BC寄存器CR对应的PIN位置置1,对应的PIN位置1时,会将OCTL寄存器的位清除,拉低PIN电平。

每个操作单个逻辑在理解上没问题,但是当我对同一个PIN脚先进行置位操作,随即进行清除操作,理论上这个PIN脚对应的BOP寄存器和BC寄存器的值都会是1,那么OCTL寄存器将是置位还是清除?

实验时,对PIN脚先拉高后拉低,操作结果是没问题的。由于在读取BOP寄存器的数值并通过串口打印,好像数值跟预期不一致,不敢确定是读取了正确的BOP寄存器的数值。


大家有没有更深刻的理解,欢迎留言。
 楼主| zyftank 发表于 2025-7-27 21:27 | 显示全部楼层
如果OCTL捕捉的是BOP和BC寄存器位的上升沿信号,那么整个流程在逻辑上我就能想通了。
ShimmeringDawn 发表于 2025-7-28 13:34 | 显示全部楼层
我觉得肯定是哪里出了问题
 楼主| zyftank 发表于 2025-7-28 14:21 | 显示全部楼层
ShimmeringDawn 发表于 2025-7-28 13:34
我觉得肯定是哪里出了问题

怎么会有这种想法呢?
mailshichao 发表于 2025-7-28 18:54 | 显示全部楼层
ShimmeringDawn 发表于 2025-7-28 13:34
我觉得肯定是哪里出了问题

我觉得你说有道理
sdCAD 发表于 2025-8-5 15:09 | 显示全部楼层
在读取BOP寄存器之前,清除操作已经完成。如果清除操作尚未完成,BOP寄存器可能仍然显示之前的置位状态。
jtracy3 发表于 2025-8-7 09:03 | 显示全部楼层
OCTL寄存器              
macpherson 发表于 2025-8-7 12:56 | 显示全部楼层
需要检查某个引脚的输出状态,可以直接读取对应的OCTL寄存器的值。
nomomy 发表于 2025-8-7 13:38 | 显示全部楼层
BOP寄存器用于设置或复位GPIO引脚的输出状态。
dspmana 发表于 2025-8-7 15:08 | 显示全部楼层
BOP 和 BC 寄存器是 “一次性触发” 机制,写入的1会被硬件自动清零,不会保留
zerorobert 发表于 2025-8-7 16:33 | 显示全部楼层
OCTL寄存器反映了GPIO引脚的实际输出状态。
 楼主| zyftank 发表于 2025-8-8 07:12 | 显示全部楼层
dspmana 发表于 2025-8-7 15:08
BOP 和 BC 寄存器是 “一次性触发” 机制,写入的1会被硬件自动清零,不会保留 ...

官方哪个文件里有介绍这个机制的?
kmzuaz 发表于 2025-8-8 10:25 | 显示全部楼层
与其硬件自动清零的特性一致              
saservice 发表于 2025-8-8 11:54 | 显示全部楼层
两个寄存器的作用是 “触发操作”
51xlf 发表于 2025-8-8 12:35 | 显示全部楼层
对某个引脚先进行置位操作,然后立即进行复位操作,最终的结果应该是该引脚的输出状态为低电平
yeates333 发表于 2025-8-8 13:56 | 显示全部楼层
读取的是正确的BOP寄存器地址              
louliana 发表于 2025-8-8 17:06 | 显示全部楼层
引脚的实际输出电平由 OCTL 寄存器决定
51xlf 发表于 2025-8-10 20:42 | 显示全部楼层
BOP(位设置寄存器)和 BC(位清除寄存器)的硬件行为特性是理解这一问题的核心。
belindagraham 发表于 2025-8-10 21:15 | 显示全部楼层
BOP 和 BC 寄存器仅记录 “待执行的操作”,操作完成后自动复位,不会保留写入的1。
jkl21 发表于 2025-8-10 22:31 | 显示全部楼层
两个寄存器的对应位会在操作完成后立即清零,不会同时为 1。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

26

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部