STM32F446 HAL库学习笔记-I2C篇

概述

意法半导体的STM32F446支持多达4个I2C接口,其中,三个I2C接口支持标准速度(最大100 KHz),快速(最大400 KHz);一个I2C接口可以支持快速+(最大1 MHz)。本文对使用STM32F446 HAL库进行I2C驱动设计过程进行总结。

Step1:建立工程

STM32F446 HAL库学习笔记-I2C篇
使用STM32CubeMX工具,按照实际的硬件设计建立初始工程。例如,上图中示例选择I2C1作为I2C接口。

Step2:导出工程

配置好接口后,按照自己使用的Toolchain / IDE工具导出工程,如下图所示:
STM32F446 HAL库学习笔记-I2C篇导出工程代码后,就可以在IDE工具中进行I2C驱动的编写了。

Step3:编写驱动

STM32的I2C接口支持Master和Slave模式。在Master模式下,STM32对I2C器件进行读写操作。主要使用的接口函数包括:
1、HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
例如:
HAL_I2C_Master_Transmit(&hi2c1,
Device_I2C_SLAVE_ADD,
(uint8_t *)d,
sizeof(d),
100);
向I2C器件发送d (数据buffer)中缓存的数据,100为Timeout时间。函数的返回值为HAL状态。
2、HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
例如:
HAL_I2C_Master_Receive(&hi2c1, // i2c handle
CY22393_I2C_SLAVE_ADD, // i2c address, left aligned
(uint8_t *)&value, // pointer to address of where to store received data
1, // expecting one byte to be returned
100); // timeout
从I2C器件读取1字节的数据缓存到value中,100为Timeout时间。函数的返回值为HAL状态。