这个I2C库的资料也整理好了。有需要的看一看吧。这是用cube生成的文件整理的。Hal的库。
- /*I2C配置结构定义*/
- typedef struct
- {
- uint32_t Timing; /*指定I2C_TIMINGR_register值。该参数通过参考I2C初始化计算得出*/
- uint32_t OwnAddress1; /*指定第一个设备自己的地址。此参数可以是7位或10位地址。*/
- uint32_t AddressingMode; /*指定是选择7位还是10位寻址模式。此参数可以是I2C_ADDRESSING_MODE*/的值
- uint32_t DualAddressMode; /*指定是否选择双重寻址模式。此参数可以是I2C_DUAL_ADDRESSING_MODE*/
- uint32_t OwnAddress2; /*如果选择双寻址模式,则指定第二个设备自己的地址此参数可以是7位地址。*/
- uint32_t OwnAddress2Masks;/*如果选择双重寻址模式,则指定确认掩码地址第二个设备自己的地址,此参数可以是I2C_OWN_ADDRESS2_MASKS的值*/
- uint32_t GeneralCallMode; /*指定是否选择常规呼叫模式。此参数可以是I2C_GENERAL_CALL_ADDRESSING_MODE的值*/
- uint32_t NoStretchMode; /*指定是否选择nostretch模式。此参数可以是I2C_NOSTRETCH_MODE的值*/
- }I2C_InitTypeDef;
- /*HAL状态结构定义
- *HALI2C状态值编码遵循下面描述的位图:\n
- * b7-b6错误信息\n
- * 00:无错误\n
- * 01:中止(正在进行中的用户请求中止)\n
- * 10:超时\n
- * 11:错误\n
- * b5 外围设备初始化状态\n
- * 0:重置(外围设备未初始化)\n
- * 1:已完成初始化(已初始化外围设备并准备使用。已调用HALI2CInit函数)\n
- * b4(未使用)\n
- * x:应设置为0\n
- * b3\n
- * 0:就绪或忙碌(无监听模式正在进行中)\n
- * 1:监听(地址监听模式中的外围设备)\n
- * b2内部过程状态\n
- * 0:就绪\n
- * 1:忙(外围设备忙于某些配置或内部操作)\n
- * b1接收状态\n
- * 0:就绪(无正在进行的接收操作)\n
- * 1:忙(正在进行Rx操作)\n
- * b0Tx状态\n
- * 0:就绪(没有正在进行的发送操作)\n
- * 1:忙(正在进行发送操作)
- */
- typedef enum
- {
- HAL_I2C_STATE_RESET = 0x00U, /*外围设备尚未初始化*/
- HAL_I2C_STATE_READY = 0x20U, /*已初始化外围设备并准备使用*/
- HAL_I2C_STATE_BUSY = 0x24U, /*内部进程正在进行*/
- HAL_I2C_STATE_BUSY_TX = 0x21U, /*数据传输过程正在进行*/
- HAL_I2C_STATE_BUSY_RX = 0x22U, /*数据接收过程正在进行*/
- HAL_I2C_STATE_LISTEN = 0x28U, /*地址监听模式正在进行*/
- HAL_I2C_STATE_BUSY_TX_LISTEN = 0x29U, /*地址监听模式和数据传输正在进行中*/
- HAL_I2C_STATE_BUSY_RX_LISTEN = 0x2AU, /*地址监听模式和数据接收正在进行中*/
- HAL_I2C_STATE_ABORT = 0x60U, /*正在中止用户请求*/
- HAL_I2C_STATE_TIMEOUT = 0xA0U, /*超时状态*/
- HAL_I2C_STATE_ERROR = 0xE0U /*错误*/
- }HAL_I2C_StateTypeDef;
- /*HAL模式结构定义
- *HALI2C模式值编码遵循下面描述的位图:\n
- * b7(未使用)\n
- * x:应设置为0\n
- * b6\n
- * 0:无\n
- * 1:内存(HALI2C通信处于内存模式)\n
- * b5\n
- * 0:无\n
- * 1:从站(HALI2C通信处于从站模式)\n
- * b4\n
- * 0:无\n
- * 1:主机(HALI2C通讯处于主机模式)\n
- * b3-b2-b1-b0(未使用)\n
- * xxxx:应设置为0000
- */
- typedef enum
- {
- HAL_I2C_MODE_NONE =0x00U, /*进行中没有I2C通信*/
- HAL_I2C_MODE_MASTER =0x10U,/*I2C通讯处于主模式*/
- HAL_I2C_MODE_SLAVE =0x20U,/*I2C通信处于从模式*/
- HAL_I2C_MODE_MEM =0x40U /*I2C通信处于内存模式*/
- }HAL_I2C_ModeTypeDef;
- /*的I2C错误代码定义*/
- #定义HAL_I2C_ERROR_NONE (0x00000000U) /*没有错误*/
- #定义HAL_I2C_ERROR_BERR (0x00000001U) /*错误错误*/
- #定义HAL_I2C_ERROR_ARLO (0x00000002U) /*ARLO错误*/
- #定义HAL_I2C_ERROR_AF (0x00000004U) /*ACKF错误*/
- #定义HAL_I2C_ERROR_OVR (0x00000008U) /*OVR错误*/
- #定义HAL_I2C_ERROR_DMA (0x00000010U) /*DMA传输错误*/
- #定义HAL_I2C_ERROR_TIMEOUT (0x00000020U) /*超时错误*/
- #定义HAL_I2C_ERROR_SIZE (0x00000040U) /*大小管理错误*/
- #定义HAL_I2C_ERROR_DMA_PARAM (0x00000080U) /*DMA参数错误*/
- #if(USE_HAL_I2C_REGISTER_CALLBACKS==1)
- #define HAL_I2C_ERROR_INVALID_CALLBACK (0x00000100U) /*无效的回调错误*/
- #endif/*USE_HAL_I2C_REGISTER_CALLBACKS*/
- #define HAL_I2C_ERROR_INVALID_PARAM (0x00000200U) /*无效参数错误*/
- /*I2C句柄结构定义*/
- typedef struct __I2C_HandleTypeDef
- {
- I2C_TypeDef *Instance; /*I2C注册基地址*/
- I2C_InitTypeDef Init; /*I2C通讯参数*/
- uint8_t *pBuffPtr; /*指向I2C传输缓冲区的指针*/
- uint16_t XferSize; /*I2C传输大小*/
- __IOuint16_t XferCount; /*I2C传输计数器*/
- __IOuint32_t XferOptions; /*I2C连续传输选项,此参数可以是I2C_XFEROPTIONS的值*/
- __IOuint32_t PreviousState; /*I2C通信先前状态*/
- HAL_StatusTypeDef(*XferISR)(struct__I2C_HandleTypeDef*hi2c,uint32_tITFlags,uint32_tITSources);/*I2C传输IRQ处理程序函数指针*/
- DMA_HandleTypeDef *hdmatx; /*I2CTxDMA句柄参数*/
- DMA_HandleTypeDef *hdmarx; /*I2CRxDMA句柄参数*/
- HAL_LockTypeDef Lock; /*I2C锁定对象*/
- __IOHAL_I2C_StateTypeDef State; /*I2C通讯状态*/
- __IOHAL_I2C_ModeTypeDef Mode; /*I2C通讯模式*/
- __IOuint32_t ErrorCode; /*I2C错误代码*/
- __IOuint32_t AddrEventCount;/*I2C地址事件计数器*/
- #if(USE_HAL_I2C_REGISTER_CALLBACKS==1)
- void (* MasterTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); /*I2C主Tx传输完成的回调*/
- void (* MasterRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); /*I2C主Rx传输完成的回调*/
- void (* SlaveTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); /*I2C从机Tx传输完成回调*/
- void (* SlaveRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); /*I2C从Rx传输完成回调*/
- void (* ListenCpltCallback)(struct __I2C_HandleTypeDef *hi2c); /*I2C监听完成回调*/
- void (* MemTxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); /*I2C内存发送传输完成回调*/
- void (* MemRxCpltCallback)(struct __I2C_HandleTypeDef *hi2c); /*I2C内存接收传输完成回调*/
- void (* ErrorCallback)(struct __I2C_HandleTypeDef *hi2c); /*I2C错误回调*/
- void (* AbortCpltCallback)(struct __I2C_HandleTypeDef *hi2c); /*I2C中止回调*/
- void (* AddrCallback)(struct __I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode); /*I2C从站地址匹配回调*/
- void (* MspInitCallback)(struct __I2C_HandleTypeDef *hi2c); /*I2CMsp初始化回调*/
- void (* MspDeInitCallback)(struct __I2C_HandleTypeDef *hi2c); /*I2CMspDeInit回调*/
- #endif/*USE_HAL_I2C_REGISTER_CALLBACKS*/
- }I2C_HandleTypeDef;
- /*HALI2C回调ID枚举定义*/
- typedef enum
- {
- HAL_I2C_MASTER_TX_COMPLETE_CB_ID =0x00U, /*I2C主Tx传输完成的回调ID*/
- HAL_I2C_MASTER_RX_COMPLETE_CB_ID =0x01U, /*I2C主Rx传输完成的回调ID*/
- HAL_I2C_SLAVE_TX_COMPLETE_CB_ID =0x02U, /*I2C从机Tx传输完成的回调ID*/
- HAL_I2C_SLAVE_RX_COMPLETE_CB_ID =0x03U, /*I2C从站Rx传输完成的回调ID*/
- HAL_I2C_LISTEN_COMPLETE_CB_ID =0x04U, /*I2C监听完成回调ID*/
- HAL_I2C_MEM_TX_COMPLETE_CB_ID =0x05U, /*I2C内存Tx传输回调ID*/
- HAL_I2C_MEM_RX_COMPLETE_CB_ID =0x06U, /*I2C内存接收传输完成的回调ID*/
- HAL_I2C_ERROR_CB_ID =0x07U, /*I2C错误回调ID*/
- HAL_I2C_ABORT_CB_ID =0x08U, /*I2C中止回调ID*/
- HAL_I2C_MSPINIT_CB_ID =0x09U, /*I2CMsp初始化回调ID*/
- HAL_I2C_MSPDEINIT_CB_ID =0x0AU /*I2CMspDeInit回调ID*/
- }HAL_I2C_CallbackIDTypeDef;
- /*HALI2C回调指针定义*/
- typedef void (*pI2C_CallbackTypeDef)(I2C_HandleTypeDef *hi2c); /*指向I2C回调函数的指针*/
- typedef void (*pI2C_AddrCallbackTypeDef)(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode); /*指向I2C地址匹配回调函数的指针*/
- /*I2C顺序传输选项*/
- #define I2C_FIRST_FRAME ((uint32_t)I2C_SOFTEND_MODE)
- #define I2C_FIRST_AND_NEXT_FRAME ((uint32_t)(I2C_RELOAD_MODE | I2C_SOFTEND_MODE))
- #define I2C_NEXT_FRAME ((uint32_t)(I2C_RELOAD_MODE | I2C_SOFTEND_MODE))
- #define I2C_FIRST_AND_LAST_FRAME ((uint32_t)I2C_AUTOEND_MODE)
- #define I2C_LAST_FRAME ((uint32_t)I2C_AUTOEND_MODE)
- #define I2C_LAST_FRAME_NO_STOP ((uint32_t)I2C_SOFTEND_MODE)
- /*I2C寻址模式*/
- #define I2C_ADDRESSINGMODE_7BIT (0x00000001U)
- #define I2C_ADDRESSINGMODE_10BIT (0x00000002U)
- /*I2C双寻址模式*/
- #define I2C_DUALADDRESS_DISABLE (0x00000000U)
- #define I2C_DUALADDRESS_ENABLE I2C_OAR2_OA2EN
- /*I2C自己地址的2个掩码*/
- #define I2C_OA2_NOMASK ((uint8_t)0x00U)
- #define I2C_OA2_MASK01 ((uint8_t)0x01U)
- #define I2C_OA2_MASK02 ((uint8_t)0x02U)
- #define I2C_OA2_MASK03 ((uint8_t)0x03U)
- #define I2C_OA2_MASK04 ((uint8_t)0x04U)
- #define I2C_OA2_MASK05 ((uint8_t)0x05U)
- #define I2C_OA2_MASK06 ((uint8_t)0x06U)
- #define I2C_OA2_MASK07 ((uint8_t)0x07U)
- /*I2C常规呼叫寻址模式*/
- #define I2C_GENERALCALL_DISABLE (0x00000000U)
- #define I2C_GENERALCALL_ENABLE I2C_CR1_GCEN
- /*I2C无拉伸模式*/
- #define I2C_NOSTRETCH_DISABLE (0x00000000U)
- #define I2C_NOSTRETCH_ENABLE I2C_CR1_NOSTRETCH
- /*I2C内存地址大小*/
- #define I2C_MEMADD_SIZE_8BIT (0x00000001U)
- #define I2C_MEMADD_SIZE_16BIT (0x00000002U)
- /*I2C传输方向主视点*/
- #define I2C_DIRECTION_TRANSMIT (0x00000000U)
- #define I2C_DIRECTION_RECEIVE (0x00000001U)
- /*I2C重新加载结束模式*/
- #define I2C_RELOAD_MODE I2C_CR2_RELOAD
- #define I2C_AUTOEND_MODE I2C_CR2_AUTOEND
- #define I2C_SOFTEND_MODE (0x00000000U)
- /*I2C启动或停止模式*/
- #define I2C_NO_STARTSTOP (0x00000000U)
- #define I2C_GENERATE_STOP (uint32_t)(0x80000000U | I2C_CR2_STOP)
- #define I2C_GENERATE_START_READ (uint32_t)(0x80000000U | I2C_CR2_START | I2C_CR2_RD_WRN)
- #define I2C_GENERATE_START_WRITE (uint32_t)(0x80000000U | I2C_CR2_START)
- /*I2C中断配置定义*/
- #define I2C_IT_ERRI I2C_CR1_ERRIE
- #define I2C_IT_TCI I2C_CR1_TCIE
- #define I2C_IT_STOPI I2C_CR1_STOPIE
- #define I2C_IT_NACKI I2C_CR1_NACKIE
- #define I2C_IT_ADDRI I2C_CR1_ADDRIE
- #define I2C_IT_RXI I2C_CR1_RXIE
- #define I2C_IT_TXI I2C_CR1_TXIE
- /*I2C标志定义*/
- #define I2C_FLAG_TXE I2C_ISR_TXE
- #define I2C_FLAG_TXIS I2C_ISR_TXIS
- #define I2C_FLAG_RXNE I2C_ISR_RXNE
- #define I2C_FLAG_ADDR I2C_ISR_ADDR
- #define I2C_FLAG_AF I2C_ISR_NACKF
- #define I2C_FLAG_STOPF I2C_ISR_STOPF
- #define I2C_FLAG_TC I2C_ISR_TC
- #define I2C_FLAG_TCR I2C_ISR_TCR
- #define I2C_FLAG_BERR I2C_ISR_BERR
- #define I2C_FLAG_ARLO I2C_ISR_ARLO
- #define I2C_FLAG_OVR I2C_ISR_OVR
- #define I2C_FLAG_PECERR I2C_ISR_PECERR
- #define I2C_FLAG_TIMEOUT I2C_ISR_TIMEOUT
- #define I2C_FLAG_ALERT I2C_ISR_ALERT
- #define I2C_FLAG_BUSY I2C_ISR_BUSY
- #define I2C_FLAG_DIR I2C_ISR_DIR
- /*I2C句柄状态*/
- #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
- #define __HAL_I2C_RESET_HANDLE_STATE(__HANDLE__) do{ \
- (__HANDLE__)->State = HAL_I2C_STATE_RESET; \
- (__HANDLE__)->MspInitCallback = NULL; \
- (__HANDLE__)->MspDeInitCallback = NULL; \
- } while(0)
- #else
- #define __HAL_I2C_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_I2C_STATE_RESET)
- #endif
- /*启用指定的I2C中断。
- *__HANDLE__指定I2C句柄。
- *__INTERRUPT__指定要启用的中断源。
- *此参数可以是下列值之一:
- *I2C_IT_ERRI错误中断
- *I2C_IT_TCI传输完成中断
- *I2C_IT_STOPISTOP检测中断
- *I2C_IT_NACKINACK接收中断
- *I2C_IT_ADDRI地址匹配中断
- *I2C_IT_RXIRX中断
- *I2C_IT_TXITX中断
- */
- #define __HAL_I2C_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR1 |= (__INTERRUPT__))
- /*禁用指定的I2C中断。
- *__HANDLE__指定I2C句柄。
- *__INTERRUPT__指定要禁用的中断源。
- *此参数可以是下列值之一:
- *I2C_IT_ERRI错误中断
- *I2C_IT_TCI传输完成中断
- *I2C_IT_STOPISTOP检测中断
- *I2C_IT_NACKINACK接收中断
- *I2C_IT_ADDRI地址匹配中断
- *I2C_IT_RXIRX中断
- *I2C_IT_TXITX中断
- */
- #define __HAL_I2C_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->CR1 &= (~(__INTERRUPT__)))
- /*检查是否启用了指定的I2C中断源。
- *__HANDLE__指定I2C句柄。
- *__INTERRUPT__指定要检查的I2C中断源。
- *此参数可以是下列值之一:
- *I2C_IT_ERRI错误中断
- *I2C_IT_TCI传输完成中断
- *I2C_IT_STOPISTOP检测中断
- *I2C_IT_NACKINACK接收中断
- *I2C_IT_ADDRI地址匹配中断
- *I2C_IT_RXIRX中断
- *I2C_IT_TXITX中断
- */
- #define __HAL_I2C_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->CR1 & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
- /*检查是否设置了指定的I2C标志。
- *__HANDLE__指定I2C句柄。
- *__FLAG__指定要检查的标志。
- *此参数可以是下列值之一:
- *I2C_FLAG_TXE发送数据寄存器为空
- *I2C_FLAG_TXIS发送中断状态
- *I2C_FLAG_RXNE接收数据寄存器不为空
- *I2C_FLAG_ADDR地址匹配(从模式)
- *I2C_FLAG_AF收到确认失败标志
- *I2C_FLAG_STOPF停止检测标志
- *I2C_FLAG_TC传输完成(主模式)
- *I2C_FLAG_TCR传输完成重新加载
- *I2C_FLAG_BERR总线错误
- *I2C_FLAG_ARLO仲裁丢失
- *I2C_FLAG_OVR超限/不足
- *I2C_FLAG_PECERR接收中的PEC错误
- *I2C_FLAG_TIMEOUT超时或低速检测标志
- *I2C_FLAG_ALERTSMBus警报
- *I2C_FLAG_BUSY总线忙
- *I2C_FLAG_DIR传输方向(从模式)
- */
- #define I2C_FLAG_MASK (0x0001FFFFU)
- #define __HAL_I2C_GET_FLAG(__HANDLE__, __FLAG__) (((((__HANDLE__)->Instance->ISR) & (__FLAG__)) == (__FLAG__)) ? SET : RESET)
- /*清除I2C挂起标志,该标志通过在特定位写入1来清除。
- *__HANDLE__指定I2C句柄。
- *__FLAG__指定要清除的标志。
- *此参数可以是以下值的任意组合:
- *I2C_FLAG_TXE发送数据寄存器为空
- *I2C_FLAG_ADDR地址匹配(从模式)
- *I2C_FLAG_AF收到确认失败标志
- *I2C_FLAG_STOPF停止检测标志
- *I2C_FLAG_BERR总线错误
- *I2C_FLAG_ARLO仲裁丢失
- *I2C_FLAG_OVR超限/不足
- *I2C_FLAG_PECERR接收中的PEC错误
- *I2C_FLAG_TIMEOUT超时或低速检测标志
- *I2C_FLAG_ALERTSMBus警报
- */
- #define __HAL_I2C_CLEAR_FLAG(__HANDLE__, __FLAG__) (((__FLAG__) == I2C_FLAG_TXE) ? ((__HANDLE__)->Instance->ISR |= (__FLAG__)) \
- : ((__HANDLE__)->Instance->ICR = (__FLAG__)))
- /*启用指定的I2C外设。*/
- #define __HAL_I2C_ENABLE(__HANDLE__) (SET_BIT((__HANDLE__)->Instance->CR1, I2C_CR1_PE))
- /*禁用指定的I2C外设。*/
- #define __HAL_I2C_DISABLE(__HANDLE__) (CLEAR_BIT((__HANDLE__)->Instance->CR1, I2C_CR1_PE))
- /*在从模式下生成一个非确认I2C外设。*/
- #define __HAL_I2C_GENERATE_NACK(__HANDLE__) (SET_BIT((__HANDLE__)->Instance->CR2, I2C_CR2_NACK))
- /*初始化和取消初始化功能**********************************/
- HAL_StatusTypeDef HAL_I2C_Init(I2C_HandleTypeDef *hi2c);
- HAL_StatusTypeDef HAL_I2C_DeInit(I2C_HandleTypeDef *hi2c);
- void HAL_I2C_MspInit(I2C_HandleTypeDef *hi2c);
- void HAL_I2C_MspDeInit(I2C_HandleTypeDef *hi2c);
- /*回调注册/取消注册功能***********************************/
- #if (USE_HAL_I2C_REGISTER_CALLBACKS == 1)
- HAL_StatusTypeDef HAL_I2C_RegisterCallback(I2C_HandleTypeDef *hi2c, HAL_I2C_CallbackIDTypeDef CallbackID, pI2C_CallbackTypeDef pCallback);
- HAL_StatusTypeDef HAL_I2C_UnRegisterCallback(I2C_HandleTypeDef *hi2c, HAL_I2C_CallbackIDTypeDef CallbackID);
- HAL_StatusTypeDef HAL_I2C_RegisterAddrCallback(I2C_HandleTypeDef *hi2c, pI2C_AddrCallbackTypeDef pCallback);
- HAL_StatusTypeDef HAL_I2C_UnRegisterAddrCallback(I2C_HandleTypeDef *hi2c);
- #endif /* USE_HAL_I2C_REGISTER_CALLBACKS */
- /*输入和输出操作函数*/
- /*IO操作功能****************************************************/
- /*阻止模式:轮询*/
- HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);
- HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);
- HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout);
- HAL_StatusTypeDef HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout);
- HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);
- HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);
- HAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Trials, uint32_t Timeout);
- /*非阻塞模式:中断*/
- HAL_StatusTypeDef HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
- HAL_StatusTypeDef HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
- HAL_StatusTypeDef HAL_I2C_Slave_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
- HAL_StatusTypeDef HAL_I2C_Slave_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
- HAL_StatusTypeDef HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
- HAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
- HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
- HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
- HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
- HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_IT(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
- HAL_StatusTypeDef HAL_I2C_EnableListen_IT(I2C_HandleTypeDef *hi2c);
- HAL_StatusTypeDef HAL_I2C_DisableListen_IT(I2C_HandleTypeDef *hi2c);
- HAL_StatusTypeDef HAL_I2C_Master_Abort_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress);
- /*非阻塞模式:DMA*/
- HAL_StatusTypeDef HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
- HAL_StatusTypeDef HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
- HAL_StatusTypeDef HAL_I2C_Slave_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
- HAL_StatusTypeDef HAL_I2C_Slave_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size);
- HAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
- HAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size);
- HAL_StatusTypeDef HAL_I2C_Master_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
- HAL_StatusTypeDef HAL_I2C_Master_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
- HAL_StatusTypeDef HAL_I2C_Slave_Seq_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
- HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions);
- /*在非阻塞模式(中断和DMA)中使用的I2C IRQHandler和回调*/
- void HAL_I2C_EV_IRQHandler(I2C_HandleTypeDef *hi2c);
- void HAL_I2C_ER_IRQHandler(I2C_HandleTypeDef *hi2c);
- void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c);
- void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c);
- void HAL_I2C_SlaveTxCpltCallback(I2C_HandleTypeDef *hi2c);
- void HAL_I2C_SlaveRxCpltCallback(I2C_HandleTypeDef *hi2c);
- void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode);
- void HAL_I2C_ListenCpltCallback(I2C_HandleTypeDef *hi2c);
- void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c);
- void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c);
- void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c);
- void HAL_I2C_AbortCpltCallback(I2C_HandleTypeDef *hi2c);
- /*外围状态,模式和错误功能*********************************/
- HAL_I2C_StateTypeDef HAL_I2C_GetState(I2C_HandleTypeDef *hi2c);
- HAL_I2C_ModeTypeDef HAL_I2C_GetMode(I2C_HandleTypeDef *hi2c);
- uint32_t HAL_I2C_GetError(I2C_HandleTypeDef *hi2c);
- /*I2C专用宏*/
- #define IS_I2C_ADDRESSING_MODE(MODE) (((MODE) == I2C_ADDRESSINGMODE_7BIT) || \
- ((MODE) == I2C_ADDRESSINGMODE_10BIT))
- #define IS_I2C_DUAL_ADDRESS(ADDRESS) (((ADDRESS) == I2C_DUALADDRESS_DISABLE) || \
- ((ADDRESS) == I2C_DUALADDRESS_ENABLE))
- #define IS_I2C_OWN_ADDRESS2_MASK(MASK) (((MASK) == I2C_OA2_NOMASK) || \
- ((MASK) == I2C_OA2_MASK01) || \
- ((MASK) == I2C_OA2_MASK02) || \
- ((MASK) == I2C_OA2_MASK03) || \
- ((MASK) == I2C_OA2_MASK04) || \
- ((MASK) == I2C_OA2_MASK05) || \
- ((MASK) == I2C_OA2_MASK06) || \
- ((MASK) == I2C_OA2_MASK07))
- #define IS_I2C_GENERAL_CALL(CALL) (((CALL) == I2C_GENERALCALL_DISABLE) || \
- ((CALL) == I2C_GENERALCALL_ENABLE))
- #define IS_I2C_NO_STRETCH(STRETCH) (((STRETCH) == I2C_NOSTRETCH_DISABLE) || \
- ((STRETCH) == I2C_NOSTRETCH_ENABLE))
- #define IS_I2C_MEMADD_SIZE(SIZE) (((SIZE) == I2C_MEMADD_SIZE_8BIT) || \
- ((SIZE) == I2C_MEMADD_SIZE_16BIT))
- #define IS_TRANSFER_MODE(MODE) (((MODE) == I2C_RELOAD_MODE) || \
- ((MODE) == I2C_AUTOEND_MODE) || \
- ((MODE) == I2C_SOFTEND_MODE))
- #define IS_TRANSFER_REQUEST(REQUEST) (((REQUEST) == I2C_GENERATE_STOP) || \
- ((REQUEST) == I2C_GENERATE_START_READ) || \
- ((REQUEST) == I2C_GENERATE_START_WRITE) || \
- ((REQUEST) == I2C_NO_STARTSTOP))
- #define IS_I2C_TRANSFER_OPTIONS_REQUEST(REQUEST) (((REQUEST) == I2C_FIRST_FRAME) || \
- ((REQUEST) == I2C_FIRST_AND_NEXT_FRAME) || \
- ((REQUEST) == I2C_NEXT_FRAME) || \
- ((REQUEST) == I2C_FIRST_AND_LAST_FRAME) || \
- ((REQUEST) == I2C_LAST_FRAME) || \
- ((REQUEST) == I2C_LAST_FRAME_NO_STOP) || \
- IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(REQUEST))
- #define IS_I2C_TRANSFER_OTHER_OPTIONS_REQUEST(REQUEST) (((REQUEST) == I2C_OTHER_FRAME) || \
- ((REQUEST) == I2C_OTHER_AND_LAST_FRAME))
- #define I2C_RESET_CR2(__HANDLE__) ((__HANDLE__)->Instance->CR2 &= (uint32_t)~((uint32_t)(I2C_CR2_SADD | I2C_CR2_HEAD10R | I2C_CR2_NBYTES | I2C_CR2_RELOAD | I2C_CR2_RD_WRN)))
- #define I2C_GET_ADDR_MATCH(__HANDLE__) ((uint16_t)(((__HANDLE__)->Instance->ISR & I2C_ISR_ADDCODE) >> 16U))
- #define I2C_GET_DIR(__HANDLE__) ((uint8_t)(((__HANDLE__)->Instance->ISR & I2C_ISR_DIR) >> 16U))
- #define I2C_GET_STOP_MODE(__HANDLE__) ((__HANDLE__)->Instance->CR2 & I2C_CR2_AUTOEND)
- #define I2C_GET_OWN_ADDRESS1(__HANDLE__) ((uint16_t)((__HANDLE__)->Instance->OAR1 & I2C_OAR1_OA1))
- #define I2C_GET_OWN_ADDRESS2(__HANDLE__) ((uint16_t)((__HANDLE__)->Instance->OAR2 & I2C_OAR2_OA2))
- #define IS_I2C_OWN_ADDRESS1(ADDRESS1) ((ADDRESS1) <= 0x000003FFU)
- #define IS_I2C_OWN_ADDRESS2(ADDRESS2) ((ADDRESS2) <= (uint16_t)0x00FFU)
- #define I2C_MEM_ADD_MSB(__ADDRESS__) ((uint8_t)((uint16_t)(((uint16_t)((__ADDRESS__) & (uint16_t)(0xFF00U))) >> 8U)))
- #define I2C_MEM_ADD_LSB(__ADDRESS__) ((uint8_t)((uint16_t)((__ADDRESS__) & (uint16_t)(0x00FFU))))
- #define I2C_GENERATE_START(__ADDMODE__,__ADDRESS__) (((__ADDMODE__) == I2C_ADDRESSINGMODE_7BIT) ? (uint32_t)((((uint32_t)(__ADDRESS__) & (I2C_CR2_SADD)) | (I2C_CR2_START) | (I2C_CR2_AUTOEND)) & (~I2C_CR2_RD_WRN)) : \
- (uint32_t)((((uint32_t)(__ADDRESS__) & (I2C_CR2_SADD)) | (I2C_CR2_ADD10) | (I2C_CR2_START)) & (~I2C_CR2_RD_WRN)))
- #define I2C_CHECK_FLAG(__ISR__, __FLAG__) ((((__ISR__) & ((__FLAG__) & I2C_FLAG_MASK)) == ((__FLAG__) & I2C_FLAG_MASK)) ? SET : RESET)
- #define I2C_CHECK_IT_SOURCE(__CR1__, __IT__) ((((__CR1__) & (__IT__)) == (__IT__)) ? SET : RESET)
复制代码
|