上一篇帖子我们了解了一下ESP32运行多任务的操作以及现象,其实也就是一个实时操作系统。那么,这篇帖子我们就结合“LM75a”温度传感器来学习一下ESP32的IIC总线吧。
首先我们通过esp32_technical_referance发现,esp32的I2C总线具有以下特性
• 支持主机模式以及从机模式
• 支持多主机多从机通信
• 支持标准模式(100 kbit/s)
• 支持快速模式(400 kbit/s)
• 支持7-bit 以及10-bit 寻址
• 支持关闭SCL 时钟实现连续数据传输
• 支持可编程数字噪声滤波功能
ESP32的I2C控制器可以工作于Master 模式或者Slave 模式,我们这里只以Master模式为例。
上图为ESP32 I2C Master模式的基本架构,包含了32X8 Bit的RAM,16 个命令寄存器(cmd0 ~ cmd15) 以及一个CMD_Controller,2个总线控制器,2个总线滤波器以及一个数据移位寄存器。
看起来挺复杂的样子,其实实际操作起来,只有命令寄存器跟我们直接接触得最多吧,个人感觉,嗯。
具体跟寄存器相关的就介绍到这里,感兴趣的朋友可以自行查看esp32_technical_referance,那么接下来就该谈怎么操作以及实验了。
首先,调用库函数,初始化I2C总线(类似于stm32那样)
这个初始化结构体看起来也挺简单
初始化模式 :Master
IO口引脚 :ESP32具有两个I2C,分别映射到的引脚为18 19 25 26。我们这里选择I2C0,也就是I2C_NUM_0,对应18 19号引脚。
总线上拉使能 :enable
总线速度 :100K
调用初始化i2c_param_config()函数把初始化好的结构体参数传回去,这里特别要注意的是第一个参数选择的是I2C0还是选择I2C1,前者对应I2C_NUM_0,后者对应I2C_NUM_0。
然后调用i2c_driver_install ()安装I2C驱动。
初始化完成之后开始写I2C的读写函数。在写这两个函数之前,先看看两幅图
<
ESP32学习笔记(四)之I2C总线
最新推荐文章于 2025-07-17 02:07:37 发布