bsp_i2c.h
#ifndef __BSP_I2C_H
#define __BSP_I2C_H
#include "stm32f10x.h"
//EEPROM 设备地址(8位)
#define EEPROM_ADDR 0xA0
/**
* IIC EERPOM的引脚定义
*
*/
#define STM32_I2C_OWN_ADDR 0x5f
// IIC
#define EEPROM_I2C I2C1 //I2C1
#define EEPROM_I2C_CLK RCC_APB1Periph_I2C1 //I2C时钟
#define EEPROM_I2C_APBxClkCmd RCC_APB1PeriphClockCmd //使能I2C时钟
#define EEPROM_I2C_BAUDRATE 400000 //波特率
//IIC GPIO 引脚宏定义
#define EEPROM_I2C_SCL_GPIO_CLK (RCC_APB2Periph_GPIOB) //GPIO时钟
#define EEPROM_I2C_SDA_GPIO_CLK (RCC_APB2Periph_GPIOB) //GPIO时钟
#define EEPROM_I2C_GPIO_APBxClkCmd RCC_APB2PeriphClockCmd //使能GPIO时钟
#define EEPROM_I2C_SCL_GPIO_PORT GPIOB
#define EEPROM_I2C_SCL_GPIO_PIN GPIO_Pin_6
#define EEPROM_I2C_SDA_GPIO_PORT GPIOB
#define EEPROM_I2C_SDA_GPIO_PIN GPIO_Pin_7
void I2C_EE_Config(void);
void EEPROM_Byte_Write(uint8_t addr,uint8_t data);
void EEPROM_Read(uint8_t addr,uint8_t *data,uint8_t numByteToRead);
void EEPROM_Page_Write(uint8_t addr,uint8_t *data,uint8_t numByteToWrite);
void EEPROM_WaitForWriteEnd(void);
#endif /* __BSP_I2C_H */
bsp_i2c.c
#include "bsp_i2c.h"
/**
* @brief IIC EEPROM 配置,工作参数配置
* @param 无
* @retval 无
*/
void I2C_EE_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
I2C_InitTypeDef I2C_InitStructure;
// 打开IIC GPIO的时钟 SCL|SDA
EEPROM_I2C_GPIO_APBxClkCmd(EEPROM_I2C_SCL_GPIO_CLK|EEPROM_I2C_SDA_GPIO_CLK, ENABLE);
// 打开IIC 外设的时钟
EEPROM_I2C_APBxClkCmd(EEPROM_I2C_CLK, ENABLE);
// 将IIC SCL的GPIO配置为开漏复用模式
GPIO_InitStructure.GPIO_Pin = EEPROM_I2C_SCL_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(EEPROM_I2C_SCL_GPIO_PORT, &GPIO_InitStructure);
//这里只需要将不一样