zyftank 发表于 2025-7-27 21:23

关于GD32F407 GPIO寄存器的思考

本帖最后由 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 寄存器决定
页: [1]
查看完整版本: 关于GD32F407 GPIO寄存器的思考