STM32模拟IIC读写AT24CXX

发布者:美好的人生最新更新时间:2017-11-02 来源: eefocus关键字:STM32  模拟IIC  读写AT24CXX 手机看文章 扫描二维码
随时随地手机看文章

以前只用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 引用地址:STM32模拟IIC读写AT24CXX

上一篇:关于STM32模拟IIC的理解
下一篇: STM32的简单的SD卡读写

推荐阅读最新更新时间:2024-03-16 15:42

STM32之CAN---TTCAN模式浅析
1 前言 传统CAN 采用事件触发消息传输机制,CSMA/ CD+ AMP( Carrier-Sense Mult iple Access w ith Co llision Detect ion and Arbit ration on Message Priorit ies, 载波侦听、多路访问、冲突检测、优先级仲裁) 介质访问控制机制, 即多个消息同时发送时, 按照消息标识符的优先级顺序, 低优先级消息自动退出, 高优先级消息继续发送。这种介质访问方式提高了网络的利用率和高优先级消息的实时性, 但在重负载CAN 中, 低优先级消息经常由于总线冲突而被迫退出发送, 导致低优先级消息传输时延长, 且传输时延不可预测, 因
[单片机]
<font color='red'>STM32</font>之CAN---TTCAN模式浅析
STM32_DAC输出电压
今天讲解“STM32F103 DAC输出电压”功能。 今天提供并讲解的软件工程,基于软件工程“A0.0.0(STM32F10x_TIM延时)”修改而来。若不知道如何而来,请关注微信公众号“strongerHuang获取更多信息。 每天提供下载的“软件工程”都是在硬件板子上进行多次测试、并保证没问题才上传至360云盘。 今天的软件工程下载地址(360云盘): https://yunpan.cn/cPU3YIHzcu6Eu 访问密码 11f0 STM32F10x的资料可以在我360云盘下载: https://yunpan.cn/crBUdUGdYKam2 访问密码 ca90 一、RCC时钟配置 该函数位
[单片机]
STM32_DAC输出电压
STM32的USART使用DMA--操作
使用STM32的DMA来处理USART3的RX的多数据 注意:DMA的中断产生条件中,TC=transfer complete interrupt产生,需要DMA的buffer满才会产生。 只有当DMA内存中的数据个数达到20个时候才能产生中断。定义如下。DMA_InitStructure.DMA_BufferSize = 20;//sizeof(Ch3DMABuffer); static usart3_dma_config(void) { DMA_InitTypeDef DMA_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_AHBPeriphClo
[单片机]
stm32学习笔记---计数器定时中断(1s)
#include tim_driver.h //tim2³õʼ»¯:1ÃëÖÓ¸üÐÂÊý¾Ý void tim2_init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; //ʹÄÜʱÖÓ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
[单片机]
<font color='red'>stm32</font>学习笔记---计数器定时中断(1s)
STM32串口配置(基于uC/OS)
在uC/OS下,串口配置与不使用uC/OS基本相同,但中断处理有些差别。在uC/OS下取消了固件库中的stm32f10x_it.c文件,去而代之的是app_vect_v5.c. 下面是几个中断处理的函数: bsp_int.c提供几个关键的中断操作函数: void BSP_IntDis (CPU_DATA int_id) //关闭指定中断 void BSP_IntDisAll (void) //关闭所有中断 void BSP_IntEn
[单片机]
stm32 usart奇偶校验如何配置
stm32 usart奇偶校验如何配置?或许你在stm32 usart奇偶校验过程中会遇到如下一些坑,stm32 usart偶校验错误标志位以及出现偶校验错误,奇偶校验位包含在数据位中等等这些可能是你将错误的数据放到DR寄存器中导致的。 在一般情况下,stm32 usart奇偶校验无校验位时,数据位常用8位,当使用就校验位时,数据位应设置为9位。stm32 usart奇偶校验配置方法主要有以下几种: stm32 usart奇偶校验如何配置?如果stm32 usart开启奇偶校验,应在读取数据寄存器时先查看标志位,或者及时进行应用逻辑代码处理,以免发生校验错误标志则丢弃数据等情况出现造成不必要的损失。
[单片机]
<font color='red'>stm32</font> usart奇偶校验如何配置
STM32】HAL库 STM32CubeMX教程八---定时器输入捕获
前言: 本系列教程将 对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 所用工具: 1、芯片: STM32F407ZET6/ STM32F103ZET6 2、STM32CubeMx软件 3、IDE: MDK-Keil软件 4、STM32F1xx/STM32F4xxHAL库 知识概括: 通过本篇博客您将学到: PWM工作原理 STM32CubeMX创建PWM例程 HAL库定时器PWM函数库 PWM创建呼吸灯 什么是PWM 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非
[单片机]
【<font color='red'>STM32</font>】HAL库 STM32CubeMX教程八---定时器输入捕获
uclinux下stm32开发环境搭建
  什么是uclinux   uclinux表示micro-control linux.即“微控制器领域中的Linux系统”,是Lineo公司的主打产品,同时也是开放源码的嵌入式Linux的典范之作。uCLinux主要是针对目标处理器没有存储管理单元MMU(Memory Management Unit)的嵌入式系统而设计的。它已经被成功地移植到了很多平台上。由于没有MMU,其多任务的实现需要一定技巧。   uClinux是嵌入式Linux领域非常重要的分支,已成功应用于路由器、机顶盒、PDA等领域,与标准Linux在内存管理方面有着本质的区别。   uCLinux是一种优秀的嵌入式Linux版本,是micro-Controll
[单片机]
uclinux下<font color='red'>stm32</font>开发环境搭建
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved