STM32F1xx_StdPeriph_Driver——I2C

一:定义的数据结构

typedef struct
{
  uint32_t I2C_ClockSpeed;   //指定时钟频率。此参数必须设置为低于400kHz的值

  uint16_t I2C_Mode;    //指定I2C模式。此参数可以是I2C_mode的值

  uint16_t I2C_DutyCycle;   //指定I2C快速模式占空比。此参数可以是I2C_duty_cycle_in_fast_mode的值

  uint16_t I2C_OwnAddress1;   //指定第一个设备自己的地址。该参数可以是7位或10位地址。

  uint16_t I2C_Ack;     //启用或禁用确认。此参数可以是I2C_acknowledgement的值

  uint16_t I2C_AcknowledgedAddress; //指定是否确认7位或10位地址。此参数可以是I2C_acknowledged_address的值
} I2C_InitTypeDef;

 

二:预定义的配置项

/*------------------I2C_Mode----------------------------*/

#define     I2C_Mode_I2C   ((uint16_t)0x0000)
#define     I2C_Mode_SMBusDevice   ((uint16_t)0x0002)
#define     I2C_Mode_SMBusHost   ((uint16_t)0x000A)
#define     IS_I2C_MODE(MODE)         (((MODE) == I2C_Mode_I2C) || \
                                                               ((MODE) == I2C_Mode_SMBusDevice) || \
                                                               ((MODE) == I2C_Mode_SMBusHost))

/*------------------I2C_duty_cycle_in_fast_mode----------------------------*/

#define     I2C_DutyCycle_16_9   ((uint16_t)0x4000)    //I2C fast mode Tlow/Thigh = 16/9
#define     I2C_DutyCycle_2   ((uint16_t)0xBFFF)   //I2C fast mode Tlow/Thigh = 2
#define     IS_I2C_DUTY_CYCLE(CYCLE)      (((CYCLE) == I2C_DutyCycle_16_9) || \
                                                                           ((CYCLE) == I2C_DutyCycle_2))

/*------------------I2C_acknowledgement----------------------------*/

#define     I2C_Ack_Enable   ((uint16_t)0x0400)
#define     I2C_Ack_Disable   ((uint16_t)0x0000)
#define IS_I2C_ACK_STATE(STATE )     (((STATE) == I2C_Ack_Enable) || \
                                                                    ((STATE) == I2C_Ack_Disable))

/*-----------------I2C_transfer_direction ----------------------------*/

#define I2C_Direction_Transmitter ((uint8_t)0x00)
#define I2C_Direction_Receiver ((uint8_t)0x01)
#define IS_I2C_DIRECTION(DIRECTION)     (((DIRECTION)== I2C_Direction_Transmitter)|| \
                                                                          ((DIRECTION)== I2C_Direction_Receiver))

 

/*-----------------I2C_acknowledged_address ----------------------------*/

#define I2C_AcknowledgedAddress_7bit  ((uint16_t)0x4000)
#define I2C_AcknowledgedAddress_10bit  ((uint16_t)0xC000)
#define IS_I2C_ACKNOWLEDGE_ADDRESS    (ADDRESS)     (((ADDRESS) == I2C_AcknowledgedAddress_7bit) || \
                                                                                                     ((ADDRESS) == I2C_AcknowledgedAddress_10bit))

 

/*-----------------I2C_registers ----------------------------*/

#define I2C_Register_CR1  ((uint8_t)0x00)
#define I2C_Register_CR2  ((uint8_t)0x04)
#define I2C_Register_OAR1 ((uint8_t)0x08)
#define I2C_Register_OAR2 ((uint8_t)0x0C)
#define I2C_Register_DR ((uint8_t)0x10)
#define I2C_Register_SR1 ((uint8_t)0x14)
#define I2C_Register_SR2 ((uint8_t)0x18)
#define I2C_Register_CCR ((uint8_t)0x1C)
#define I2C_Register_TRISE ((uint8_t)0x20)
#define IS_I2C_REGISTER    (REGISTER)     (((REGISTER) == I2C_Register_CR1) || \
                                   ((REGISTER) == I2C_Register_CR2) || \
                                   ((REGISTER) == I2C_Register_OAR1) || \
                                   ((REGISTER) == I2C_Register_OAR2) || \
                                   ((REGISTER) == I2C_Register_DR) || \
                                   ((REGISTER) == I2C_Register_SR1) || \
                                   ((REGISTER) == I2C_Register_SR2) || \
                                   ((REGISTER) == I2C_Register_CCR) || \
                                   ((REGISTER) == I2C_Register_TRISE))

 

/*-----------------I2C_NACK_position  ----------------------------*/

#define I2C_NACKPosition_Next ((uint16_t)0x0800)
#define I2C_NACKPosition_Current ((uint16_t)0xF7FF)
#define IS_I2C_NACK_POSITION(POSITION )     (((POSITION)== I2C_NACKPosition_Next)|| \
                                         ((POSITION)== I2C_NACKPosition_Current))

 

/*-----------------I2C_SMBus_alert_pin_level ----------------------------*/

#define I2C_SMBusAlert_Low  ((uint16_t)0x2000)
#define I2C_SMBusAlert_High ((uint16_t)0xDFFF)
#define IS_I2C_SMBUS_ALERT(ALERT)    (((ALERT) == I2C_SMBusAlert_Low) || \
                                                                       ((ALERT) == I2C_SMBusAlert_High))

 

 /*-----------------I2C_PEC_position ----------------------------*/

#define I2C_PECPosition_Next   ((uint16_t)0x0800)
#define I2C_PECPosition_Current   ((uint16_t)0xF7FF)
#define IS_I2C_PEC_POSITION(POSITION)    (((POSITION) == I2C_PECPosition_Next) || \
                                       ((POSITION) == I2C_PECPosition_Current))

 

 /*-----------------I2C_interrupts_definition ----------------------------*/

#define I2C_IT_BUF   ((uint16_t)0x0400)
#define I2C_IT_EVT   ((uint16_t)0x0200)
#define I2C_IT_ERR   ((uint16_t)0x0100)
#define IS_I2C_CONFIG_IT(IT)   ((((IT) & (uint16_t)0xF8FF) == 0x00) && ((IT) != 0x00))
#define I2C_IT_SMBALERT   ((uint32_t)0x01008000)
#define I2C_IT_TIMEOUT   ((uint32_t)0x01004000)
#define I2C_IT_PECERR   ((uint32_t)0x01001000)
#define I2C_IT_OVR   ((uint32_t)0x01000800)
#define I2C_IT_AF   ((uint32_t)0x01000400)
#define I2C_IT_ARLO   ((uint32_t)0x01000200)
#define I2C_IT_BERR   ((uint32_t)0x01000100)
#define I2C_IT_TXE   ((uint32_t)0x06000080)
#define I2C_IT_RXNE   ((uint32_t)0x06000040)
#define I2C_IT_STOPF   ((uint32_t)0x02000010)
#define I2C_IT_ADD10   ((uint32_t)0x02000008)
#define I2C_IT_BTF   ((uint32_t)0x02000004)
#define I2C_IT_ADDR   ((uint32_t)0x02000002)
#define I2C_IT_SB   ((uint32_t)0x02000001)
#define IS_I2C_CLEAR_IT(IT)   ((((IT) & (uint16_t)0x20FF) == 0x00) && ((IT) != (uint16_t)0x00))
#define IS_I2C_GET_IT(IT)(((IT) == I2C_IT_SMBALERT) || ((IT) == I2C_IT_TIMEOUT) || \
                           ((IT) == I2C_IT_PECERR) || ((IT) == I2C_IT_OVR) || \
                           ((IT) == I2C_IT_AF) || ((IT) == I2C_IT_ARLO) || \
                           ((IT) == I2C_IT_BERR) || ((IT) == I2C_IT_TXE) || \
                           ((IT) == I2C_IT_RXNE) || ((IT) == I2C_IT_STOPF) || \
                           ((IT) == I2C_IT_ADD10) || ((IT) == I2C_IT_BTF) || \
                           ((IT) == I2C_IT_ADDR) || ((IT) == I2C_IT_SB))

 

/*-----------------I2C_flags_definition ----------------------------*/

#define I2C_FLAG_DUALF   ((uint32_t)0x00800000)
     SR2 register flags. 
#define I2C_FLAG_SMBHOST   ((uint32_t)0x00400000)
#define I2C_FLAG_SMBDEFAULT   ((uint32_t)0x00200000)
#define I2C_FLAG_GENCALL   ((uint32_t)0x00100000)
#define I2C_FLAG_TRA   ((uint32_t)0x00040000)
#define I2C_FLAG_BUSY   ((uint32_t)0x00020000)
#define I2C_FLAG_MSL   ((uint32_t)0x00010000)
#define I2C_FLAG_SMBALERT   ((uint32_t)0x10008000)
     SR1 register flags. 
#define I2C_FLAG_TIMEOUT   ((uint32_t)0x10004000)
#define I2C_FLAG_PECERR   ((uint32_t)0x10001000)
#define I2C_FLAG_OVR   ((uint32_t)0x10000800)
#define I2C_FLAG_AF   ((uint32_t)0x10000400)
#define I2C_FLAG_ARLO   ((uint32_t)0x10000200)
#define I2C_FLAG_BERR   ((uint32_t)0x10000100)
#define I2C_FLAG_TXE   ((uint32_t)0x10000080)
#define I2C_FLAG_RXNE   ((uint32_t)0x10000040)
#define I2C_FLAG_STOPF   ((uint32_t)0x10000010)
#define I2C_FLAG_ADD10   ((uint32_t)0x10000008)
#define I2C_FLAG_BTF   ((uint32_t)0x10000004)
#define I2C_FLAG_ADDR   ((uint32_t)0x10000002)
#define I2C_FLAG_SB   ((uint32_t)0x10000001)
#define IS_I2C_CLEAR_FLAG(FLAG)   ((((FLAG) & (uint16_t)0x20FF) == 0x00) && ((FLAG) != (uint16_t)0x00))
#define IS_I2C_GET_FLAG(FLAG) (((FLAG) == I2C_FLAG_DUALF) || ((FLAG) == I2C_FLAG_SMBHOST) || \
                               ((FLAG) == I2C_FLAG_SMBDEFAULT) || ((FLAG) == I2C_FLAG_GENCALL) || \
                               ((FLAG) == I2C_FLAG_TRA) || ((FLAG) == I2C_FLAG_BUSY) || \
                               ((FLAG) == I2C_FLAG_MSL) || ((FLAG) == I2C_FLAG_SMBALERT) || \
                               ((FLAG) == I2C_FLAG_TIMEOUT) || ((FLAG) == I2C_FLAG_PECERR) || \
                               ((FLAG) == I2C_FLAG_OVR) || ((FLAG) == I2C_FLAG_AF) || \
                               ((FLAG) == I2C_FLAG_ARLO) || ((FLAG) == I2C_FLAG_BERR) || \
                               ((FLAG) == I2C_FLAG_TXE) || ((FLAG) == I2C_FLAG_RXNE) || \
                               ((FLAG) == I2C_FLAG_STOPF) || ((FLAG) == I2C_FLAG_ADD10) || \
                               ((FLAG) == I2C_FLAG_BTF) || ((FLAG) == I2C_FLAG_ADDR) || \
                               ((FLAG) == I2C_FLAG_SB))

 

/*-----------------I2C_Events ----------------------------*/

#define     I2C_EVENT_MASTER_MODE_SELECT   ((uint32_t)0x00030001)
     Communication start. 
#define     I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED   ((uint32_t)0x00070082)
     Address Acknowledge. 
#define     I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED   ((uint32_t)0x00030002)
#define     I2C_EVENT_MASTER_MODE_ADDRESS10   ((uint32_t)0x00030008)
#define     I2C_EVENT_MASTER_BYTE_RECEIVED   ((uint32_t)0x00030040)

     Communication events. 
#define     I2C_EVENT_MASTER_BYTE_TRANSMITTING   ((uint32_t)0x00070080)
#define     I2C_EVENT_MASTER_BYTE_TRANSMITTED   ((uint32_t)0x00070084)
#define     I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED   ((uint32_t)0x00020002)
     Communication start events. 
#define     I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED   ((uint32_t)0x00060082)
#define     I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED   ((uint32_t)0x00820000)
#define     I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED   ((uint32_t)0x00860080)
#define     I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED   ((uint32_t)0x00120000)
#define     I2C_EVENT_SLAVE_BYTE_RECEIVED   ((uint32_t)0x00020040)
     Communication events. 
#define     I2C_EVENT_SLAVE_STOP_DETECTED   ((uint32_t)0x00000010)
#define     I2C_EVENT_SLAVE_BYTE_TRANSMITTED   ((uint32_t)0x00060084)
#define     I2C_EVENT_SLAVE_BYTE_TRANSMITTING   ((uint32_t)0x00060080)
#define     I2C_EVENT_SLAVE_ACK_FAILURE   ((uint32_t)0x00000400)
#define     IS_I2C_EVENT(EVENT) (((EVENT) == I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED) || \
                             ((EVENT) == I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED) || \
                             ((EVENT) == I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED) || \
                             ((EVENT) == I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED) || \
                             ((EVENT) == I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED) || \
                             ((EVENT) == I2C_EVENT_SLAVE_BYTE_RECEIVED) || \
                             ((EVENT) == (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_DUALF)) || \
                             ((EVENT) == (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_GENCALL)) || \
                             ((EVENT) == I2C_EVENT_SLAVE_BYTE_TRANSMITTED) || \
                             ((EVENT) == (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_DUALF)) || \
                             ((EVENT) == (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_GENCALL)) || \
                             ((EVENT) == I2C_EVENT_SLAVE_STOP_DETECTED) || \
                             ((EVENT) == I2C_EVENT_MASTER_MODE_SELECT) || \
                             ((EVENT) == I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) || \
                             ((EVENT) == I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED) || \
                             ((EVENT) == I2C_EVENT_MASTER_BYTE_RECEIVED) || \
                             ((EVENT) == I2C_EVENT_MASTER_BYTE_TRANSMITTED) || \
                             ((EVENT) == I2C_EVENT_MASTER_BYTE_TRANSMITTING) || \
                             ((EVENT) == I2C_EVENT_MASTER_MODE_ADDRESS10) || \
                             ((EVENT) == I2C_EVENT_SLAVE_ACK_FAILURE))

 

/*-----------------I2C_own_address1----------------------------*/

#define IS_I2C_OWN_ADDRESS1(ADDRESS1)   ((ADDRESS1) <= 0x3FF)


/*-----------------I2C_clock_speed----------------------------*/

#define IS_I2C_CLOCK_SPEED(SPEED)   (((SPEED) >= 0x1) && ((SPEED) <= 400000))

#define IS_I2C_ALL_PERIPH(PERIPH)     (((PERIPH) == I2C1) || \ ((PERIPH) == I2C2) || \ ((PERIPH) == I2C3))
#define CR1_CLEAR_MASK   ((uint16_t)0xFBF5)
#define FLAG_MASK   ((uint32_t)0x00FFFFFF)
#define ITEN_MASK   ((uint32_t)0x07000000)


三:定义的功能函数

/*-----------------初始化和配置----------------------------*/
void I2C_AcknowledgeConfig(I2C_TypeDef * I2Cx,FunctionalState     NewState)            
说明:
        启用或禁用指定的I2C确认功能。
参数:
        I2Cx     :     其中x可以是1,2或3来选择I2C外设。
        NewState :     I2C确认的新状态。此参数可以是:ENABLE或DISABLE。
返回值:
        无     
void I2C_ARPCmd    (I2C_TypeDef *     I2Cx,FunctionalState  NewState)            
说明:
        启用或禁用指定的I2C ARP。
参数:
        I2Cx      :     其中x可以是1,2或3来选择I2C外设。
        NewState :     I2Cx ARP的新状态。此参数可以是:ENABLE或DISABLE。
返回值:
        无     
void I2C_Cmd(I2C_TypeDef *     I2Cx,FunctionalState     NewState)            
说明:
        启用或禁用指定的I2C外设。
参数:
        I2Cx      :     其中x可以是1,2或3来选择I2C外设。
        NewState :     I2Cx外设的新状态。此参数可以是:ENABLE或DISABLE。
返回值:
        无     
void I2C_DeInit    (I2C_TypeDef * I2Cx)     
说明:
        将I2Cx外设寄存器取消初始化为其默认复位值。
参数:
        I2Cx :     其中x可以是1,2或3来选择I2C外设。
返回值:
        无     
void I2C_DualAddressCmd(I2C_TypeDef * I2Cx,FunctionalState NewState )            
说明:
        启用或禁用指定的I2C双寻址模式。
参数:
        I2Cx :     其中x可以是1,2或3来选择I2C外设。
        NewState :     I2C双寻址模式的新状态。此参数可以是:ENABLE或DISABLE。
返回值:
        无     
void I2C_FastModeDutyCycleConfig(I2C_TypeDef * I2Cx,uint16_t I2C_DutyCycle)            
说明:
        选择指定的I2C快速模式占空比。
参数:
        I2Cx            : 其中x可以是1,2或3来选择I2C外设。
        I2C_DutyCycle : 指定快速模式占空比。此参数可以是以下值之一:
                I2C_DutyCycle_2:I2C快速模式Tlow / Thigh = 2
                I2C_DutyCycle_16_9:I2C快速模式Tlow / Thigh = 16/9
返回值:
        无     
void I2C_GeneralCallCmd(I2C_TypeDef * I2Cx,FunctionalState NewState)            
说明:
        启用或禁用指定的I2C广播呼叫功能。
参数:
        I2Cx      :     其中x可以是1,2或3来选择I2C外设。
        NewState :     I2C通用调用的新状态。此参数可以是:ENABLE或DISABLE。
返回值:
        无     
void I2C_GenerateSTART(I2C_TypeDef * I2Cx,FunctionalState    NewState)            
说明:
        生成I2Cx通信START条件。
参数:
        I2Cx      :     其中x可以是1,2或3来选择I2C外设。
        NewState :     I2C START条件生成的新状态。此参数可以是:ENABLE或DISABLE。
返回值:
        无     
void I2C_GenerateSTOP(I2C_TypeDef * I2Cx,FunctionalState NewState)            
说明:
        生成I2Cx通信STOP条件。
参数:
        I2Cx      :     其中x可以是1,2或3来选择I2C外设。
        NewState :     I2C STOP条件生成的新状态。此参数可以是:ENABLE或DISABLE。
返回值:
        无     
void I2C_Init(I2C_TypeDef * I2Cx,I2C_InitTypeDef *I2C_InitStruct)            
说明:
        根据I2C_InitStruct中的指定参数初始化I2Cx外设。
注意:
        要以400 KHz(快速模式)使用I2C,PCLK1频率(I2C外设输入时钟)必须是10 MHz的倍数。
参数:
        I2Cx            : 其中x可以是1,2或3来选择I2C外设。
        I2C_InitStruct : 指向I2C_InitTypeDef结构的指针,该结构包含指定I2C外设的配置信息。
返回值:
        无     
void I2C_NACKPositionConfig(I2C_TypeDef * I2Cx,uint16_t I2C_NACKPosition)            
说明:
        在主接收器模式下选择指定的I2C NACK位置。
注意:
        当要接收的数据数等于2时,此功能在I2C主接收器模式下非常有用。在这种情况下,应在数据接收开始之前调用此函数(使用参数I2C_NACKPosition_Next),如2字节接收过程中所述推荐参考手册中的章节:主接收器。
参数:
        I2Cx              :     其中x可以是1,2或3来选择I2C外设。
        I2C_NACKPosition :     指定NACK位置。此参数可以是以下值之一:
                    I2C_NACKPosition_Next:表示下一个字节是最后一个接收到的字节。
                    I2C_NACKPosition_Current:表示当前字节是最后接收的字节。
注意:
        此函数配置与I2C_PECPositionConfig()相同的位(POS),但旨在用于I2C模式,而I2C_PECPositionConfig()用于SMBUS模式。
返回值:
        无     
void I2C_OwnAddress2Config(I2C_TypeDef * I2Cx,uint8_t address)            
说明:
        配置指定的I2C自己的地址2。
参数:
        I2Cx    :其中x可以是1,2或3来选择I2C外设。
        address :指定7位I2C自己的地址2。
返回值:
        无     
void I2C_Send7bitAddress(I2C_TypeDef * I2Cx,uint8_t address,uint8_t I2C_Direction)            
说明:
        传输地址字节以选择从设备。
参数:
        I2Cx          :     其中x可以是1,2或3来选择I2C外设。
        address          : 指定要传输的从站地址
        I2C_Direction : 指定I2C设备是发送器还是接收器。此参数可以是以下值之一
                I2C_Direction_Transmitter:发送器模式
                I2C_Direction_Receiver   :接收器模式
返回值:
        无     
void I2C_SMBusAlertConfig(I2C_TypeDef * I2Cx,uint16_t I2C_SMBusAlert)            
说明:
        将SMBusAlert引脚驱动为高电平或低电平,以用于指定的I2C。
参数:
        I2Cx           : 其中x可以是1,2或3来选择I2C外设。
        I2C_SMBusAlert : 指定SMBAlert引脚级别。此参数可以是以下值之一:
                I2C_SMBusAlert_Low :SMBAlert引脚驱动为低电平
                I2C_SMBusAlert_High:SMBAlert引脚驱动为高电平
返回值:
        无     
void I2C_SoftwareResetCmd(2C_TypeDef * I2Cx,FunctionalState NewState)            
说明:
        启用或禁用指定的I2C软件复位。
注意:
        启用软件复位后,将释放I2C IO(这对于从总线错误中恢复非常有用)。
参数:
        I2Cx      :     其中x可以是1,2或3来选择I2C外设。
        NewState :     I2C软件复位的新状态。此参数可以是:ENABLE或DISABLE。
返回值:
        无     
void I2C_StretchClockCmd(I2C_TypeDef * I2Cx,FunctionalState  NewState)            
说明:
        启用或禁用指定的I2C时钟延长。
参数:
        I2Cx     :     其中x可以是1,2或3来选择I2C外设。
        NewState :     I2Cx时钟延长的新状态。此参数可以是:ENABLE或DISABLE。
返回值:
        无     
void I2C_StructInit    (I2C_InitTypeDef *     I2C_InitStruct)     
说明:
        使用其默认值填充每个I2C_InitStruct成员。
参数:
        I2C_InitStruct :     指向将被初始化的I2C_InitTypeDef结构的指针。
返回值:
        无     
/*-----------------数据传输---------------------------*/

uint8_t I2C_ReceiveData    (I2C_TypeDef *I2Cx )     
说明:
        返回I2Cx外设最新接收的数据。
参数:
        I2Cx :其中x可以是1,2或3来选择I2C外设。
返回值:
        该接收数据的值。
void I2C_SendData(I2C_TypeDef * I2Cx,uint8_t data)            
说明:
        通过I2Cx外设发送数据字节。
参数:
        I2Cx : 其中x可以是1,2或3来选择I2C外设。
        data : 要传输的字节..
返回值:
        无     

/*-----------------PEC管理---------------------------*/

void I2C_CalculatePEC(I2C_TypeDef * I2Cx,FunctionalState NewState     )            
说明:
        启用或禁用传输字节的PEC值计算。
参数:
        I2Cx :     其中x可以是1,2或3来选择I2C外设。
        NewState :     I2Cx PEC值计算的新状态。此参数可以是:ENABLE或DISABLE。
返回值:
        无     
uint8_t I2C_GetPEC(I2C_TypeDef * I2Cx)     
说明:        
        返回指定I2C的PEC值。
参数:
        I2Cx :     其中x可以是1,2或3来选择I2C外设。
返回值:
        该PEC值。
void I2C_PECPositionConfig(I2C_TypeDef * I2Cx,uint16_t I2C_PECPosition     )            
说明:
        选择指定的I2C PEC位置。
参数:
        I2Cx : 其中x可以是1,2或3来选择I2C外设。
        I2C_PECPosition :     指定PEC位置。此参数可以是以下值之一:
                I2C_PECPosition_Next:表示下一个字节是PEC
                I2C_PECPosition_Current:表示当前字节为PEC
注意:
        此函数配置与I2C_NACKPositionConfig()相同的位(POS),但旨在用于SMBUS模式,而I2C_NACKPositionConfig()用于I2C模式。
返回值:
        无     
void I2C_TransmitPEC(I2C_TypeDef * I2Cx,FunctionalState NewState)            
说明:
        启用或禁用指定的I2C PEC传输。
参数:
        I2Cx      :     其中x可以是1,2或3来选择I2C外设。
        NewState :     I2C PEC传输的新状态。此参数可以是:ENABLE或DISABLE。
返回值:
        无

/*-----------------DMA传输管理---------------------------*/

void I2C_DMACmd    (I2C_TypeDef * I2Cx,FunctionalState NewState     )            
说明:
        启用或禁用指定的I2C DMA请求。
参数:
        I2Cx      :     其中x可以是1,2或3来选择I2C外设。
        NewState :     I2C DMA传输的新状态。此参数可以是:ENABLE或DISABLE。
返回值:
        无     
void I2C_DMALastTransferCmd    (I2C_TypeDef * I2Cx,FunctionalState NewState     )            
说明:
        指定下一个DMA传输是最后一个。
参数:
        I2Cx :     其中x可以是1,2或3来选择I2C外设。
        NewState :     I2C DMA最后一次传输的新状态。此参数可以是:ENABLE或DISABLE。
返回值:
        无 

 

/*-----------------中断事件和标志管理---------------------------*/

ErrorStatus I2C_CheckEvent(I2C_TypeDef * I2Cx,uint32_t I2C_EVENT)            
说明:
        检查最后一个I2Cx事件是否等于作为参数传递的事件。
参数:
        I2Cx       : 其中x可以是1,2或3来选择I2C外设。
        I2C_EVENT : 指定要检查的事件。此参数可以是以下值之一:
                I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED:EV1
                I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED:EV1
                I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED:EV1
                I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED:EV1
                I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED:EV1
                I2C_EVENT_SLAVE_BYTE_RECEIVED:EV2
                (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_DUALF):EV2
                (I2C_EVENT_SLAVE_BYTE_RECEIVED | I2C_FLAG_GENCALL):EV2
                I2C_EVENT_SLAVE_BYTE_TRANSMITTED:EV3
                (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_DUALF):EV3
                (I2C_EVENT_SLAVE_BYTE_TRANSMITTED | I2C_FLAG_GENCALL):EV3
                I2C_EVENT_SLAVE_ACK_FAILURE:EV3_2
                I2C_EVENT_SLAVE_STOP_DETECTED:EV4
                I2C_EVENT_MASTER_MODE_SELECT:EV5
                I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED:EV6
                I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED:EV6
                I2C_EVENT_MASTER_BYTE_RECEIVED:EV7
                I2C_EVENT_MASTER_BYTE_TRANSMITTING:EV8
                I2C_EVENT_MASTER_BYTE_TRANSMITTED:EV8_2
                I2C_EVENT_MASTER_MODE_ADDRESS10:EV9
注意:
        有关事件的详细说明,请参阅stm32f4xx_i2c.h文件中的I2C_Events部分。
返回值:
        一个ErrorStatus枚举值:
        成功:最后一个事件等于I2C_EVENT
        错误:最后一个事件与I2C_EVENT不同
void I2C_ClearFlag(I2C_TypeDef * I2Cx,uint32_t I2C_FLAG)            
说明:
        清除I2Cx的挂起标志。
参数:
        I2Cx      :     其中x可以是1,2或3来选择I2C外设。
        I2C_FLAG :     指定要清除的标志。此参数可以是以下值的任意组合:
                I2C_FLAG_SMBALERT:SMBus警报标志
                I2C_FLAG_TIMEOUT:超时或Tlow错误标志
                I2C_FLAG_PECERR:接收标志中的PEC错误
                I2C_FLAG_OVR:溢出/欠载标志(从模式)
                I2C_FLAG_AF:确认失败标志
                I2C_FLAG_ARLO:仲裁丢失标志(主模式)
                I2C_FLAG_BERR:总线错误标志
注意:
        STOPF(STOP检测)由软件序列清除:对I2C_SR1寄存器(I2C_GetFlagStatus())的读操作,然后对I2C_CR1寄存器(I2C_Cmd()重新使能I2C外设)的写操作。
        ADD10(发送10位报头)由软件序列清零:对I2C_SR1(I2C_GetFlagStatus())的读操作,然后在DR寄存器中写入地址的第二个字节。
        BTF(字节传输已经结束)由软件序列清零:读取操作以I2C_SR1寄存器(I2C_GetFlagStatus() ),随后读取/写入到I2C_DR寄存器(I2C_SendData() )。
        ADDR(发送地址)由软件序列清零:对I2C_SR1寄存器(I2C_GetFlagStatus())的读操作,然后是对I2C_SR2寄存器的读操作((void)(I2Cx-> SR2))。
        (读取操作以I2C_SR1寄存器:SB(开始位)被清零软件序列I2C_GetFlagStatus)( ),接着写操作I2C_DR注册(I2C_SendData() )。
返回值:
        无     
void I2C_ClearITPendingBit(I2C_TypeDef * I2Cx,uint32_t    I2C_IT)            
说明:
        清除I2Cx的中断挂起位。
参数:
        I2Cx  : 其中x可以是1,2或3来选择I2C外设。
        I2C_IT: 指定要清除的中断挂起位。此参数可以是以下值的任意组合:
                I2C_IT_SMBALERT:SMBus报警中断
                I2C_IT_TIMEOUT:超时或Tlow错误中断
                I2C_IT_PECERR:接收中断中的PEC错误
                I2C_IT_OVR:溢出/欠载中断(从模式)
                I2C_IT_AF:确认故障中断
                I2C_IT_ARLO:仲裁丢失中断(主模式)
                I2C_IT_BERR:总线错误中断
注意:
        STOPF(停止检测)由软件序列清零:对I2C_SR1寄存器(I2C_GetITStatus())的读操作,然后对I2C_CR1寄存器(I2C_Cmd()重新使能I2C外设)的写操作。
        通过软件序列清零ADD10(发送10位报头):对I2C_SR1(I2C_GetITStatus())的读操作,然后在I2C_DR寄存器中写入地址的第二个字节。
        BTF(字节传输已经结束)由软件序列清零:读取操作以I2C_SR1寄存器(I2C_GetITStatus() ),随后读取/写入到I2C_DR寄存器(I2C_SendData() )。
        ADDR(发送地址)由软件序列清零:对I2C_SR1寄存器(I2C_GetITStatus())的读操作,然后对I2C_SR2寄存器进行读操作((void)(I2Cx-> SR2))。
        SB(起始位)由软件序列清零:读取操作以I2C_SR1寄存器(I2C_GetITStatus() ),其次是写操作I2C_DR寄存器(I2C_SendData() )。
返回值:
        无     
FlagStatus I2C_GetFlagStatus(I2C_TypeDef *I2Cx,uint32_t I2C_FLAG     )            
说明:
        检查是否设置了指定的I2C标志。
参数:
        I2Cx      :     其中x可以是1,2或3来选择I2C外设。
        I2C_FLAG :     指定要检查的标志。此参数可以是以下值之一:
                I2C_FLAG_DUALF:双标志(从模式)
                I2C_FLAG_SMBHOST:SMBus主机头(从模式)
                I2C_FLAG_SMBDEFAULT:SMBus默认标头(从模式)
                I2C_FLAG_GENCALL:通用调用标头标志(从模式)
                I2C_FLAG_TRA:发送器/接收器标志
                I2C_FLAG_BUSY:总线忙标志
                I2C_FLAG_MSL:主/从标志
                I2C_FLAG_SMBALERT:SMBus警报标志
                I2C_FLAG_TIMEOUT:超时或Tlow错误标志
                I2C_FLAG_PECERR:接收标志中的PEC错误
                I2C_FLAG_OVR:溢出/欠载标志(从模式)
                I2C_FLAG_AF:确认失败标志
                I2C_FLAG_ARLO:仲裁丢失标志(主模式)
                I2C_FLAG_BERR:总线错误标志
                I2C_FLAG_TXE:数据寄存器空标志(发送器)
                I2C_FLAG_RXNE:数据寄存器不为空(接收器)标志
                I2C_FLAG_STOPF:停止检测标志(从模式)
                I2C_FLAG_ADD10:10位标头发送标志(主模式)
                I2C_FLAG_BTF:字节传输完成标志
                I2C_FLAG_ADDR:地址发送标志(主模式)“ADSL”地址匹配标志(从模式)“ENDAD”
                I2C_FLAG_SB:起始位标志(主模式)
返回值:
        该I2C_FLAG的新状态(SET或RESET)。
ITStatus I2C_GetITStatus(I2C_TypeDef * I2Cx,uint32_t I2C_IT)            
说明:
        检查是否发生了指定的I2C中断。
参数:
        I2Cx   : 其中x可以是1,2或3来选择I2C外设。
        I2C_IT : 指定要检查的中断源。此参数可以是以下值之一:
                I2C_IT_SMBALERT:SMBus警报标志
                I2C_IT_TIMEOUT:超时或Tlow错误标志
                I2C_IT_PECERR:接收标志中的PEC错误
                I2C_IT_OVR:溢出/欠载标志(从模式)
                I2C_IT_AF:确认失败标志
                I2C_IT_ARLO:仲裁丢失标志(主模式)
                I2C_IT_BERR:总线错误标志
                I2C_IT_TXE:数据寄存器空标志(发送器)
                I2C_IT_RXNE:数据寄存器不为空(接收器)标志
                I2C_IT_STOPF:停止检测标志(从模式)
                I2C_IT_ADD10:10位标头发送标志(主模式)
                I2C_IT_BTF:字节传输完成标志
                I2C_IT_ADDR:地址发送标志(主模式)“ADSL”地址匹配标志(从模式)“ENDAD”
                I2C_IT_SB:起始位标志(主模式)
返回值:
        该I2C_IT的新状态(SET或RESET)。
uint32_t I2C_GetLastEvent(I2C_TypeDef * I2Cx)     
说明:
        返回最后一个I2Cx事件。
参数:
        I2Cx :     其中x可以是1,2或3来选择I2C外设。
注意:
        有关事件的详细说明,请参阅stm32f4xx_i2c.h文件中的I2C_Events部分。
返回值:
        该最后一次活动
void I2C_ITConfig(I2C_TypeDef * I2Cx,uint16_t     I2C_IT,FunctionalState NewState)            
说明:
        启用或禁用指定的I2C中断。
参数:
        I2Cx   : 其中x可以是1,2或3来选择I2C外设。
        I2C_IT : 指定要启用或禁用的I2C中断源。此参数可以是以下值的任意组合:
                I2C_IT_BUF:缓冲中断屏蔽
                I2C_IT_EVT:事件中断屏蔽
                I2C_IT_ERR:错误中断屏蔽
        NewState :     指定I2C中断的新状态。此参数可以是:ENABLE或DISABLE。
返回值:
        无     
uint16_t I2C_ReadRegister(I2C_TypeDef * I2Cx,uint8_t I2C_Register     )            
说明:
        读取指定的I2C寄存器并返回其值。
参数:
        I2C_Register :     指定要读取的寄存器。此参数可以是以下值之一:
                I2C_Register_CR1:CR1寄存器。
                I2C_Register_CR2:CR2寄存器。
                I2C_Register_OAR1:OAR1寄存器。
                I2C_Register_OAR2:OAR2寄存器。
                I2C_Register_DR:DR寄存器。
                I2C_Register_SR1:SR1寄存器。
                I2C_Register_SR2:SR2寄存器。
                I2C_Register_CCR:CCR寄存器。
                I2C_Register_TRISE:TRISE寄存器。
返回值:
        该读寄存器的值。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值