STM32模拟IIC读写AT24CXX
来源:互联网 发布:2015双十一数据分析 编辑:程序博客网 时间:2024/05/30 04:32
以前只用51做过AT24C02,后来才接触到容量更大的型号,发现了很多和以前的不一致的东西,现总结如下。
在上一篇博客中已经写好了STM32用IO口模拟IIC的基本驱动代码,下面结合数据手册用上一篇博客提到的函数编写AT24CXX全系列通用的驱动代码。
我们先来看AT24CXX的中文手册。
这是写操作的步骤。
而上面提到的从器件的地址信息由下图所示。
不同的容量的AT24CXX的从器件地址位是不同的。这在后面的基本的读写函数的关于器件的不同就有所体现。
下面先初始化AT24CXX:
void AT24CXX_Init()
{
IIC_Init();
}
这里只需要初始化IIC总线即可。
下面写出AT24CXX基本的读写函数
/*在AT24CXX的指定地址读出一个数据*/
u8 AT24CXX_ReadOneByte(u16 ReadAddr)
{
u8 temp=0;
IIC_Start();
if(EE_TYPE>AT24C16)
{
IIC_Send_Byte(0XA0);
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr>>8); //发送高地址
IIC_Wait_Ack();
}else IIC_Send_Byte(0XA0+((ReadAddr/256)<<1)); //此处需重点理解
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr%256); //发送低地址
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(0XA1); //进入接收模式
IIC_Wait_Ack();
temp=IIC_Read_Byte(0);
IIC_Stop();
return temp;
需要重点理解处通过对于EE_TYPE宏定义的判断,也就是对于型号的选择,来实现了对于不同型号的驱动。
同理,往指定地址写入一个数据的函数如下:
void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{
IIC_Start();
if(EE_TYPE>AT24C16)
{
IIC_Send_Byte(0XA0);
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr>>8);
}else
{
IIC_Send_Byte(0XA0+((WriteAddr/256)<<1));
}
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr%256);
IIC_Wait_Ack();
IIC_Send_Byte(DataToWrite);
IIC_Wait_Ack();
IIC_Stop();
delay_ms(10); //需注意,有10ms的延时
}
至此,就完成了基本驱动代码的编写。
- STM32模拟IIC读写AT24CXX
- AT24Cxx芯片读写--IIC总线
- AT24C02的Stm32模拟读写IIC程序
- STM32模拟IIC读写24CXX
- AT24C02的Stm32模拟读写IIC程序(续)
- STM32模拟 IIC
- STM32软件模拟IIC
- STM32模拟IIC
- STM32模拟IIC
- STM32单片机学习(13) I2C读写AT24Cxx存储器实验
- STM32 IO 模拟IIC I2C
- STM32 AT24CXX代码
- STM32 模拟IIC主设备 非IIC静默模式
- 关于STM32 的 硬件IIC和 模拟IIC理解学习
- STM32硬件IIC与51模拟IIC通信
- 关于STM32模拟IIC的理解
- STM32驱动AT24CXX系列芯片
- 单片机模拟IIC时序读写24C02
- Hadoop是干嘛的
- Python TAB 自动补全
- MongoDB Replica Sets
- 很喜欢的励志语
- 瀑布流,滚动加载新内容
- STM32模拟IIC读写AT24CXX
- 将eclipse项目部署到tomcat根目录
- Android源码去除锁屏及应用程序开机自动运行不锁屏全屏显示
- 基于MFC的框的程序
- 位图结构解析(精简版)
- mysql 语句错误
- (转)数据库范式(1NF 2NF 3NF BCNF)详解一
- 用C语言实现memmove函数
- 如何用plsql developer工具的text importer功能将外部的excel表,或txt的数据导入到数据库表