一:定义的数据结构
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寄存器。
返回值:
该读寄存器的值。