野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5177|回复: 1

GPIO 端口置位/复位寄存器会自动清0吗

[复制链接]
发表于 2022-11-11 19:11:58 | 显示全部楼层 |阅读模式
我是一个新手,看了野火写的GPIO端口置位和复位函数。我把BSRR寄存器BS9和BR9轮流写1,对应9脚LED是亮灭交替的。但又看了F407的中文参考手册,如果把BSRRL和BSRRH对应的第9位写1了后续如果数据不变的话那么寄存器BS9和BR9应该都是1(因为在主函数里我一直没有对寄存器的第9位清0)。因为BS9优先级比BR9要高,9脚应该是高电平,对应LED灭,但实际还是闪烁的。说明寄存器的数据没有保存,实际KEIL硬件仿真我把把BS9和BR9设置高电平对应ODR寄存器的第9位高低电平和LED亮灭,但是设置后BSRR寄存器的数又清0了。难道说这个端口置位/复位寄存器会自动清0吗?有大佬知道吗?
QQ截图20221111184745.png
QQ截图20221111184904.png
QQ截图20221111184933.png
QQ截图20221111184949.png
回复

使用道具 举报

发表于 2022-11-24 15:55:03 | 显示全部楼层
1.BSRR确实是会在你写入后自动清零的,至于写入后过多久才自动清零,我觉得可以理解成立刻清零
2.至于“BS9比BR9优先级高”说的是:“【在同一次寄存器写操作中】,如果同时把BS9位和BR9位都置1了,那么BS9位会起作用”,而你程序中先调用GPIO_SETBits(),再调用GPIO_ResetBits(),虽然这两个函数都是写BSRR寄存器,但是是先后两次操作,第一次GPIO_SETBits()写BSRR,写了之后立刻起作用,对应引脚输出高电平,随后BSRR立刻被清零了,所以在执行GPIO_ResetBits()前一刻,BSRR依然是值全0的状态
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-20 13:56 , Processed in 0.030242 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表