技术标签: STM32
现在我们来看下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用来产生应答信号或者非应答信号
可以看出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函数并校验
xargs时间久了没用,总是忘了rm -rf 后面的f,于是不成功。不想老是查,所以从网上找了些资料,先存起来。 #find ... -exec rm {} \; #find ... | xargs rm -rf 两者都可以把find命令查找到的结果删除,其区别简单的说是前者是把find发现的结果一次性传给exec选项,这样当文件数量较多的时候,就可能会出现“参数太多”之类的
Quartz集群并发执行导致重复调度问题排查1. 问题描述定时平台在某一时刻触发定时job时,集群中的两个调度器节点同时创建了job,导致该定时任务同一时刻下发给业务应用两次,引发并发重复调用的问题。在两台调度机器上查看调度日志,发现第一个机器节点A在12:30:00:074创建了job,第二个机器节点B在12:30:00:079也创建了job,两个节点的调度日志如下: 2021-10-29 12:30:00,074 INFO [dspQuartzScheduler_Worker-42] com.u
互联网发展了好几十年,其实真正沉淀下来的变现方式非常有限,广告无疑是所有流量变现的首选。整个广告的模式其实比较复杂,成熟的广告系统里面会大量应用算法,今天大家粗浅的分享下广告行业中的一些业务特点首先,从广告这个业务的人群角度,分为广告平台、广告消费者以及广告主。 广告消费者:互联网上的每个人都是广告消费者,打开优酷视频,会先看到一段广告。在百度搜索一些内容,也会看到很多广告 广...
在新版nodejs已经集成了npm,所以npm也都安装好了。可以通过输入下面命令来测试是否成功安装node -vnpm -v如果安装成功,都会出现版本号用npm -v测试,报错:node:internal/modules/cjs/loader:936 throw err; ^Error: Cannot find module 'D:lcbsoftwareodejsode_modulespminpm-cli.js' at Function.Module._reso
参考安装参考:[2020.11.4亲测有效] 手把手教你在Ubuntu 20.04上通过docker安装微信和QQ调整字体参考:Ubuntu20.04 wechat和qq 字体太小,乱码 #启动 微信复制以下脚本到linux_dck_wechat.sh#!/bin/bashecho "docker pull ..."sudo docker pull bestwu/wechatecho "docker run ..."sudo docker run -d --name wechat
Fundamentals of Machine Learning在前几章中,我们看到了如何建立深度学习模型来解决分类和回归问题的实例,例如图像分类和平均用户视图预测。同样,我们发展了一种关于如何构建深度学习问题的直觉。在本章中,我们将研究如何解决不同类型的问题和不同的调整,我们最终可能会使用这些问题来改进我们的模型在我们的问题上的性能。在本章中,我们将探讨以下问题:不同于分类和回归的其他形...
原文地址:http://www.cnblogs.com/csynine/archive/2005/07/11/190768.htmlGDI全称Graphics Device Interface,它是Windows图形程序设计不可或缺的一部分,在微软推出Windows2000,WindowsXP,Windows 2003等操作系统之后,GDI也得到了升级和增强,被称之为GDI+。一般情况下,vs
解决报错AttributeError: Can't get attribute 'GELUActivation' on <module 'transformers.activations'
能不能把这个JSON串转成相应的对象,更易于使用呢? 为了方便讲解,这里重复写下JSON串。{"item:s_id:18006666": "1024","item:s_id:18008888": "1024","item:g_id:18006666": "6666","item:g_id:18008888": "8888","item:num:18008888": "8","item...
这两天使用svn遇到一个很变态的问题,向服务器提交代码的时候总是提示The working copy “XXX” failed to commit files. Couldn't communicate with a helper application.在网上找了一天的资料都没有找到,最后尝试更改文件名后提交成功,具体原因不明,但总算是把问题解决了。
MySql基础知识整理0. 查看当前数据库的配置mysql&gt; \s--------------mysql Ver 14.14 Distrib 5.7.21, for macos10.13 (x86_64) using EditLine wrapperConnection id: 4Current database: mysqlCurrent user: [email protected]...
函数内指定是minute,则最终结果value值的单位是分钟,如果函数内指定为hours,则最终结果value值单位为小时。//UPLOAD_TIME 减去 CREATE_DTTM 求得时间差,以分钟数计时select avg(TIMESTAMPDIFF(MINUTE,CREATE_DTTM,...