#include "AT24Cxx.h"
/**********************************************************************/
// 功能描述: 初始化EEPROM(定义时钟,数据对应的端口及PIN脚,和操作速度)
// 输入参数:无
// 输出参数:无
// 返 回 值:无
// 编写时间:2014.11.26
// 作    者:胡安勤
// 修改记录:
/**********************************************************************/
void AT24CxxInit(const IIC_PIN *PIN)
{IIC_Init(PIN);
//  GPIO_PortClock(PIN.WP.port,true);
//  GPIO_PinConfigure(PIN.WP.port,PIN.WP.num,GPIO_PIN_OUT_MODE,IIC_IO_SPEED);
//  GPIO_PinWrite(PIN.WP.port,PIN.WP.num,AT24Cxx_WRITE_DISABLE);  //写保护使能
}
/**********************************************************************/
// 功能描述: EEPROM单字节写操作
// 输入参数:addr:数据存储地址   ch:待写入数据
// 输出参数:无
// 返 回 值:无
// 编写时间:2014.11.26
// 作    者:胡安勤
// 修改记录:
/**********************************************************************/
IIC_STATUS AT24CxxWriteByte(const IIC_PIN *PIN, uint16_t addr, uint8_t ch)
{IIC_STATUS status;IIC_Start(PIN);IIC_WriteByte(PIN, PIN->ADDR);status = IIC_Wait_ACK(PIN);
#if ( ADDR_LENGTH == 2)  //地址是否超过8位,越过,加入高位地址写操作IIC_WriteByte(PIN, (uint8_t)((addr >> 8) & 0xFF)); //超过,写高位地址status |= IIC_Wait_ACK(PIN);
#endifIIC_WriteByte(PIN, (uint8_t)(addr & 0xFF)); //低位地址写入status |= IIC_Wait_ACK(PIN);IIC_WriteByte(PIN, ch);  //数据写入status |= IIC_Wait_ACK(PIN);IIC_Stop(PIN);   //停止if(status){return(IIC_WRITE_ERR);}else{return(IIC_OK);}
}/**********************************************************************/
// 功能描述: EEPROM多字节写操作
// 输入参数:addr:数据存储地址   *str:待写入数据串首指针  len:写入数据长度
// 输出参数:无
// 返 回 值:无
// 编写时间:2014.11.26
// 作    者:胡安勤
// 修改记录:
/**********************************************************************/
IIC_STATUS AT24CxxWriteStr(const IIC_PIN *PIN, uint16_t addr, uint8_t *str,uint16_t len)
{uint16_t i;IIC_STATUS status;//GPIO_PinWrite(PIN.WP.port,PIN.WP.num,AT24Cxx_WRITE_ENABLE);IIC_Start(PIN);IIC_WriteByte(PIN, PIN->ADDR);status = IIC_Wait_ACK(PIN);
#if ( ADDR_LENGTH == 2)IIC_WriteByte(PIN, (uint8_t)((addr >> 8) & 0xFF));status |= IIC_Wait_ACK(PIN);
#endifIIC_WriteByte(PIN, (uint8_t)(addr & 0xFF));status |= IIC_Wait_ACK(PIN);for(i = 0; i < len; i++){if (((addr + i) % PAGE_LENGTH == 0) && (i > 0)){//判断是地址是否到达分页,是则完成页写。启动新页写操作IIC_Stop(PIN);//status |= IIC_Wait_ACK(PIN);osDelay(10);              //两个写操作之间,(参见芯片手册,最小值为5ms)IIC_Start(PIN);IIC_WriteByte(PIN, PIN->ADDR);status |= IIC_Wait_ACK(PIN);
#if ( ADDR_LENGTH == 2)IIC_WriteByte(PIN, (uint8_t)(((addr + i) >> 8) & 0xFF));status |= IIC_Wait_ACK(PIN);
#endifIIC_WriteByte(PIN, (uint8_t)((addr + i) & 0xFF));status |= IIC_Wait_ACK(PIN);}IIC_WriteByte(PIN, *str++);status |= IIC_Wait_ACK(PIN);}IIC_Stop(PIN);//GPIO_PinWrite(PIN.WP.port,PIN.WP.num,AT24Cxx_WRITE_DISABLE);osDelay(10);if(status){return (IIC_WRITE_ERR);}else{return (IIC_OK);}
}
/**********************************************************************/
// 功能描述: EEPROM单字节读操作
// 输入参数:addr:数据存储地址
// 输出参数:无
// 返 回 值:读取到的数据
// 编写时间:2014.11.26
// 作    者:胡安勤
// 修改记录:
/**********************************************************************/
IIC_STATUS AT24CxxReadByte(const IIC_PIN *PIN, uint16_t addr, uint8_t *data)
{uint8_t ch;IIC_STATUS status;IIC_Start(PIN);IIC_WriteByte(PIN, PIN->ADDR);status = IIC_Wait_ACK(PIN);
#if ( ADDR_LENGTH == 2)IIC_WriteByte(PIN, (uint8_t)((addr >> 8) & 0xFF));status |= IIC_Wait_ACK(PIN);
#endifIIC_WriteByte(PIN, (uint8_t)(addr & 0xFF));status |= IIC_Wait_ACK(PIN);IIC_Start(PIN);IIC_WriteByte(PIN, PIN->ADDR | 0x01);status |= IIC_Wait_ACK(PIN);IIC_ReadByte(PIN, &ch);IIC_NACK(PIN);IIC_Stop(PIN);*data = ch;if(status){return (IIC_READ_ERR);}else{return (IIC_OK);}
}/**********************************************************************/
// 功能描述: EEPROM多字节读操作
// 输入参数:addr:数据存储地址   len:读取长度
// 输出参数:*str:存储缓冲区首指针
// 返 回 值:读取到的数据
// 编写时间:2014.11.26
// 作    者:胡安勤
// 修改记录:
/**********************************************************************/
IIC_STATUS AT24CxxReadStr(const IIC_PIN *PIN, uint16_t addr, uint8_t *str, uint16_t len)
{uint16_t i;IIC_STATUS status;IIC_Start(PIN);IIC_WriteByte(PIN, PIN->ADDR);status = IIC_Wait_ACK(PIN);
#if ( ADDR_LENGTH == 2)IIC_WriteByte(PIN, (uint8_t)((addr >> 8) & 0xFF));status |= IIC_Wait_ACK(PIN);
#endifIIC_WriteByte(PIN, (uint8_t)(addr & 0xFF));status |= IIC_Wait_ACK(PIN);IIC_Start(PIN);IIC_WriteByte(PIN, PIN->ADDR | 0x01);status |= IIC_Wait_ACK(PIN);for(i = 0; i < len; i++){if(i != 0 ){IIC_ACK(PIN);}IIC_ReadByte(PIN, str++);}IIC_NACK(PIN);IIC_Stop(PIN);if(status){return (IIC_READ_ERR);}else{return (IIC_OK);}
}
#ifndef _AT24CXX_HEAD_
#define _AT24CXX_HEAD_
#include "main.h"
#include "stdio.h"
#include "stdint.h"
#include "hal_iic.h"
#include "cmsis_os.h" //FreeRTOS系统中调用osDelay()#define PAGE_LENGTH   64       //C01,C02为8字节,C04及以上为16字节,C64 32
#define ADDR_LENGTH   2        //地址长度C01,C02为1个字节,C04及以上为2字节
#define AT24Cxx_ADDR  0xA0     //定义器件地址#define AT24Cxx_WRITE_ENABLE    0x00  //使能数据写入
#define AT24Cxx_WRITE_DISABLE   0x01  //禁止数所写入void AT24CxxInit(const IIC_PIN *PIN);
IIC_STATUS AT24CxxWriteByte(const IIC_PIN *PIN, uint16_t addr, uint8_t ch);
IIC_STATUS AT24CxxReadByte(const IIC_PIN *PIN, uint16_t addr, uint8_t *data);
IIC_STATUS AT24CxxWriteStr(const IIC_PIN *PIN, uint16_t addr, uint8_t *str, uint16_t len);
IIC_STATUS AT24CxxReadStr(const IIC_PIN *PIN, uint16_t addr, uint8_t *str, uint16_t len);#endif

24C02中文(商家版).pdf

24c02串行储存器中文官方资料手册.pdf

IIC介绍.docx

单片机 STM32 HAL 闪存 AT24C02相关推荐

  1. (39)STM32——FLASH闪存

    目录 学习目标 成果展示 介绍 组成 主存储器 系统存储器 OTP 区域 选项字节 读取 编程 寄存器 步骤 擦除 扇区擦除 批量擦除 寄存器 代码 总结 学习目标 本节我们要来介绍一下关于FLASH ...

  2. 温湿度传感器驱动SHT85 单片机STM32 HAL库

    功能介绍:读取传感器SHT85数据,转换成温度.湿度 .饱和水蒸气含量. 注意事项: SDA脚设置为开漏输出,外部上拉电阻10k.或者设置成推挽,软件切换SDA输入输出. 调试时可适当加长延时时间. ...

  3. 单片机 STM32 HAL 网络模块 ENC28J60

    文章目录 一. 简介 二.特性 三.示例代码 一. 简介 ENC28J60 是带有行业标准串行外设接口(Serial Peripheral Interface,SPI)的独立以太网控制器.它可作为任何 ...

  4. 单片机 STM32 HAL IO扩展 PCA9555

    描述 这个用于两线双向总线(I 2 C)的16位扩展器设计用于2.3V至5.5VV CC 运行.通过I 2 C接口[串行时钟(SCL),串行数据(SDA)],它为大多数微控制器系列产品提供通用远程I ...

  5. 单片机 STM32 HAL 射频读卡器 RC522

    1.CubeMX 定义任意两个引脚,作为复位脚和片选脚,并对引脚作出如下配置: GPlO output level --High GPIO mode --Output Open Drain GPIO ...

  6. 单片机 STM32 HAL 步进电机 Motor

    /*************笔记**************** 1.CubeMX 定义任意四个引脚,作为ABCD相,并对引脚作出如下配置:GPlO output level --HighGPIO m ...

  7. 单片机 STM32 HAL PCF8574 例子代码

    #include "extgpio.h" #include "pcf8574.h" #include "74hc595.h" /****** ...

  8. 单片机 STM32 HAL 温湿度 DS18B20

    /*************笔记**************** 1.CubeMX 定义任意一个引脚,作为数据脚,并对引脚作出如下配置:GPlO output level --LOWGPIO mode ...

  9. 单片机 STM32 HAL 液晶屏 LCD16032

    笔记: 1.采用串行输出 2.器件 [16 NC(PSB)]引脚需要接地, H:并口通信 L:串口通信 3.LCD_CS_Pin LCD_CS_GPIO_Port //片选控制,0,无效 1有效 LC ...

  10. 洋桃开发板笔记(六 ) STM32自带的Flash闪存使用,主要配合其他外设

    Flash闪存与其他外设的使用 杜洋工作室 www.DoYoung.net 洋桃电子 www.DoYoung.net/YT 在此声明一下所有代码均为 杜洋工作室 的不允许复制,转发等,本人只是在此程序 ...

最新文章

  1. 怎样实现企业管理系统的操作日志功能
  2. Mahout学习路线图
  3. Sea Battle
  4. 使用UltraEdit来拷贝粘贴二进制
  5. 服务器自动删文件,服务器定时删除文件工具
  6. linux服务器定时关机重启,Ubuntu Server 10.10 每天定时开关机linux服务器应用 -电脑资料...
  7. 1.79亿实景三维项目!与房地一体有何区别?
  8. 一致性哈希算法及其应用
  9. python逐行读取txt文件readline_Python File readline() 方法
  10. 深度解析,AI如何让创新变得更简单
  11. jodconverter 远程配置_jodconverter支持什么格式转换
  12. 男生如何找准自己的穿衣风格,提升衣着品味(转载:搜狐男人)
  13. Node项目实战总结
  14. http://jingyan.baidu.com/article/f96699bb8b38e0894e3c1bef.html
  15. css图片颜色设置为黑白
  16. 怎么申请企业邮箱账号?企业邮箱怎么注册申请?
  17. DSPE-PEG-LTLRWVGLMS(二硬脂酰基磷脂酰乙醇胺-聚乙二醇-肿瘤靶向蛋白);神经胶质瘤归巢肽
  18. 新中式穿搭:柯罗芭KLOVA传承极致东方美
  19. 机械硬盘4k读写速度_极速鲨课堂43:机械硬盘秒变固态靠谱吗?
  20. 电子工程师入门宝典:最常用十大电子元器件-电子技术方案|电路图讲解

热门文章

  1. 语音排队叫号系统源码
  2. 2022程序猿生产力软件推荐
  3. 一文了解参数检验和非参数检验
  4. 二年级孩子适合学C语言吗,小孩子适合学习编程吗?孩童时期对变成的接受程度有多少呢?...
  5. app上显示服务器数据加载失败,APP中的6种常见数据加载
  6. 银行卡Bin查询接口
  7. jsp项目如何引入vue
  8. 汉字转拼音(较完整)
  9. SPSS倾向评分匹配(PSM)插件安装与资源分享
  10. 十六进制计算器 android,十六进制计算器