本贴我们将向大家介绍 APM32F4 的 IIC 功能。在本贴中,我们将使用 APM32F407 自带的 I2C 来实现对外部 SHT30温室度的数据的采集,并将结果通过串口传输到电脑上。
APM32F405xGw407xExG 产品内部有3个硬件IIC 均可工作于多主模式或从模式,支持 7 位或 10 位寻址,7 位从模式时支持双从地址寻址,通信速率支持标准模式(最高 100kbit/s)、快速模式(最高 400kbit/s);内置了硬件 CRC 发生器/校验器;它们可以使用 DMA 操作并支持 SMBus 总线 2.0 版/PMBus 总线。
可配置I2C的GPIO
结构框图
库函数介绍
I2C_Config_T结构体
typedef struct
{
uint32_t clockSpeed; /*!< I2C clock speed /
I2C_MODE_T mode; /!< I2C mode /
I2C_DUTYCYCLE_T dutyCycle; /!< I2C duty cycle /
uint16_t ownAddress1; /!< I2C own address /
I2C_ACK_T ack; /!< Acknowledge /
I2C_ACK_ADDRESS_T ackAddress; /!< I2C acknowledged address */
} I2C_Config_T;
成员 |
功能描述 |
clockSpeed |
I2C时钟速度 |
mode |
指定工作模式,可选I2C模式和SMBUS模式 |
dutyCycle |
指定时钟占空比,可选 low/high=2:1以及16:9模式 |
ownAddress1 |
指定自身的I2C设备地址 |
ack |
使能或者关闭响应 (一般都是使能) |
ackAddress |
指定地址的长度,可以位7位及10位 |
函数原形 |
void I2C_Reset(I2C_T* i2c) |
功能描述 |
复位外设I2C |
输入参数{in} |
|
i2c |
I2C1或I2C2,I2C3 |
函数原形 |
void I2C_Config(I2C_T* i2c, I2C_Config_T* i2cConfig) |
功能描述 |
通过I2C_Config_T配置I2C |
输入参数{in} |
|
函数原形 |
void I2C_ConfigStructInit(I2C_Config_T* i2cConfig) |
功能描述 |
用默认值填充每个I2C_InitStruct成员。 |
输入参数{in} |
|
函数原形 |
void I2C_Enable(I2C_T* i2c) |
功能描述 |
实现I2C |
输入参数{in} |
|
函数原形 |
void NVIC_EnableIRQRequest(IRQn_Type irq, uint8_t preemptionPriority, uint8_t subPriority) |
功能描述 |
启用NVIC请求 |
输入参数{in} |
|
例: /* NVIC configuration */ NVIC_EnableIRQRequest(I2C1_EV_IRQn, 1, 0);
函数原形 |
void I2C_DisableDualAddress(I2C_T* i2c) |
功能描述 |
禁用指定的I2C双寻址模式。 |
输入参数{in} |
|
函数原形 |
void I2C_EnableInterrupt(I2C_T* i2c, uint16_t interrupt) |
功能描述 |
使能指定的I2C中断。 |
输入参数{in} |
|
函数原形 |
uint8_t I2C_ReadIntFlag(I2C_T* i2c, I2C_INT_FLAG_T flag) |
功能描述 |
检查是否设置了I2C中断 |
输入参数{in} |
|
I2C_INT_FLAG_T flag值
I2C_INT_FLAG_T |
描述 |
I2C_INT_FLAG_SMBALT |
SMBus警报标志 |
I2C_INT_FLAG_TTE |
超时或Tlow错误标志 |
I2C_INT_FLAG_PECE |
接收标志中的PEC错误 |
I2C_INT_FLAG_OVRUR |
溢出/欠载标志(从模式) |
I2C_INT_FLAG_AE |
确认错误标志 |
I2C_INT_FLAG_AL |
仲裁丢失标志(主机模式) |
I2C_INT_FLAG_BERR |
确认错误标志 |
I2C_INT_FLAG_TXBE |
发送器数据寄存器空标志 |
I2C_INT_FLAG_RXBNE |
接收器数据寄存器非空标志 |
I2C_INT_FLAG_STOP |
停止检测标志(从模式) |
I2C_INT_FLAG_ADDR10 |
0位报头发送标志(主机模式) |
I2C_INT_FLAG_BTC |
字节传输完成标志 |
I2C_INT_FLAG_ADDR |
地址发送标志(主机模式) |
I2C_INT_FLAG_START |
起始位标志(主机模式) |
函数原形 |
uint8_t I2C_ReadStatusFlag(I2C_T* i2c, I2C_FLAG_T flag) |
功能描述 |
检查是否设置了I2C标志 |
输入参数{in} |
|
本帖最后由 尹小舟 于 2023-6-19 14:55 编辑