正点原子中 IIC 例程中SDA_IN()和SDA_OUT()函数理解

本文探讨了在正点原子IIC例程中,SDA_IN()和SDA_OUT()函数的实现原理。通过分析IO口MODER寄存器的配置,解释了如何利用这两个函数设置IO口为输入或输出模式。在代码示例中,详细解释了函数内部的位操作过程,并指出在移植代码到不同IO口时需要的修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在学习正点原子IIC例程时遇到SDA_IN()和SDA_OUT()两个端口模式配置函数,代码如下:

//IO口方向设置
#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输出模式

        首先,我们分析一下IO口MODER寄存器的作用是配置IO方向模式,原子哥配置的是PB9端口,下面图中可以看出在寄存器的第18-19位,所以只需要在第18-19位进行置00或者01来达到相关的配置;

        SDA_IN()函数中代码 GPIOB->MODER&=~(3<<(9*2))中,3可能为默认的int型数据,占4个字节32位,其二进制表示方法为0..0011(总共32位),先将3左移18位,此操作后第18-19位置1,其余位为0;再取反操作,此操作后第18-19位为0,其余位为1;最后将与MODER寄存器相与,结果MODER寄存器中第18-19位置0,其他位数值不变。第二步操作代码 GPIOB->MODER|=0<<9*2与第一步操作一

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值