STM32硬件IIC的实现

1、STM32 Cube配置

进入Cube设置 根据数据手册填入上升与下降沿时间,选择快速模式。
STM32硬件IIC的实现_第1张图片

2、程序分析

2.1、单片机发送命令函数

发送的函数使用

HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)

其中hi2c为结构体,DevAddress为设备地址,*pData为所要发送的数据, Size为发送数据的大小,Timeout为操作超时时间
比如:

I2C_HandleTypeDef hi2c1;
data[3]={0x00,0x10,0x00}
HAL_I2C_Master_Transmit(&hi2c1, 0x20,  &data[0],3, 1000 )

为0x20地址上发送数组data中三个数据。可以使用示波器看IIC_SCL与IIC_SDA上的数据。

2.2、数据读取

使用的函数为

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)

其中hi2c为结构体,DevAddress为设备地址,MemAddress为所读取设备的数据保存的地址,MemAddSize为需要读取单数据的长度,*pData为读取数据被保存的地址, Size为读取数据的大小,Timeout为操作超时时间
比如:

HAL_I2C_Mem_Read( &hi2c1, 0x21, 0x08, I2C_MEMADD_SIZE_8BIT, &Receivedata[0], 2, 1000 );

上面函数分析:0x21为读取的命令,0x80为读取设备保存数据的地址,I2C_MEMADD_SIZE_8BIT为单字节读取,Receivedata为读取数据保存的数据,2位读取两个字节的数据。

示波器抓取到时序和基本一致。
STM32硬件IIC的实现_第2张图片

你可能感兴趣的:(STM32,IIC)