代码如下 :
#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输出模式
GPIO端口模式寄存器 (GPIOx_MODER) :
MODERy[1:0]:
这些位通过软件写入,用于配置 I/O 方向模式。
00:输入(复位状态)
01:通用输出模式
10:复用功能模式
11:模拟模式
GPIOB->MODER&=~(3<<(9*2))
1)十进制 3 为二进制的 11,即 0 和 1 位都为1(MODER0=11)
2)左移 9*2 位即为 18、19位(MODER9)
3)"~" 给移位到18、19位的11取反,即MODER9=00
4)GPIOB->MODER 端口B模式寄存器与MODER9=00进行与运算
GPIOB->MODER|=0<<9*2
同上,0 左移 2*9 位,18、19位置0.
总的来说:
GPIOB 的 MODER9 设置为00,即 PB9 = 00,此时PB9为输入模式
同理:
GPIOB->MODER&=~(3<<(9*2))
GPIOB->MODER|=1<<9*2