STM32学习笔记——I2C总线(基于铁头山羊)
2026/7/18 3:53:11 网站建设 项目流程

I2C总线是用于多机间通信的一种通信方式,下面是他的原理

i2c总线使用两条线传输数据分别为SCL时钟线与SDA数据线

在使用i2c总线时,必须使用两颗4.7k的上拉电阻拉高两线,同时相关引脚使用开漏输出,从而实现逻辑与

I2C的工作机制可分为四个部分 起始位-寻址-发送/接收数据-停止位

1.起始位:SCL拉高时,SDA拉低,证明传输开始

2.寻址:主机向SDA发送一个地址,若地址正确,从机发送一个ACK代表回应,否则不发送,地址后面跟着一位操作符R/W#,代表要对从机进行的操作

3.发送数据:主机向从机发送数据,每发送一个字节,从机发送一个ack代表接收成功

接收数据:从机向主机发送数据,主机每接受一个字节,都要发送一个ack,不发送就代表要停止接受数据

4.停止位:SCL拉高时,SDA拉高,传输结束

下面来看两个I2C函数

HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)

这两个函数分别为主机向从机发送数据和主机向从机接收数据,他们的参数是一样的

hi2c:填写i2c句柄的指针

DevAddress:填写从机地址

pData:填写要传输数据的指针

Size:要传输数据的大小

Timeout:超时时间

下面是一个利用i2c总线实现点亮oled屏幕的程序

uint8_t command[] = {0x00, 0x8d, 0x14, 0xaf, 0xa5};//定义指令集 HAL_I2C_Master_Transmit(&hi2c1, 0x78, command, sizeof(command) / sizeof(command[0]), HAL_MAX_DELAY);//发送指令 while (1)//防止程序跑飞 { }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询