一、基本电路结构
二、通信协议
三、I2C模块的使用方法
main.c
点击查看代码
#include "stm32f10x.h"void My_I2C_Init(void);int main(void)
{My_I2C_Init();while(1){}
}void My_I2C_Init(void)
{// #1. IO引脚初始化// 对I2C1进行重映射RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);GPIO_PinRemapConfig(GPIO_Remap_I2C1, ENABLE);// 对PB8和PB9进行初始化RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;GPIO_Init(GPIOB, &GPIO_InitStruct);// #2. 初始化I2C1模块RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, ENABLE); // 施加复位信号RCC_APB1PeriphResetCmd(RCC_APB1Periph_I2C1, DISABLE); // 释放复位信号I2C_InitTypeDef I2C_InitStruct;I2C_InitStruct.I2C_ClockSpeed = 400000; //波特率I2C_InitStruct.I2C_Mode = I2C_Mode_I2C; //模式I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2; //快速模式下时钟信号的占空比I2C_Init(I2C1, &I2C_InitStruct);I2C_Cmd(I2C1, ENABLE); // 闭合I2C1的总开关
}
四、写数据
五、读数据
六、软I2C
七、封装常用功能
八、OLED显示器