#ifndef __DIRVER_I2C_H
#define __DIRVER_I2C_H
#include "stdint.h"
#include "stm32f0xx.h"
/************************* I2C 硬件相关定义 *************************/
#define I2C_SCL_H GPIOA->BSRR = GPIO_Pin_0
#define I2C_SCL_L GPIOA->BRR = GPIO_Pin_0
#define I2C_SDA_H GPIOA->BSRR = GPIO_Pin_1
#define I2C_SDA_L GPIOA->BRR = GPIO_Pin_1
#define I2C_SDA_read (GPIOA->IDR & GPIO_Pin_1)
#define ACK (0)
#define NACK (1)
#define EEPROM_DEV_ADDR 0xA0
#define EEPROM_WR 0x00
#define EEPROM_RD 0x01
#define EEPROM_WORD_ADDR_SIZE 0x10
extern void EEPROM_WriteByte(uint16_t addr, uint8_t data);
extern void EEPROM_ReadByte(uint16_t addr, uint8_t *pdata);
extern void EEPROM_Write_NBytes(uint16_t addr, uint8_t *pdata, uint16_t sz);
extern void EEPROM_Read_NBytes(uint16_t addr, uint8_t *pdata, uint16_t sz);
extern void AT24C04_I2C_Init(void);
#endif
//dirver_i2c.c
#include "stm32f0xx.h"
#include "dirver_i2c.h"
#include "delay.h"
void I2C_Delay(void )
{
delay_us(5);
}
/*
* 函数名:void I2C_Init(void)
* 输入参数:
* 输出参数:无
* 返回值:无
* 函数作用:初始化模拟 I2C 的引脚为输出状态且 SCL/SDA 都初始为高电平
*/
void AT24C04_I2C_Init(void) {
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
/* Configure I2C1 pins: SCL and SDA */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//置为开漏,外部上拉。设置为推挽可能会有问题
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;