GPIO使用中BSRR寄存器,设置同一个IO口高低电平,由于在不同的位,需要先将另一个位清除再设置吗?还是自动替换状态了?

2019-07-20 04:00发布

GPIO使用中BSRR寄存器,设置同一个IO口高低电平,由于在不同的位,需要先将另一个位清除再设置吗?还是自动替换状态了?
比如 BSRR使用 BSRR使用 如果先写第一句,设为1,在写第二句设为0的话,需要先将上面那一句的状态清除吗?还是不用操作,直接第二句的时候就状态自动替换了?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
kvdong
1楼-- · 2019-07-20 08:51
你可以这样理解,BSRR里面的位相当于一个个可自动弹起的“按键”,写“1”的时候相当于按键按下,完成功能后“自动”“弹起”。
也就是说你的例子里,GPIOA->BSRR |= 1<<1;这条指令执行完以后,BSRR的第1位自动又变为0了(BSRR中写0没有任何变化)。
cjsyrzy
2楼-- · 2019-07-20 11:38
 精彩回答 2  元偷偷看……
cjsyrzy
3楼-- · 2019-07-20 16:02
本帖最后由 cjsyrzy 于 2019-1-25 10:55 编辑

可以参考一下库函数的写法,还有一个寄存器BRR
竹叶青123
4楼-- · 2019-07-20 16:50
cjsyrzy 发表于 2019-1-25 10:50
看参考手册,BSRR寄存器最终目的是改变ODR

Bits 31:16 BRy: Port x Reset bit y (y= 0 .. 15)

信谢谢了,这个意思我明白,只是想请教下,设置高电平1的那个位还在,在设置低电平0这个位也在,相当于两个地方都设置了?是我理解错了,不是只设置一个位,是设置整个寄存器,全部位都更新了。
cjsyrzy
5楼-- · 2019-07-20 20:14
 精彩回答 2  元偷偷看……
竹叶青123
6楼-- · 2019-07-20 23:06
cjsyrzy 发表于 2019-1-25 13:28
因为ODR只能以字节的形式写入,每次写入,一个端口上的16个引脚电平都会更新,全部更新很多情况下不方便 ...

按您说的这个,上面的例子,第一位设置1,A1输出高电平,接下来第十七位设置1,A1输出低电平。在第十七位设置1的时候,第一位仍然是1,我最开始疑惑的地方就在这。

一周热门 更多>