STM32 IIC EEPROM
来源:互联网 发布:防御sql注入的手段 编辑:程序博客网 时间:2024/05/23 17:01
第一步,配置iic引脚,移植修改对应管脚。
void I2C_INIT()
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.Pin= I2C_SCL|I2C_SDA;
GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP;
GPIO_InitStructure.Pull =GPIO_NOPULL;
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOC,&GPIO_InitStructure);
I2C_SCL_H;
I2C_SDA_H;
}
第二步, 编写开始、停止、应答、非应答、发送、接收等信号程序;
/*******************************************************************************
* º¯ Êý Ãû : I2C_SDA_OUT
* º¯Êý¹¦ÄÜ : SDAÊä³öÅäÖÃ
* Êä Èë : ÎÞ
* Êä ³ö : ÎÞ
*******************************************************************************/
void I2C_SDA_OUT()
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.Pin=I2C_SDA;
GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP;
GPIO_InitStructure.Pull =GPIO_PULLUP;
GPIO_InitStructure.Speed =GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOC,&GPIO_InitStructure);
}
/*******************************************************************************
* º¯ Êý Ãû : I2C_SDA_IN
* º¯Êý¹¦ÄÜ : SDAÊäÈëÅäÖÃ
* Êä Èë : ÎÞ
* Êä ³ö : ÎÞ
*******************************************************************************/
void I2C_SDA_IN(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.Pin =I2C_SDA;
GPIO_InitStructure.Mode=GPIO_MODE_INPUT;
GPIO_InitStructure.Pull =GPIO_NOPULL;
GPIO_InitStructure.Speed =GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOC,&GPIO_InitStructure);
}
//²úÉúÆðʼÐźÅ
void I2C_Start(void)
{
I2C_SDA_OUT();
I2C_SDA_H;
I2C_SCL_H;
delay_us(5);
I2C_SDA_L;
delay_us(6);
I2C_SCL_L;
}
//²úÉúÍ£Ö¹ÐźÅ
void I2C_Stop(void)
{
I2C_SDA_OUT();
I2C_SCL_L;
I2C_SDA_L;
I2C_SCL_H;
delay_us(6);
I2C_SDA_H;
delay_us(6);
}
//Ö÷»ú²úÉúÓ¦´ðÐźÅACK
void I2C_Ack(void)
{
I2C_SCL_L;
I2C_SDA_OUT();
I2C_SDA_L;
delay_us(2);
I2C_SCL_H;
delay_us(5);
I2C_SCL_L;
}
//Ö÷»ú²»²úÉúÓ¦´ðÐźÅNACK
void I2C_NAck(void)
{
I2C_SCL_L;
I2C_SDA_OUT();
I2C_SDA_H;
delay_us(2);
I2C_SCL_H;
delay_us(5);
I2C_SCL_L;
}
//µÈ´ý´Ó»úÓ¦´ðÐźÅ
//·µ»ØÖµ£º1 ½ÓÊÕÓ¦´ðʧ°Ü 0 ½ÓÊÕÓ¦´ð³É¹¦
u8 I2C_Wait_Ack(void)
{
u8 tempTime=0;
I2C_SDA_IN();
I2C_SDA_H;
delay_us(1);
I2C_SCL_H;
delay_us(1);
while(HAL_GPIO_ReadPin(GPIO_I2C,I2C_SDA))
{
tempTime++;
if(tempTime>250)
{
I2C_Stop();
return 1;
}
}
I2C_SCL_L;
return 0;
}
//I2C ·¢ËÍÒ»¸ö×Ö½Ú
void I2C_Send_Byte(u8 txd)
{
u8 i=0;
I2C_SDA_OUT();
I2C_SCL_L;//ÀµÍʱÖÓ¿ªÊ¼Êý¾Ý´«Êä
for(i=0;i<8;i++)
{
if((txd&0x80)>0) //0x80 1000 0000
I2C_SDA_H;
else
I2C_SDA_L;
txd<<=1;
I2C_SCL_H;
delay_us(2); //·¢ËÍÊý¾Ý
I2C_SCL_L;
delay_us(2);
}
}
//I2C ¶ÁÈ¡Ò»¸ö×Ö½Ú
u8 I2C_Read_Byte(u8 ack)
{
u8 i=0,receive=0;
I2C_SDA_IN();
for(i=0;i<8;i++)
{
I2C_SCL_L;
delay_us(2);
I2C_SCL_H;
receive<<=1;
if(HAL_GPIO_ReadPin(GPIO_I2C,I2C_SDA))
receive++;
delay_us(1);
}
if(ack==0)
I2C_NAck();
else
I2C_Ack();
return receive;
}
第三步,编写写入EEPROM AT24C02程序
u8 AA24x_ReadOneByte(u8 addr)
{
u8 temp=0;
I2C_Start();
I2C_Send_Byte(0xA0);//1010000
I2C_Wait_Ack();
I2C_Send_Byte(addr);
I2C_Wait_Ack();
I2C_Start();
I2C_Send_Byte(0xA1);//10100001
I2C_Wait_Ack();
temp=I2C_Read_Byte(0); // 0 ´ú±í NACK
I2C_NAck();
I2C_Stop();
return temp;
}
void AA24x_WriteOneByte(u8 addr,u8 dt)
{
I2C_Start();
I2C_Send_Byte(0xA0);
I2C_Wait_Ack();
I2C_Send_Byte(addr);//·¢ËÍÊý¾ÝµØÖ·
I2C_Wait_Ack();
I2C_Send_Byte(dt);
I2C_Wait_Ack();
I2C_Stop();
delay_ms(10);
}
- STM32 IIC EEPROM
- IIC&EEPROM
- EEPROM IIC
- S3C2410 IIC EEPROM 总结
- s3c2440 iic eeprom
- IIC&EEPROM总结
- STM32 IIC
- STM32-IIC
- STM32之EEPROM读写
- STM32 FLASH模拟 EEPROM
- STM32——EEPROM
- STM32?I2C-EEPROM
- STM32的I2C-EEPROM
- STM32的IIC
- stm32 之iic
- STM32 硬件IIC操作
- STM32标准IIC驱动
- STM32硬件IIC操作
- MySQL 5.7 (1启动方式)
- Java Set的操作示例
- hql Criteria sql不同查询方法
- ADB命令模拟 按键
- Android学习笔记三十八之WebView网页视图
- STM32 IIC EEPROM
- 解决exp-00091办法
- 背景建模与前景检测(Background Generation And Foreground Detection)
- 大型网站技术架构读书笔记
- linux(十一)之初始化文件
- 全卷积网络FCN几点认识
- Oracle之with as 语法-yellowcong
- 常用排序之冒泡排序
- Android学习笔记三十九之文件上传和下载