IIC实例的SDA_In和SDA_Out的代码理解GPIOB->MODER&=~(3<<(9*2));GPIOB->MODER|=0<<9*2;

2019-07-20 08:06发布

各位前辈大家好:

IIC通讯实验里面的例程:

#define SDA_IN()  {GPIOB->MODER&=~(3<<(9*2));GPIOB->MODER|=0<<9*2;}        //PB9输入模式
#define SDA_OUT() {GPIOB->MODER&=~(3<<(9*2));GPIOB->MODER|=1<<9*2;} //PB9输出模式


第一句 GPIOB->MODER&=~(3<<(9*2)) 该如何理解?PB9的MODER寄存器低位右移3位取反相与,即是保留原来的值(貌似也把PB10的MODER寄存器也连带设置了下?为啥要这样呢),后面的PB9输出模式相或配置成输出能理解,但是PB9输入模式也相或,假如原来是01输出,相或之后岂不还是01输出模式,PB9输入模式是否应该为 GPIOB->MODER&=0<<9*2; ,望前辈指教,多谢。如果幼稚之处,还请谅解。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
23条回答
Allen.W
1楼-- · 2019-07-20 17:21
Fighting_Tao 发表于 2016-5-25 10:37
不是右移3位
前部分GPIOB->MODER&=~(3MODER的16,17位变为00。第一句也就是将GPIOB->MODER的16,17位置0.
...

应该是18/19位吧?
uouo00
2楼-- · 2019-07-20 17:58
Allen.W 发表于 2016-12-13 16:18
应该是18/19位吧?

是的
我要学习嵌入式
3楼-- · 2019-07-20 20:47
 精彩回答 2  元偷偷看……
诸葛景云
4楼-- · 2019-07-21 01:05
我要学习嵌入式 发表于 2017-1-18 10:15
位段的赋值,就是给一个字节某几位赋值,其余几位不改变

长知识了
行的云
5楼-- · 2019-07-21 05:32
 精彩回答 2  元偷偷看……
Ilena
6楼-- · 2019-07-21 07:40
在IIC试验中,读取压力传感器ABPLANT006KG2A3压力值显示到LCD上,结果压力示数一直显示FFFF,请问有人知道这是什么原因吗?有可能是硬件问题吗?

一周热门 更多>