文章目錄
- I2C硬體電路原理圖
- I2C 簡介
- 添加相應的檔案并添加進工程檔案
- I2C驅動程式結構
- I2C驅動程式分析
- LM75A溫度傳感器電路原理圖
- LM75A溫度傳感器驅動程式分析
楊桃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://www.uj5u.com/qita/279666.html
標籤:其他
