BearPi Std 板从入门到放弃 - 后天篇(2)(I2C1读写EEPROM)

2023-12-06 05:01

本文主要是介绍BearPi Std 板从入门到放弃 - 后天篇(2)(I2C1读写EEPROM),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简介

基于 BearPi Std 板从入门到放弃 - 后天篇(1)(I2C1 读取 光照强度), 使用同一个I2C接口访问EEPROM, 同时读取光照亮度
主芯片: STM32L431RCT6
LED : PC13 \ 推挽输出即可 \ 高电平点亮
串口: Usart1
I2C : I2C1
光照强度传感器:BH1750
EEPROM芯片 : AT24C02

芯片说明

  1. BearPi 自带的扩展版 E53_SC1_智慧路灯的原理图
    在这里插入图片描述

  2. AT2402C 基本描述, 2Kbit, 32Page, 每个Page 1 Byte, 所以地址是0~255

  3. AT2402C 的 设备地址规则
    在这里插入图片描述

  4. 结论
    a. 结合 原理图,
    A0 = 1; A1 = 0; A2 =0;
    写的地址 = 10100010 = 0xA2
    读的地址 = 10100011 = 0xA3

b. 2Kbit, 32Page, 每个Page 1 Byte, 所以地址是0~255

步骤

  1. 基于前面文章, 创建工程
  2. 添加读写代码
#define AT24C02_WRITE_ADDRESS 0xA2
#define AT24C02_READ_ADDRESS 0xA3/* 写单个字节 */
uint8_t AT24C02_Write_Byte(uint16_t addr, uint8_t *dat)
{return HAL_I2C_Mem_Write(&hi2c1, AT24C02_WRITE_ADDRESS, addr, I2C_MEMADD_SIZE_8BIT, dat, 1, 0xffff);
}
/* 读取单个字节 */
uint8_t AT24C02_Read_Byte(uint16_t addr, uint8_t *buf)
{return HAL_I2C_Mem_Read(&hi2c1, AT24C02_READ_ADDRESS, addr, I2C_MEMADD_SIZE_8BIT, buf, 1, 0xffff);
}/* 读多个字节 */
uint8_t AT24C02_Read_Bytes(uint16_t addr, uint8_t *buf, uint16_t bufSize)
{return HAL_I2C_Mem_Read(&hi2c1, AT24C02_READ_ADDRESS, addr, I2C_MEMADD_SIZE_8BIT, buf, bufSize, 0xffff);
}int main()
{...uint8_t res = 0;uint8_t datTemp = 0;/* 写完整个EEPROM */for (int i = 0; i < 256; ++i){datTemp  = i;res = AT24C02_Write_Byte(i, &datTemp);if (res){printf("Faile To Write Address %d!\r\n", i);}HAL_Delay(10); // 写延时, 不然会失败}/* 读完整个EEPROM */for (int i = 0; i < 256; ++i){res = AT24C02_Read_Byte(i, &datTemp);if (res){printf("Faile To ReadAddress %d!\r\n", i);}else{printf("Address: %d, Value: %d\r\n", i, datTemp);}}while(1){...}
}

BearPi I2C1 完整项目工程, 包含两份芯片datasheet

这篇关于BearPi Std 板从入门到放弃 - 后天篇(2)(I2C1读写EEPROM)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/460527

相关文章

C++中std::distance使用方法示例

《C++中std::distance使用方法示例》std::distance是C++标准库中的一个函数,用于计算两个迭代器之间的距离,本文主要介绍了C++中std::distance使用方法示例,具... 目录语法使用方式解释示例输出:其他说明:总结std::distance&n编程bsp;是 C++ 标准

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

Python FastAPI入门安装使用

《PythonFastAPI入门安装使用》FastAPI是一个现代、快速的PythonWeb框架,用于构建API,它基于Python3.6+的类型提示特性,使得代码更加简洁且易于绶护,这篇文章主要介... 目录第一节:FastAPI入门一、FastAPI框架介绍什么是ASGI服务(WSGI)二、FastAP

c++中std::placeholders的使用方法

《c++中std::placeholders的使用方法》std::placeholders是C++标准库中的一个工具,用于在函数对象绑定时创建占位符,本文就来详细的介绍一下,具有一定的参考价值,感兴... 目录1. 基本概念2. 使用场景3. 示例示例 1:部分参数绑定示例 2:参数重排序4. 注意事项5.

Python实现高效地读写大型文件

《Python实现高效地读写大型文件》Python如何读写的是大型文件,有没有什么方法来提高效率呢,这篇文章就来和大家聊聊如何在Python中高效地读写大型文件,需要的可以了解下... 目录一、逐行读取大型文件二、分块读取大型文件三、使用 mmap 模块进行内存映射文件操作(适用于大文件)四、使用 pand

C# 读写ini文件操作实现

《C#读写ini文件操作实现》本文主要介绍了C#读写ini文件操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、INI文件结构二、读取INI文件中的数据在C#应用程序中,常将INI文件作为配置文件,用于存储应用程序的

C#实现文件读写到SQLite数据库

《C#实现文件读写到SQLite数据库》这篇文章主要为大家详细介绍了使用C#将文件读写到SQLite数据库的几种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录1. 使用 BLOB 存储文件2. 存储文件路径3. 分块存储文件《文件读写到SQLite数据库China编程的方法》博客中,介绍了文

C++11的函数包装器std::function使用示例

《C++11的函数包装器std::function使用示例》C++11引入的std::function是最常用的函数包装器,它可以存储任何可调用对象并提供统一的调用接口,以下是关于函数包装器的详细讲解... 目录一、std::function 的基本用法1. 基本语法二、如何使用 std::function