库函数介绍

现在我们来看下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完整讲解(二)相关推荐

  1. 01背包和完全背包 的完整讲解版 包含 一维数组实现 和二维数组实现题目

    (二)01背包和完全背包 的完整讲解版 包含 一维数组实现 和二维数组实现题目 //有N件物品和一个容量为V的背包.第i件物品的体积是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. ...

  2. 【深入浅出Yolo系列之Yolox核心基础完整讲解】

    文章目录 原文:https://zhuanlan.zhihu.com/p/397993315 在Yolov4.Yolov5刚出来时,大白就写过关于Yolov3.Yolov4.Yolov5的文章,并且做 ...

  3. 深入浅出Yolo系列之Yolov3Yolov4Yolov5核心基础知识完整讲解

    深入浅出Yolo系列之Yolov3&Yolov4&Yolov5核心基础知识完整讲解

  4. C/C++基础讲解(二十六)之数值计算与趣味数学篇(打鱼还是晒网与怎样存钱以获取最大利息)

    C/C++基础讲解(二十六)之数值计算与趣味数学篇(打鱼还是晒网与怎样存钱以获取最大利息) 程序之美 前言 很多时候,特别是刚步入大学的学子们,对于刚刚开展的计算机课程基本上是一团迷雾,想要弄明白其中 ...

  5. Linux I2C总线(二)I2C设备驱动编写方法

    Linux I2C总线 Linux I2C总线(一)I2C驱动框架 Linux I2C总线(二)I2C设备驱动编写方法 Linux I2C总线(二)I2C设备驱动编写方法 文章目录 Linux I2C ...

  6. pyhton GUI编程之Tkinter详细讲解二

    文章目录 Tkinter详细讲解 pyhton GUI编程之Tkinter详细讲解二 4. 组件用法 4.1 文本输入和输出相关控件 4.1.1 Lable标签 4.1.2 Message消息 4.1 ...

  7. C/C++基础讲解(二十九)之数值计算与趣味数学篇(百钱百鸡问题、爱因斯坦的数学题、三色球问题与马克思手稿中的数学题)

    C/C++基础讲解(二十九)之数值计算与趣味数学篇(百钱百鸡问题.爱因斯坦的数学题.三色球问题与马克思手稿中的数学题) 程序之美 前言 很多时候,特别是刚步入大学的学子们,对于刚刚开展的计算机课程基本 ...

  8. 完整的二维码扫描解决方案

    现在的应用都有自己的二维码扫描工具,最近接手的项目也不例外,集成了ZXing二维码扫描,但是用起来却实在差强人意,后来看到QrCodeReaderView效果不错,识别速度上有明显提高,而且使用也非常 ...

  9. 基础通信协议之 IIC (I2C) 详细讲解

    IIC是当今嵌入式应用中最常见的串行通信协议之一.对比OneWire严苛的时序要求,SPI等更多的线缆要求,IIC处于一个折中的位置:不那么多的2根线缆的硬件要求,不那么复杂严苛的时序要求,便可进行多 ...

  10. 深入浅出Yolo系列之Yolov3amp;Yolov4核心基础知识完整讲解

    Datawhale干货 作者:知乎-江大白  编辑:AI算法与图像处理 本文来源:https://zhuanlan.zhihu.com/p/143747206 已授权转载,如需转载请联系原作者,禁止二 ...

最新文章

  1. python 类-Python中的类
  2. 【第十一讲】TMS320F28335开发板之I2C模块
  3. 【Python小工具函数】各种日期格式的转换、在某个日期上减去n天、判断List中是否含有数字
  4. 巧用VC工程下的rc文件
  5. 云计算与分布式系统课程学习笔记(二)——Linux基本命令的使用与熟悉
  6. 云小课|CDN第5课 CDN入门之—我的网站可以用CDN加速吗?
  7. eclipse不支持泛型_Go语言11岁了,网友:他喵的,终于确定出「泛型」了
  8. 力扣 26.删除有序数组中的重复元素
  9. 完美解决win7作为虚拟机无法复制粘贴共享文件的问题
  10. 比亚迪宋Pro电路图和维修手册
  11. 计算几何小结 我对计算几何的理解以及叉积和点积
  12. 使用dd命令测试裸盘性能评测
  13. Unity3D实现3D立体游戏原理及过程,需偏振眼镜3D显
  14. 初学者儿童适合什么尺寸吉他?聪明的家长都这样选!
  15. wincc7.0显示无法访问服务器,WinCC 7.0 SP3 安装时提示网络连接不可用,无法安装...
  16. python批量拷贝数据脚本_使用python来玩转ensp~3-写个批量备份配置文件脚本
  17. 幸运数的定义及其判断
  18. RationalDMIS 7.1 建立坐标系(3-2-1法)
  19. 经典算法(动态图展示)
  20. sqli-labs系列——第一关

热门文章

  1. 无中介租房搜房工具 V1.0
  2. Optimization Week 4: Duality
  3. iOS之HomeKit
  4. 解决DELL WIN7 bootmgr is missing
  5. excel公式编辑器_动态提取符合多个条件的记录,公式躲远点
  6. macbookair有没有touchbar_高配MacBook Air和低配MacBook Pro选哪个?
  7. 计算机网络与Netty - F2F
  8. python求两个数的最大公约数穷举法_最大公约数GCD算法
  9. cesium天气(晴、雨、雪、雾)
  10. 基于VHDL利用PS2键盘控制的电子密码锁设计