IIC函数解读

1.void I2C_DeInit(I2C_TypeDef* I2Cx)
功能:将I2Cx外设寄存器重设为默认值

注释:该函数调用了RCC_APB1PeriphResetCmd来进行挂载于APB上外设的寄存器的复位

例如:I2C_DeInit();

2.void I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct)
功能:根据I2C_InitStruct中指定的参数初始化I2Cx外设

例如:I2C_Init(I2C1 , &I2C_InitStructure);

3.void I2C_StructInit(I2C_InitTypeDef* I2C_InitStruct)
功能:根据默认值填充每个I2C_InitStruct成员

注释:直接向结构体成员赋值,不涉及寄存器写入的操作

例如:I2C_StructInit(&I2C_InitStructure);

4.void I2C_Cmd(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能:使能I2C外设

注释:1. 在从模式下,如果清除使能位时通讯正在进行,在当前通讯结束后,I2C模块被禁用并返回空闲状态;

              由于在通讯结束后发生PE=0 (Peripheral enable),所有的位被清除

           2. 在主模式下,通讯结束之前,绝不能清除该位

例如:I2C_Cmd(I2C1 , ENABLE);

5.void I2C_DMACmd(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能:使能或者失能指定I2C的DMA请求

例如:I2C_DMACmd(I2C1 , ENABLE);

6.void I2C_DMALastTransferCmd(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能:指定下一个DMA传输是否为最后一个

注释:该位在主接收模式使用, 使得在最后一次接收数据时可以产生一个NACK

例如:I2C_DMALastTransferCmd(I2C1 , ENABLE);

7.void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能:生成I2Cx通信起始信号

例如:I2C_GenerateSTART(I2C1 , ENABLE);

8.void I2C_GenerateSTOP(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能:生成I2Cx通信停止信号

注释:当设置了STOP、START或PEC位,在硬件清除这个位之前,软件不要执行任何对I2C_CR1的写操作,

           否则有可能会第2次设置STOP、START或PEC位;

           PEC:数据包出错检测 (Packet error checking)

例如:I2C_GenerateSTOP(I2C1 , ENABLE);

9.void I2C_AcknowledgeConfig(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能:使能或者失能指定的I2C应答功能

注释:在接收到一个字节后返回一个应答(匹配的地址或数据)

例如:I2C_AcknowledgeConfig(I2C1 , ENABLE);

10.void I2C_OwnAddress2Config(I2C_TypeDef* I2Cx, uint8_t Address)
功能:配置指定的I2C自身地址2

注释: I2C_OwnAddress1 在结构体内被赋值;

          双地址模式使能,OAR2才会被识别;

          I2C_OwnAddress_x是STM32设备本身的地址,当STM32作为主设备,不用关心该地址设置,随意设置数即可,

          但是如果STM32作为从设备使用时,必须进行配置

例如:I2C_OwnAddress2Config(I2C1 , 0x7F);

11.void I2C_DualAddressCmd(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能:使能双地址模式

注释:双地址模式的使能使得OAR2才会被识别

例如:I2C_DualAddressCmd(I2C1 , ENABLE);

12.void I2C_GeneralCallCmd(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能:使能或者失能广播呼叫

注释:以应答还是非应答响应地址00h

例如:I2C_GeneralCallCmd(I2C1 , ENABLE);

13.void I2C_ITConfig(I2C_TypeDef* I2Cx, uint16_t I2C_IT, FunctionalState NewState)
功能:使能或者失能指定的I2C中断

注释:I2C_IT_BUF:缓冲器中断使能          I2C_IT_EVT:事件中断使能          I2C_IT_ERR:出错中断使能

例如:I2C_ITConfig(I2C1 , I2C_IT_BUF);

14.void I2C_SendData(I2C_TypeDef* I2Cx, uint8_t Data)
功能:通过I2Cx外设发送数据字节

注释:在从模式下,地址不会被拷贝进数据寄存器DR;

           硬件不管理写冲突(如果TxE=0,仍能写入数据寄存器);

           如果在处理ACK脉冲时发生ARLO事件,接收到的字节不会被拷贝到数据寄存器里,因此不能读到它

例如:I2C_SendData(I2C1 , 0x01);

15.uint8_t I2C_ReceiveData(I2C_TypeDef* I2Cx)
功能:获取I2Cx外设最近接收的数据

注释:注意数据被覆盖的问题

例如:Data = I2C_ReceiveData(I2C1);

16.void I2C_Send7bitAddress(I2C_TypeDef* I2Cx, uint8_t Address, uint8_t I2C_Direction)
功能:发送地址以选中从设备

注释:同数据发送相同,地址也是数据的一种

例如:I2C_Send7bitAddress(I2C1 , 0xA0 , I2C_Direction_Transmitter);

17.uint16_t I2C_ReadRegister(I2C_TypeDef* I2Cx, uint8_t I2C_Register)
功能:读取指定的I2C寄存器并返回其值

例如:Register = I2C_ReadRegister(I2C1 , I2C_Register_CR1);

18.void I2C_SoftwareResetCmd(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能:使能或者失能指定的I2C软件重置

注释:该位可以用于总线繁忙(BUSY位为’1’),但是在总线上又没有检测到停止条件时使用

例如:I2C_SoftwareResetCmd(I2C1 , ENABLE);

19.void I2C_NACKPositionConfig(I2C_TypeDef* I2Cx, uint16_t I2C_NACKPosition)
功能:在主接收模式下选择指定的I2C NACK位置

          下一个字节是最后一个收到的字节 / 当前字节是最后一个收到的字节

注释:当要接收的数据数量等于2时,这个函数在I2C主接收模式下非常有用;

           在这种情况下,应该在数据接收开始之前调用这个函数(使用参数I2C_NACKPosition_Next);

           为了NACK第2个字节,必须在清除ADDR位之后清除ACK位;

           该函数配置与I2C_PECPositionConfig相同的寄存器位(POS),但它用于I2C模式,

           而I2C_PECPositionConfig()用于SMBUS模式

例如:I2C_NACKPositionConfig(I2C1 , I2C_NACKPosition_Next);

20.void I2C_SMBusAlertConfig(I2C_TypeDef* I2Cx, uint16_t I2C_SMBusAlert)
功能:为指定的I2C驱动SMBus提醒 (SMBus alert)引脚的高或低

注释:提醒响应地址头紧跟在NACK还是ACK信号后面

例如:I2C_SMBusAlertConfig(I2C1 , I2C_SMBusAlert_Low);

21.void I2C_TransmitPEC(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能:使能或者失能指定的I2C PEC传输    (PEC:数据包出错检测 Packet error checking)

注释:配置有无PEC传输;仲裁丢失时,PEC的计算失效

例如:I2C_TransmitPEC(I2C1 , ENABLE);

22.void I2C_PECPositionConfig(I2C_TypeDef* I2Cx, uint16_t I2C_PECPosition)
功能:选择指定的I2C PEC位置

注释:指示下一个字节为PEC还是当前字节为PEC;

           POS位只能用在2字节的接收配置中,必须在接收数据之前配置;

           为了NACK第2个字节,必须在清除ADDR位之后清除ACK位;

           为了检测第2个字节的PEC,必须在配置了POS位之后,拉伸ADDR事件时设置PEC位;

           该函数配置了与I2C_NACKPositionConfig()相同的位(POS),但是用于SMBUS模式,

           而I2C_NACKPositionConfig()用于I2C模式

例如:I2C_PECPositionConfig(I2C1 , I2C_PECPosition_Next);

23.void I2C_CalculatePEC(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能:使能或者失能传输字节的PEC值计算

例如:I2C_CalculatePEC(I2C1 , ENABLE);

24.uint8_t I2C_GetPEC(I2C_TypeDef* I2Cx)
功能:返回指定I2C的PEC值

注释:当ENPEC=1时,读取PEC[7:0]存放内部的PEC的值

例如:PEC = I2C_GetPEC(I2C1);

25.void I2C_ARPCmd(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能:使能或者失能指定的I2C ARP(地址解析协议ARP)

注释:地址解析协议(通过给每个从设备动态地分配一个新的唯一地址,可以解决SMBus的从地址冲突)

例如:I2C_ARPCmd(I2C1 , ENABLE);

26.void I2C_StretchClockCmd(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能:使能或者失能指定的I2C时钟时钟延长(从模式)

注释:该位用于当ADDR或BTF标志被置位,在从模式下禁止时钟延长,直到它被软件复位

          BTF:字节发送结束 (Byte transfer finished)

          ADDR:地址已被发送(主模式)/地址匹配(从模式) (Address sent (master mode)/matched (slave mode))

例如:I2C_StretchClockCmd(I2C1 , ENABLE);

27.void I2C_FastModeDutyCycleConfig(I2C_TypeDef* I2Cx, uint16_t I2C_DutyCycle)
功能:配置指定的I2C快速模式时的占空比

注释:CCR寄存器只有在关闭I2C时(PE=0)才能设置

例如:I2C_FastModeDutyCycleConfig(I2C1 , I2C_DutyCycle_2);

28.下面是三种I2C状态监控函数:


(1).ErrorStatus I2C_CheckEvent(I2C_TypeDef* I2Cx, uint32_t I2C_EVENT)
基本状态监测

功能:检查最后一个I2Cx事件是否等于作为参数传递的事件

例如:errorstatus = I2C_CheckEvent(I2C1 , I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED);

注释:

 
(2).uint32_t I2C_GetLastEvent(I2C_TypeDef* I2Cx)
高级状态监控

功能:返回最后一个I2Cx事件

例如:event = I2C_GetLastEvent(I2C1);

注释:

(3).FlagStatus I2C_GetFlagStatus(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG)
基于标志位的状态监控

功能:检查是否设置了指定的I2C标志

例如:flagstatus = I2C_GetFlagStatus(I2C1 , I2C_FLAG_DUALF);

注释:

 
29.void I2C_ClearFlag(I2C_TypeDef* I2Cx, uint32_t I2C_FLAG)
功能:清除I2Cx的挂起标志

例如:I2C_ClearFlag(I2C1 , I2C_FLAG_SMBALERT);

30.ITStatus I2C_GetITStatus(I2C_TypeDef* I2Cx, uint32_t I2C_IT)
功能:获取中断标志位,检查指定的I2C中断是否发生

例如:status = I2C_GetITStatus(I2C1 , I2C_IT_SMBALERT);

31.void I2C_ClearITPendingBit(I2C_TypeDef* I2Cx, uint32_t I2C_IT)
功能:清除I2Cx的中断挂起位

例如:I2C_ClearITPendingBit(I2C1 , I2C_IT_SMBALERT); 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值