关于STM32的GPIO赋值,谁来帮我解释一下,谢谢。
答案:3 悬赏:20
解决时间 2021-01-30 22:40
- 提问者网友:心如荒岛囚我终老
- 2021-01-29 22:33
关于STM32的GPIO赋值,谁来帮我解释一下,谢谢。
最佳答案
- 二级知识专家网友:想偏头吻你
- 2021-01-29 23:35
因为你写寄存器时,有可能只是操作寄存器中的某一位的值,而其他位不能改变,所以用到了“|”。0x07表示bit0、1、2的值赋1.
追问:temp = GPIOC->ODR;
temp |= 0x00000007;
GPIOC->ODR = temp&(~(leds));
上面这三句话能用下面这句代替吗
GPIOC->ODR |= 0x00000007 & (~(leds));
另外为什么 GPIOC->ODR不能写成 GPIOC.ODR?
追答:首先要明白temp = GPIOC->ODR,
有可能寄存器写( temp | value)和写value是不同的,但如果寄存器的默认值是0的话而且寄存器是第一次被写,那么两者是没区别的。
那三句话当然可以用下面那一个式子代替,但是这样是不好的方式,看起来不舒服。
->和.的用法的细微区别应该要清楚。如果是指针当然要用“ -> ”,而如果是引用结构体当中的某个成员那就得用“ . ”你注意函数形参结构体前是不是“ * ”,那就必须用GPIOC->ODR。
追问:temp = GPIOC->ODR;
temp |= 0x00000007;
GPIOC->ODR = temp&(~(leds));
上面这三句话能用下面这句代替吗
GPIOC->ODR |= 0x00000007 & (~(leds));
另外为什么 GPIOC->ODR不能写成 GPIOC.ODR?
追答:首先要明白temp = GPIOC->ODR,
有可能寄存器写( temp | value)和写value是不同的,但如果寄存器的默认值是0的话而且寄存器是第一次被写,那么两者是没区别的。
那三句话当然可以用下面那一个式子代替,但是这样是不好的方式,看起来不舒服。
->和.的用法的细微区别应该要清楚。如果是指针当然要用“ -> ”,而如果是引用结构体当中的某个成员那就得用“ . ”你注意函数形参结构体前是不是“ * ”,那就必须用GPIOC->ODR。
全部回答
- 1楼网友:woshuo
- 2021-01-30 00:41
可以啊
再看看固件库!讲的很详细的
再看看固件库!讲的很详细的
- 2楼网友:十鸦
- 2021-01-30 00:19
你的程序这么写还麻烦了,就是想让GPIOC的低三位置1嘛,简单:
GPIOC->BSRR=0x00000007;
GPIOC->BSRR=0x00000007;
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯