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输出模式
不是右移3位
前部分GPIOB->MODER&=~(3<<(9*2)); 是将十进制的3(二进制是11)左移(9*2)个位,也就是将16,17位置置为11,然后取反变为00,再和GPIOB->MODER与运算,此时GPIOB->MODER的16,17位变为00。第一句也就是将GPIOB->MODER的16,17位置0. 后部分GPIOB->MODER|=0<<9*2和GPIOB->MODER|=1<<9*2也就是根据参考手册的输入输出给这两个位置赋值,过程和上面是一样的。 应该就是这样吧,,我也是初学,,
3 << 2,则是将数字3左移2位
罪过啊,移位运算符的符、规则没有记清楚,所以就蒙蔽了,在这里记一笔,以后忘记了过来翻翻看看。