I2C完整讲解(二)
库函数介绍
现在我们来看下I2C库函数的时候以及相关知识点
I2C_InitTypedef(I2C初始化结构体)
typedef struct
{uint32_t I2C_ClockSpeed; /*!< Specifies the clock frequency.This parameter must be set to a value lower than 400kHz */uint16_t I2C_Mode; /*!< Specifies the I2C mode.This parameter can be a value of @ref I2C_mode */uint16_t I2C_DutyCycle; /*!< Specifies the I2C fast mode duty cycle.This parameter can be a value of @ref I2C_duty_cycle_in_fast_mode */uint16_t I2C_OwnAddress1; /*!< Specifies the first device own address.This parameter can be a 7-bit or 10-bit address. */uint16_t I2C_Ack; /*!< Enables or disables the acknowledgement.This parameter can be a value of @ref I2C_acknowledgement */uint16_t I2C_AcknowledgedAddress; /*!< Specifies if 7-bit or 10-bit address is acknowledged.This parameter can be a value of @ref I2C_acknowledged_address */
}I2C_InitTypeDef;
I2C_ClockSpeed:
设置I2C的传输速率,在调用初始化函数时,函数会根据我们输入的数值经过运算后把时钟因子写入到I2C的时钟控制寄存器CCR.而我们写入的这个参数值不得高于400KHz. 实际上由于CCR寄存器能写入小数类型的时钟因子,影响到 SCL的实际频率可能会低于本成员设置的参数值,这时除了通讯稍慢一点 以外,不会对I2C的标准通讯造成其它影响,直接赋值就可以配置相应的时钟(大于100khz小于400khz),调用库函数I2C_Init()时会把时钟的值转化为I2C_CCR[11:0]的值并设置F/S位决定在工作在快速模式还是标准模式,不用我们手动去算,I2C_Init()要选择初始化I2C1或者I2C2,
I2C_Mode:该参数并不是决定I2C工作在快速模式还是标准模式(这是由I2C_ClockSpeed决定的),这里决定的模式是I2C模式I2C_Mode_I2C 还是2C_Mode_SMBusHost还是I2C_Mode_SMBusDevice,我们选择I2C_Mode_I2C
I2C_DutyCycle:设置I2C的SCL线时钟的占空比.该配置有两个选择,分别为低电平时间比高电平时间为2:1 ( I2C_DutyCycle_2)和16:9 (I2C_DutyCycle_16_9),用来设置I2C_CCR的DUTY位
I2C_OwnAddress1:==从我们的I2C框图可以知道一个设备是可以有两个地址的,这里标识1说明设置的是第一个地址,此地址可以设置成7位或者10位地址,只要该地址是I2C总线上唯一的即可, ==若需要设置第二个地址寄存器OAR2,可使I2C_OwnAddress2Config函数来配置,OAR2不支持10位地址.
I2C_Ack:配置I2C应答是否使能,设置为使能则可以发送响应信号.一般 配置为允许应答(I2C_Ack_Enable),这是绝大多数遵循I2C标准的设备的通讯要求,改为禁止应答(I2C_Ack_Disable)往往会导致通讯错误,是配置I2C_CR1的第10位
I2C_AcknowledgedAddress:选择I2C的寻址模式是7位还是10位地址.这需要根据实际连接到I2C总线上设备的地址进行选择,这个成员的配置也影响到 I2C_OwnAddress1成员,只有这里设置成10位模式时, I2C_OwnAddress1才支持10位地址.
I2C_GeneralCallCmd库函数
该函数原型为void I2C_GeneralCallCmd(I2C_TypeDef* I2Cx,FunctionalState NewStare),用来产生I2CX的起始信号,第一参数可以选择I2C1或者I2C2,第二个参数可以选择ENBALE或者DISABLE用来设置是否产生起始信号
I2C_GenerateSTOP库函数
该函数原型为voidI2C_GenerateSTOP(I2C_TypeDef* I2Cx,FunctionalState NewStare),用来产生I2CX的停止信号,第一参数可以选择I2C1或者I2C2,第二个参数可以选择ENBALE或者DISABLE用来设置是否产生停止信号
FlagStatus I2C_GetFlagStatus库函数
该函数原型为FlagStatus I2C_GetFlagStatus( I2C_TypeDef * I2Cx, uint32_t I2C_FLAG),该函数用来查询标志位,标志想要进行的工作是否完成,返回值为RESET和SET对应未完成和完成
I2C_FLAG可以配置为以下宏,用于检测不同的动作
I2C_FLAG_DUALF: Dual flag (Slave mode)
I2C_FLAG_SMBHOST: SMBus host header (Slave mode)
I2C_FLAG_SMBDEFAULT: SMBus default header (Slave mode)
I2C_FLAG_GENCALL: General call header flag (Slave mode)
I2C_FLAG_TRA: Transmitter/Receiver flag
I2C_FLAG_BUSY: Bus busy flag
I2C_FLAG_MSL: Master/Slave flag
I2C_FLAG_SMBALERT: SMBus Alert flag
I2C_FLAG_TIMEOUT: Timeout or Tlow error flag
I2C_FLAG_PECERR: PEC error in reception flag
I2C_FLAG_OVR: Overrun/Underrun flag (Slave mode)
I2C_FLAG_AF: Acknowledge failure flag
I2C_FLAG_ARLO: Arbitration lost flag (Master mode)
I2C_FLAG_BERR: Bus error flag
I2C_FLAG_TXE: Data register empty flag (Transmitter)
I2C_FLAG_RXNE: Data register not empty (Receiver) flag
I2C_FLAG_STOPF: Stop detection flag (Slave mode)
I2C_FLAG_ADD10: 10-bit header sent flag (Master mode)
I2C_FLAG_BTF: Byte transfer finished flag
I2C_FLAG_ADDR: Address sent flag (Master mode) “ADSL” Address matched flag (Slave mode)“ENDA”
I2C_FLAG_SB: Start bit flag (Master mode)
I2C_Send7bitAddress库函数
该库函数函数原型为void I2C_Send7bitAddress ( I2C_TypeDef * I2Cx,uint8_t Address,uint8_t I2C_Direction),用来发送地址,地址存在第二个参数,方向用第三个参数设置
I2C_SendData
该库函数原型为void I2C_SendData ( I2C_TypeDef * I2Cx,uint8_t Data ) ,用来发送数据,数据放在第二个参数
I2C_ReceiveData库函数
uint8_t I2C_ReceiveData( I2C_TypeDef * I2Cx ),用来接收数据,数据存在返回值
I2C_AcknowledgeConfig库函数
该函数原型为void I2C_AcknowledgeConfig ( I2C_TypeDef * I2Cx, FunctionalState NewState ) ,第二个参数可以设置为ENBALE或者DISABLE用来产生应答信号或者非应答信号
EEPROM介绍
可以看出5,6号引脚接有上拉电阻,其他挂载在I2C总线上的设备就不用接上拉电阻了,E0到E2是地址引脚,EERROM有5种不同的容量芯片,AT24C01A/02/04/08A/16A对应1024/2048/4096/8192/16384字节,AT24C01A/02设备地址由"4+3+1"决定,前面4位是固定的1010,后面3位由E0到E2决定,最后一位决定读或者写
框图
DEVICE ADDRESS COMPARATOR为地址比较器,和总线上广播的地址进行比较,如果一致则应答,可以根据行地址和列地址进行访问,
编程思路:
1.初始化IIC相关的GPIO(包括)
2.配置IIC外设的工作模式
3.编写IIC写入EEPROM的Byte write函数
4.编写IIC读取EEPROM的RANDOM read函数
5.使用read函数和write函数进行校验
6.编写page write和seq read函数并校验
I2C完整讲解(二)相关推荐
- 01背包和完全背包 的完整讲解版 包含 一维数组实现 和二维数组实现题目
(二)01背包和完全背包 的完整讲解版 包含 一维数组实现 和二维数组实现题目 //有N件物品和一个容量为V的背包.第i件物品的体积是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. ...
- 【深入浅出Yolo系列之Yolox核心基础完整讲解】
文章目录 原文:https://zhuanlan.zhihu.com/p/397993315 在Yolov4.Yolov5刚出来时,大白就写过关于Yolov3.Yolov4.Yolov5的文章,并且做 ...
- 深入浅出Yolo系列之Yolov3Yolov4Yolov5核心基础知识完整讲解
深入浅出Yolo系列之Yolov3&Yolov4&Yolov5核心基础知识完整讲解
- C/C++基础讲解(二十六)之数值计算与趣味数学篇(打鱼还是晒网与怎样存钱以获取最大利息)
C/C++基础讲解(二十六)之数值计算与趣味数学篇(打鱼还是晒网与怎样存钱以获取最大利息) 程序之美 前言 很多时候,特别是刚步入大学的学子们,对于刚刚开展的计算机课程基本上是一团迷雾,想要弄明白其中 ...
- Linux I2C总线(二)I2C设备驱动编写方法
Linux I2C总线 Linux I2C总线(一)I2C驱动框架 Linux I2C总线(二)I2C设备驱动编写方法 Linux I2C总线(二)I2C设备驱动编写方法 文章目录 Linux I2C ...
- pyhton GUI编程之Tkinter详细讲解二
文章目录 Tkinter详细讲解 pyhton GUI编程之Tkinter详细讲解二 4. 组件用法 4.1 文本输入和输出相关控件 4.1.1 Lable标签 4.1.2 Message消息 4.1 ...
- C/C++基础讲解(二十九)之数值计算与趣味数学篇(百钱百鸡问题、爱因斯坦的数学题、三色球问题与马克思手稿中的数学题)
C/C++基础讲解(二十九)之数值计算与趣味数学篇(百钱百鸡问题.爱因斯坦的数学题.三色球问题与马克思手稿中的数学题) 程序之美 前言 很多时候,特别是刚步入大学的学子们,对于刚刚开展的计算机课程基本 ...
- 完整的二维码扫描解决方案
现在的应用都有自己的二维码扫描工具,最近接手的项目也不例外,集成了ZXing二维码扫描,但是用起来却实在差强人意,后来看到QrCodeReaderView效果不错,识别速度上有明显提高,而且使用也非常 ...
- 基础通信协议之 IIC (I2C) 详细讲解
IIC是当今嵌入式应用中最常见的串行通信协议之一.对比OneWire严苛的时序要求,SPI等更多的线缆要求,IIC处于一个折中的位置:不那么多的2根线缆的硬件要求,不那么复杂严苛的时序要求,便可进行多 ...
- 深入浅出Yolo系列之Yolov3amp;Yolov4核心基础知识完整讲解
Datawhale干货 作者:知乎-江大白 编辑:AI算法与图像处理 本文来源:https://zhuanlan.zhihu.com/p/143747206 已授权转载,如需转载请联系原作者,禁止二 ...
最新文章
- python 类-Python中的类
- 【第十一讲】TMS320F28335开发板之I2C模块
- 【Python小工具函数】各种日期格式的转换、在某个日期上减去n天、判断List中是否含有数字
- 巧用VC工程下的rc文件
- 云计算与分布式系统课程学习笔记(二)——Linux基本命令的使用与熟悉
- 云小课|CDN第5课 CDN入门之—我的网站可以用CDN加速吗?
- eclipse不支持泛型_Go语言11岁了,网友:他喵的,终于确定出「泛型」了
- 力扣 26.删除有序数组中的重复元素
- 完美解决win7作为虚拟机无法复制粘贴共享文件的问题
- 比亚迪宋Pro电路图和维修手册
- 计算几何小结 我对计算几何的理解以及叉积和点积
- 使用dd命令测试裸盘性能评测
- Unity3D实现3D立体游戏原理及过程,需偏振眼镜3D显
- 初学者儿童适合什么尺寸吉他?聪明的家长都这样选!
- wincc7.0显示无法访问服务器,WinCC 7.0 SP3 安装时提示网络连接不可用,无法安装...
- python批量拷贝数据脚本_使用python来玩转ensp~3-写个批量备份配置文件脚本
- 幸运数的定义及其判断
- RationalDMIS 7.1 建立坐标系(3-2-1法)
- 经典算法(动态图展示)
- sqli-labs系列——第一关
热门文章
- 无中介租房搜房工具 V1.0
- Optimization Week 4: Duality
- iOS之HomeKit
- 解决DELL WIN7 bootmgr is missing
- excel公式编辑器_动态提取符合多个条件的记录,公式躲远点
- macbookair有没有touchbar_高配MacBook Air和低配MacBook Pro选哪个?
- 计算机网络与Netty - F2F
- python求两个数的最大公约数穷举法_最大公约数GCD算法
- cesium天气(晴、雨、雪、雾)
- 基于VHDL利用PS2键盘控制的电子密码锁设计