本文章原始地址:http://feotech.com/?p=69
本程序主要用于驱动STM32单片机芯片的硬件I2C寄存器,实现通过使用芯片自带的I2C寄存器进行数据的发送与接收.
本例程中采用I2C寄存器查询的方式来实现数据传输,当I2C对应寄存器指定状态时方可执行下一步操作.
/**
******************************************************************************
* @file Hardware_I2C.c
* @author Ryan Zhao
* @version V1.0.0
* @date 2017-04-27
* @brief STM32硬件I2C底层驱动.
******************************************************************************
* @attention Null
*
******************************************************************************
*/
/**
* @brief I2C引脚与寄存器功能配置.
* @param None.
* @retval None.
*/
void I2C_Configuration(void)
{
/*GPIO与IIC初始化结构体*/
GPIO_InitTypeDef GPIO_InitStructure;
I2C_InitTypeDef I2C_InitStructure;
/*GPIO与IIC时钟使能*/
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE ); //GPIOB时钟使能
RCC_APB1PeriphClockCmd( RCC_APB1Periph_I2C1, ENABLE ); //I2C时钟使能
/*初始化GPIO*/
GPIO_InitStructure.GPIO_Pin = HW_I2C_SDA_PIN | HW_I2C_SCL_PIN; //初始化 IIC GPIO
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //最高输出速度50Hz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; //输入输出模式为复用功能开漏输出
GPIO_Init( GPIOB, &GPIO_InitStructure ); //根据GPIO初始化结构体初始化GPIOB
/*初始化I2C*/
I2C_InitStructure.I2C_Mode = I2C_Mode_I2