[MCU] 【极海APM32F4xx Tiny】极海APM32F407__IIC_STH30(1)

尹小舟   2023-6-19 11:48 楼主

本贴我们将向大家介绍 APM32F4 的 IIC 功能。在本贴中,我们将使用 APM32F407 自带的 I2C 来实现对外部 SHT30温室度的数据的采集,并将结果通过串口传输到电脑上。

APM32F405xGw407xExG 产品内部有3个硬件IIC 均可工作于多主模式或从模式,支持 7 位或 10 位寻址,7 位从模式时支持双从地址寻址,通信速率支持标准模式(最高 100kbit/s)、快速模式(最高 400kbit/s);内置了硬件 CRC 发生器/校验器;它们可以使用 DMA 操作并支持 SMBus 总线 2.0 版/PMBus 总线。

可配置I2C的GPIO

  • I2C1
    • SDA PB7 PB9
    • SCL PB6 PB8
  • I2C2
    • SDA PF0 PH5 PB11
    • SCL PF1 PH4 PB10
  • I2C3
    • SDA PH8 PC9
    • SCL PA8 PH7

结构框图

image-20230619145031-1.png  

库函数介绍

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 编辑

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复