杨桃32学习笔记,本文图片文字皆为转述
I2C硬件电路原理图
I2C要点
I2C总线是板级总线,连接线一般不超2米。
电路连接:两线总线连接,1~10K上拉电阻,复用开漏模式。
器件地址:每个器件都有唯一地址(7位16进制数),最多127个器件地址,新版I2C规范中最大器件地址数量可达1023个。
所有设备与单片机需要共地。
杨桃电子开发版中,将oled屏幕的从设备地址定为0x78,0x9e是温度传感器的设备地址。
I2C 简介
添加相应的文件并添加进工程文件
在工程文件夹LIB下添加stm32f10x_i2c.c
在工程文件夹Basic下添加i2c.c
在工程文件夹Hardware文件夹下添加lm75a.c
I2C驱动程序结构
接下来编写的i2c器件这里指的是温度传感器,也都是调用以上函数来完成。如下图
I2C驱动程序分析
i2c.h
#ifndef __I2C_H
#define __I2C_H
#include "sys.h"
#define I2CPORT GPIOB //定义IO接口
#define I2C_SCL GPIO_Pin_6 //定义IO接口
#define I2C_SDA GPIO_Pin_7 //定义IO接口
#define HostAddress 0xc0 //总线主机的器件地址
#define BusSpeed 200000 //总线速度(不高于400000)
void I2C_Configuration(void);
void I2C_SAND_BUFFER(u8 SlaveAddr, u8 WriteAddr, u8* pBuffer, u16 NumByteToWrite);
void I2C_SAND_BYTE(u8 SlaveAddr,u8 writeAddr,u8 pBuffer);
void I2C_READ_BUFFER(u8 SlaveAddr,u8 readAddr,u8* pBuffer,u16 NumByteToRead);
u8 I2C_READ_BYTE(u8 SlaveAddr,u8 readAddr);
#endif
i2c.c
初始化
发送一个字节数据
发送一个字节数据流程:
发送开始信号
等待完成
发送从器件地址及状态(写入)
等待完成
发送从器件内部寄存器地址
等待完成
发送要写入的内容
等待完成
发送结束信号
读取一个字节数据
读取一个字节数据流程:
判断总线是否繁忙
发送起始信号
等待操作完成
发送器件地址
等待操作完成
开启i2c功能
发送器件子地址
主机允许从器件产生开始信号 向主机发送数据 也就是主机开启接收
等待完成
给出器件地址
等待接收数据 收到数据则跳出 没有收到一直等待
最后有一个数据时关闭应答位
最后一个数据时使能停止位
接收数据存放到变量a中
发送和读取多字节数据
LM75A温度传感器电路原理图
LM75A温度传感器驱动程序分析
根据上表可知,掉电模式相关位。
例如D15 D11 D8为0 则意味着-9度
重新返回程序对应理解
转载:https://blog.csdn.net/weixin_44681745/article/details/116009963
查看评论