04-I2C-铁头山羊STM32标准库新版笔记

一、基本电路结构
image

image

image

二、通信协议
image

image

image

image

image

三、I2C模块的使用方法
image

image

image

image

image

image

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的总开关
}

四、写数据
image

image

五、读数据

六、软I2C

七、封装常用功能

八、OLED显示器

posted @ 2025-10-22 15:27  有点闲  阅读(68)  评论(0)    收藏  举报