OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3742|回复: 7

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

[复制链接]

5

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2016-7-25
在线时间
29 小时
发表于 2019-1-25 10:25:20 | 显示全部楼层 |阅读模式
2金钱
GPIO使用中BSRR寄存器,设置同一个IO口高低电平,由于在不同的位,需要先将另一个位清除再设置吗?还是自动替换状态了?
比如

BSRR使用

BSRR使用
如果先写第一句,设为1,在写第二句设为0的话,需要先将上面那一句的状态清除吗?还是不用操作,直接第二句的时候就状态自动替换了?

最佳答案

查看完整内容[请看2#楼]

你可以这样理解,BSRR里面的位相当于一个个可自动弹起的“按键”,写“1”的时候相当于按键按下,完成功能后“自动”“弹起”。 也就是说你的例子里,GPIOA->BSRR |= 1
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

168

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2018-5-14
在线时间
69 小时
发表于 2019-1-25 10:25:21 | 显示全部楼层
你可以这样理解,BSRR里面的位相当于一个个可自动弹起的“按键”,写“1”的时候相当于按键按下,完成功能后“自动”“弹起”。
也就是说你的例子里,GPIOA->BSRR |= 1<<1;这条指令执行完以后,BSRR的第1位自动又变为0了(BSRR中写0没有任何变化)。
回复

使用道具 举报

1

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2017-11-14
在线时间
34 小时
发表于 2019-1-25 10:50:04 | 显示全部楼层
本帖最后由 cjsyrzy 于 2019-1-25 10:53 编辑

看参考手册,BSRR寄存器最终目的是改变ODR

Bits 31:16 BRy: Port x Reset bit y (y= 0 .. 15)
These bits are write-only and can be accessed in Word mode only.
0: No action on the corresponding ODRx bit
1: Reset the corresponding ODRx bit*******************************************
Note: If both BSx and BRx are set, BSx has priority.*******************************************
Bits 15:0 BSy: Port x Set bit y (y= 0 .. 15)
These bits are write-only and can be accessed in Word mode only.
0: No action on the corresponding ODRx bit
1: Set the corresponding ODRx bit*******************************************
回复

使用道具 举报

1

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2017-11-14
在线时间
34 小时
发表于 2019-1-25 10:51:14 | 显示全部楼层
本帖最后由 cjsyrzy 于 2019-1-25 10:55 编辑

可以参考一下库函数的写法,还有一个寄存器BRR
回复

使用道具 举报

5

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2016-7-25
在线时间
29 小时
 楼主| 发表于 2019-1-25 12:10:16 | 显示全部楼层
cjsyrzy 发表于 2019-1-25 10:50
看参考手册,BSRR寄存器最终目的是改变ODR

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

信谢谢了,这个意思我明白,只是想请教下,设置高电平1的那个位还在,在设置低电平0这个位也在,相当于两个地方都设置了?是我理解错了,不是只设置一个位,是设置整个寄存器,全部位都更新了。
回复

使用道具 举报

1

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2017-11-14
在线时间
34 小时
发表于 2019-1-25 13:28:29 | 显示全部楼层
竹叶青123 发表于 2019-1-25 12:10
信谢谢了,这个意思我明白,只是想请教下,设置高电平1的那个位还在,在设置低电平0这个位也在,相当于两 ...

因为ODR只能以字节的形式写入,每次写入,一个端口上的16个引脚电平都会更新,全部更新很多情况下不方便,所以有了BSRR,可以每次只更新单独一个或多个引脚的电平。
BSRR寄存器 只能写 不能读,写一下更新一下对应的ODR位
回复

使用道具 举报

5

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2016-7-25
在线时间
29 小时
 楼主| 发表于 2019-1-25 14:17:31 | 显示全部楼层
cjsyrzy 发表于 2019-1-25 13:28
因为ODR只能以字节的形式写入,每次写入,一个端口上的16个引脚电平都会更新,全部更新很多情况下不方便 ...

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

使用道具 举报

5

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2016-7-25
在线时间
29 小时
 楼主| 发表于 2019-1-25 16:26:21 | 显示全部楼层
kvdong 发表于 2019-1-25 14:48
你可以这样理解,BSRR里面的位相当于一个个可自动弹起的“按键”,写“1”的时候相当于按键按下,完成功能 ...

谢谢,这样理解可以的,“自动弹起”就可以解释了
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 14:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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