关于IIC协议中,SDA_IN()与SDA_OUT()如何配置

大家好,我现在来说明一下关于IIC协议中,SDA_IN()与SDA_OUT()如何配置,大家可以放心食用,因为这是我亲身实践过的,有什么问题可以私信我!!

IIC协议我就不仔细介绍了,大家可以观看其他厉害的博主学习,我们只需要知道它有两根线数据线与时钟线,以及它是怎么通讯的就行了。对于配置SDA_IN()与SDA_OUT()我已经实践出两种方法,第三种方法已经编写完成了,但是还没实践就不分享给大家了。

第一种方法

 使用寄存器移位就可以解决咯代码如下:

#define SDA_IN() {GPIOB->CRH&=0XF0FFFFFF;GPIOB->CRH|=(u32)8<<24;}
#define SDA_OUT() {GPIOB->CRH&=0XF0FFFFFF;GPIOB->CRH|=(u32)3<<24;}

接下来给大家简单解释一下意思,我配置的引脚是PB14,14在寄存器里处于高位所以要用CRH,如果是0-7的引脚则是CRL,至于8和3的意思代表的是二进制的10 与  11,24是怎么算的呢?看前面0xf0fffff中0的位置,从0开始算从左往右算到最后距离多少个的数再×4,8位一字节,占据了4位,其中0xf0fffff的算法是看你的引脚,我这里是14,这一串是8-15的引脚,对应的那个引脚就那个为0。我讲的很简单,具体可以看其他博主的教学,讲的很好我也是在学习的链接如下:

https://blog.csdn.net/weixin_44970820/article/details/130829463

第二种方法

直接暴力执法,代码如下:

void SDA_IN(void)
{   
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE );    
        GPIO_InitStructure.GPIO_Pin        =   GPIO_Pin_14;
        GPIO_InitStructure.GPIO_Mode    =     GPIO_Mode_IN_FLOATING;
        GPIO_InitStructure.GPIO_Speed  =        GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
}
void SDA_OUT(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE );    
        GPIO_InitStructure.GPIO_Pin        =   GPIO_Pin_14;
        GPIO_InitStructure.GPIO_Mode    =     GPIO_Mode_Out_OD;
        GPIO_InitStructure.GPIO_Speed  =        GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
}

第三种方法我就不演示给大家看了,也是操作寄存器但是我还没有实践,有什么问题大家可以评论!!

  • 55
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值