#ifndef __24CXX_H #define __24CXX_H #include #include "stm32f10x.h" #define AT24C01 127 #define AT24C02 255 #define AT24C04 511 #define AT24C08 1023 #define AT24C16 2047 #define AT24C32 4095 #define AT24C64 8191 #define AT24C128 16383 #define AT24C256 32767 #define EE_TYPE AT24C32 //使用的是AT24C16 #define EE_DEV_ADDR 0xA0 #if EE_TYPE == AT24C01 #define EE_PAGE_SIZE 8 //字节/页 #define EE_SIZE 0x007F //eeprom的总容量 #elif EE_TYPE == AT24C02 #define EE_PAGE_SIZE 16 #define EE_SIZE 0x00FF #elif EE_TYPE == AT24C04 #define EE_PAGE_SIZE 16 #define EE_SIZE 0x01FF #elif EE_TYPE == AT24C08 #define EE_PAGE_SIZE 16 #define EE_SIZE 0x03FF #elif EE_TYPE == AT24C16 #define EE_PAGE_SIZE 16 #define EE_SIZE 0x07FF #elif EE_TYPE == AT24C32 #define EE_PAGE_SIZE 32 #define EE_SIZE 0x0FFF #elif EE_TYPE == AT24C64 #define EE_PAGE_SIZE 32 #define EE_SIZE 0x1FFF #elif EE_TYPE == AT24C128 #define EE_PAGE_SIZE 64 #define EE_SIZE 0x3FFF #elif EE_TYPE == AT24C256 #define EE_PAGE_SIZE 64 #define EE_SIZE 0x7FFF #elif EE_TYPE == AT24C512 #define EE_PAGE_SIZE 128 #define EE_SIZE 0xFFFF #endif #define EEPROM_I2C_WR 0 /* 写控制bit */ #define EEPROM_I2C_RD 1 /* 读控制bit */ // void AT24cxx_init(void);//初试化IIC // u8 AT24cxx_ReadOneByte(u16 ReadAddr);//指定地址读取一个字节 // void AT24cxx_WriteOneByte(u16 WriteAddr,u8 data);//指定地址写一个数据 // void AT24cxx_WriteLenByte(u16 WriteAddr,u32 data,u8 len);//在指定地址开始写入指定长度的数据 // u32 AT24cxx_ReadLenByte(u16 ReadAddr,u8 len);//在指定地址开始读出指定长度的数据 // void AT24cxx_Write(u16 WriteAddr,u8 *buf,u16 len);//在指定地址开始写入指定长度的数据 // void AT24cxx_Read(u16 ReadAddr,u8 *buf,u16 len);//在指定地址开始读出指定长度的数据 // u8 AT24cxx_Check(void);//检查器件 void ee_Init(void); u8 ee_ReadOneByte(u16 ReadAddr); void ee_WriteOneByte(u16 WriteAddr, u8 data); uint8_t ee_WriteBytes(uint8_t *_pWriteBuf, uint16_t _usAddress, uint16_t _usSize); uint8_t ee_ReadBytes(uint8_t *_pReadBuf, uint16_t _usAddress, uint16_t _usSize); /* 定义I2C总线连接的GPIO端口, 用户只需要修改下面4行代码即可任意改变SCL和SDA的引脚 */ //IO方向设置 #define SDA_IN() //{GPIOB->ODR&=0XFFFF3FFF;GPIOB->ODR|=GPIO_Mode_IN<<14;}//sda输入 #define SDA_OUT() //{GPIOB->ODR&=0XFFFF3FFF;GPIOB->ODR|=GPIO_Mode_OUT<<14;}//sda输出 //IO操作设置 // #define IIC_SDA0 GPIOB->BRR=GPIO_Pin_11;//sda=0 // #define IIC_SDA1 GPIOB->BSRR=GPIO_Pin_11;//sda=1 // #define IIC_SCL0 GPIOB->BRR=GPIO_Pin_10; // #define IIC_SCL1 GPIOB->BSRR=GPIO_Pin_10; // #define Read_IIC_SDA() ((GPIOB->IDR&GPIO_Pin_11)!=0)?1:0 //判断接收到的位 //IIC所有操作函数 // void IIC_Init(void);// 初始化iic的所有IO口 //void IIC_Start(void); //发送起始信号 //void IIC_Stop(void); //发送停止信号 //void IIC_Write_Byte(u8 dat);//发送一个字节 //u8 IIC_Read_Byte(unsigned char ack);//接收一个字节 //u8 IIC_Wait_Ack(void);//等待ACK信号 //void IIC_Ack(void);//发送ACK信号 //void IIC_NAck(void);//不发送ACK信号 #endif