当前位置: 首页 > news >正文

STM32使用硬件I2C读写AT24C02 EEPROM(二)

文章目录

  • STM32使用硬件I2C读写AT24C02 EEPROM(二)
  • 1、修改函数,多字节读写
    • 输出效果:
    • 调试 效果:
  • 2、任意字节读写
    • 调试效果,读写失败:
    • 查找原因:
    • 调试效果:
  • 总结
  • 源码链接,免费下载,如有问题欢迎指导

STM32使用硬件I2C读写AT24C02 EEPROM(二)

在STM32使用硬件I2C读写AT24C02 EEPROM(一)中我们读写了eeprom的一个字节,但是我们想要读写多个字节应该怎么办?

1、修改函数,多字节读写

HAL_I2C_Mem_Write
HAL_I2C_Mem_Read
对这个两个函数进行了封装
uint8_t at24cxx_read(uint16_t addr, uint8_t *pbuf, uint16_t datalen)
{

if(EE_TYPE < AT24C16)return HAL_I2C_Mem_Read(&hi2c2,AT24C02_ADDR_READ,addr,I2C_MEMADD_SIZE_8BIT,pbuf,datalen,1000);
elsereturn HAL_I2C_Mem_Read(&hi2c2,AT24C02_ADDR_READ,addr,I2C_MEMADD_SIZE_16BIT,pbuf,datalen,1000);

}
uint8_t at24cxx_write(uint16_t addr, uint8_t *pbuf, uint16_t datalen)
{

if(EE_TYPE < AT24C16)return HAL_I2C_Mem_Write(&hi2c2,AT24C02_ADDR_WRITE,addr,I2C_MEMADD_SIZE_8BIT,pbuf,datalen,1000);
elsereturn HAL_I2C_Mem_Write(&hi2c2,AT24C02_ADDR_WRITE,addr,I2C_MEMADD_SIZE_16BIT,pbuf,datalen,1000);

}
在main函数中while循环读写
在这里插入图片描述

输出效果:

在这里插入图片描述
读出来的结果都是0,读写失败
什么原因呢?查找资料写完不能马上读需要等待写完,很奇怪,所有加个延时吧
在这里插入图片描述

调试 效果:

在这里插入图片描述
可以了正常读写了

2、任意字节读写

那读写任意字节呢,多读写些字节
在这里插入图片描述

调试效果,读写失败:

在这里插入图片描述

什么情况,多读写了两位就不行了?

查找原因:

通过页写入每次只能最多写8个字节,要不就只能按一个字节写,尝试了几种方法最终还是以单个字节写的方式来改。
uint8_t at24cxx_hal_writeonebyte(uint16_t WriteAddr,uint8_t DataToWrite)
{
if(EE_TYPE < AT24C16)
return HAL_I2C_Mem_Write(&hi2c2,AT24C02_ADDR_WRITE,WriteAddr,I2C_MEMADD_SIZE_8BIT,&DataToWrite,1,1000);
else
return HAL_I2C_Mem_Write(&hi2c2,AT24C02_ADDR_WRITE,WriteAddr,I2C_MEMADD_SIZE_16BIT,&DataToWrite,1,1000);
}

uint8_t at24cxx_write(uint16_t addr, uint8_t *pbuf, uint16_t datalen)
{

	while (datalen--)
{HAL_Delay(5);at24cxx_hal_writeonebyte(addr, *pbuf);addr++;pbuf++;}

}

调试效果:

在这里插入图片描述

总结

使用stm32 硬件i2c读写at24c02 芯片需要注意延时否则会锁死和多字节读写的限制,谨慎处理读写操作中的细节,可以有效解决通信中遇到的问题,确保数据的可靠存储和读取

源码链接,免费下载,如有问题欢迎指导

STM32使用硬件I2C读写AT24C02 EEPROM,实现任意字节读写


http://www.mrgr.cn/news/58847.html

相关文章:

  • Java--多态
  • 智创 AI 新视界 -- 探秘 AIGC 中的生成对抗网络(GAN)应用
  • 基于ssm框架的博客系统【附源码】
  • vue图片加载失败的图片
  • 【C#】第三章习题
  • vue实现语音合成功能,Android和wap端
  • useEffect简单介绍
  • USB上传文件到LINUX系统
  • EveryoneNobel:为每个人打造诺贝尔奖风格的纪念图片
  • UART通过DMA接收和发送,使用环形缓冲区,状态机的使用
  • 使用 Kibana 将地理空间数据导入 Elasticsearch 以供 ES|QL 使用
  • 线性表之顺序表
  • 最新版本jdbcutils集成log4j做详细sql日志、自动释放连接...等
  • apt-cache工具
  • 为什么需要weak_ptr
  • Debezium日常分享系列之:使用Debezium检测数据变异模式
  • 【C/C++ Qt shared_ptr | make_shared | QSharedPointer 】绕圈圈
  • vue3学习(一)项目搭建
  • Depcheck——专门用于检测 JavaScript 和 Node.js 项目中未使用依赖项的工具
  • 自然语言处理实战:《七剑下天山》文本分析
  • Github关于LLM热门项目(10k+)
  • WebForms DataList 控件深入解析
  • Matlab数字信号处理——基于改进小波变换的图像去噪方法(7种去噪算法)
  • 【C++】抱C++中的函数式编程:使用`std::function`和Lambda表达式简化代码
  • Next.js + Prisma + Auth.js 实现完整的认证方案
  • 一篇文章告诉你什么是BloomFilter