OpenEdv-开源电子网

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

STM32 探索者GPIO_SetBits和GPIO_ResetBit的理解出问题了

[复制链接]

2

主题

8

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2020-9-3
在线时间
5 小时
发表于 2020-9-3 22:38:13 | 显示全部楼层 |阅读模式
1金钱
有个疑问 在跑马灯实验中
初始化之后
        while(1)
        {
        GPIO_SetBits(GPIOF,GPIO_Pin_9);
        GPIO_SetBits(GPIOF,GPIO_Pin_10);
        delay_ms(500);
        GPIO_ResetBits(GPIOF,GPIO_Pin_9);
        GPIO_ResetBits(GPIOF,GPIO_Pin_10);
        delay_ms(500);
        }


调用GPIO_SetBits后我们是不是对GPIOx_BSRR寄存器的BS9 BS10 置位 这时 相应输出高电平
调用GPIO_ResetBit后我们是不是对GPIOx_BSRR寄存器的BR9 BR10 置位 这时 相应输出低电平
可是这时BS9 BS10为1  BR9 BR10为1
如果同时对 BSx 和 BRx 置位,则 BSx 的优先级更高。
这时就不会输出低电平
我的理解哪里出错了

最佳答案

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

手册说的同时应该只一个uint32 直接赋值这种单指令,你这上下隔了几条指令了,不存在优先级问题了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

808

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3888
金钱
3888
注册时间
2017-3-7
在线时间
1694 小时
发表于 2020-9-3 22:38:14 | 显示全部楼层
手册说的同时应该只一个uint32 直接赋值这种单指令,你这上下隔了几条指令了,不存在优先级问题了
回复

使用道具 举报

12

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
922
金钱
922
注册时间
2018-7-18
在线时间
385 小时
发表于 2020-9-4 16:32:26 | 显示全部楼层
这两个函数操作的不是同一个寄存器
SetBits 操作的是 BSRR 寄存器的低16位
ResetBit 操作的是BRR寄存器

避开了你说的两个位的优先级问题
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2020-9-3
在线时间
5 小时
 楼主| 发表于 2020-9-4 21:40:07 | 显示全部楼层
a5820736 发表于 2020-9-4 16:20
手册说的同时应该只一个uint32 直接赋值这种单指令,你这上下隔了几条指令了,不存在优先级问题了

意思是只要写入1 就会相应的置位
例如BS9原来是1  
我执行BS9=1  还是写入了1 也就是会置位
不管原来BS9是1还是0
我可以这样理解吗?
BR也类似
同时的话才会有优先级的问题
谢谢你的帮助
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2019-7-28
在线时间
2 小时
发表于 2020-9-5 10:22:49 | 显示全部楼层
优先级只是同时都写1时,你这又没有同时写1,不存在优先级的问题
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-15 03:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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