32单片机之IIC

什么是IIC

I²C(Inter-Integrated Circuit)总线是一种广泛使用的串行通信协议,由Philips(现为NXP Semiconductors)在1982年开发。它主要用于短距离通信,特别是在主板或嵌入式系统中连接低速外围设备(如传感器、EEPROM、实时时钟等)与微控制器或微处理器。
有什么用
I²C总线的主要作用是提供一种简单、高效的通信方式,用于连接低速外设与主控芯片。
在STM32平台上实现软件I²C协议并操控MPU6050传感器
先引入整体架构



关键步骤

1.初始化I²C总线:通过GPIO模拟I²C的SDA和SCL信号。
首先引入一些基本概念,GPIO 是微控制器的通用输入输出引脚,可用于模拟 I²C 协议。SDA 是 I²C 的数据线,负责传输数据和地址。SCL 是 I²C 的时钟线,负责同步数据传输。

原因:为了在没有硬件 I²C 外设的情况下,确保微控制器能够正确地与 I²C 设备
代码实现
 

#define IIC_SCL GPIO_Pin_7  // SCL 引脚
#define IIC_SDA GPIO_Pin_6  // SDA 引脚
#define IIC_PORT GPIOB      // GPIO 端口

// 初始化 I²C 引脚
void IIC_Init(void) {
    GPIO_InitTypeDef GPIO_InitStruct;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//启用GPIOB的时钟(用来供电的)

    // 配置 SDA 和 SCL 为开漏输出
    GPIO_InitStruct.GPIO_Pin = IIC_SCL | IIC_SDA;//指定引脚
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD;  // 开漏输出,双线保持高电平
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//设置传输速度
    GPIO_Init(IIC_PORT, &GPIO_InitStruct);//调用函数,应用配置好的参数

    // 上拉电阻由外部电路提供
}

// 设置 SCL 电平
void IIC_SCL_Set(uint8_t level)//参数 {
    if (level)//不为零表示高电平
        GPIO_SetBits(IIC_PORT, IIC_SCL);
    else
        GPIO_ResetBits(IIC_PORT, IIC_SCL);
}

// 设置 SDA 电平
void IIC_SDA_Set(uint8_t level) {
    if (level)
        GPIO_SetBits(IIC_PORT, IIC_SDA);
    else
        GPIO_ResetBits(IIC_PORT, IIC_SDA);
}

// 获取 SDA 的状态
uint8_t IIC_SDA_Read(void) {
    return GP
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值