杨桃32学习笔记,本文图片文字皆为转述
I2C要点
I2C总线是板级总线,连接线一般不超2米。
电路连接:两线总线连接,1~10K上拉电阻,复用开漏模式。
器件地址:每个器件都有唯一地址(7位16进制数),最多127个器件地址,新版I2C规范中最大器件地址数量可达1023个。
所有设备与单片机需要共地。
杨桃电子开发版中,将oled屏幕的从设备地址定为0x78,0x9e是温度传感器的设备地址。
在工程文件夹LIB下添加stm32f10x_i2c.c
在工程文件夹Basic下添加i2c.c
在工程文件夹Hardware文件夹下添加lm75a.c
接下来编写的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中
发送和读取多字节数据
根据上表可知,掉电模式相关位。
例如D15 D11 D8为0 则意味着-9度
重新返回程序对应理解
本文转载自微信公众号「Java中文社群」,作者磊哥 。转载本文请联系Java中文社群...
在大多数情况下,你都可以操作数据来修改视图,或者反之。但是还是避免不了偶尔...
想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区 https://...
MongoDB实用场景 产品用户访问日志,点击埋点统计信息 业务系统环境参数配置信息...
随着互联网技术的不断发展, MySQL 相关生态也越来越完善,越来越多的工具涌现出...
直接在对应的vhosts.conf配置文件的location / {}中添加以下内容: location / {...
我们常常听到很多人说要学学Linux或者被人告知说应该学学Linux,那么学Linux到底...
Android开发实现内部和外部存储文件 效果图 activity_main.xml代码 ? xml versio...
【51CTO.com快译】传统观点认为,关系型数据库的可伸缩性和健壮性都不足以支撑需...
START云游戏 是有腾讯所推出的云游戏的平台虽然我国5G和智能电视的普及云游戏平...