STM32之GPIO
#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输出模式

这是32位的寄存器,MODERy【2y:2y+1】是可以通过软件写入来设置的,同样的其他寄存器也可以,y=0..15刚好对应了每一组IO的0-15个IO,刚好可以控制对应的IO,这里是对PB9进行软件写操作,GPIOB->MODER&=~(3<<(9*2));因为10进制的3是2进制的0011,一定是从最低位的1开始算整体左移9*2位,因此对MODER9(即18、19这两位)写入11然后取反,此时MODER9=00,然后再与MODER相与,0和任何数相与都为0,,其实就是让MODER9=00,也就是GPIOB->MODER|=0<<9*2是对MODER9进行软件写入,手册也写了设置成00模式就是(复位状态的)输入,然而GPIOB->MODER&=~(3<<(9*2));是MODER9=00,GPIOB->MODER|=1<<9*2就是MODER9=00+01=01,对MODER9进行软件写入01,是通用输出模式,因此可以更好的理解了寄存器的操作。

注意:y=0..15

浙公网安备 33010602011771号