对IIC实例中的SDA_IN() 和SDA_OUT()寄存器模式配置内容的理解

代码如下 :

#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

GPIOB 的 MODER9 设置为01,即 PB9 = 01,此时PB9为输出模式

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值