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 8 Bytes, 所以地址是0~255

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

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

b. 2Kbit, 32Page, 每个Page 8 Bytes, 所以地址是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)
	{
		...
	}
}

Note:
可以扩展 WritePage, 1 Page 8 Bytes, 可以一次性写8Bytes
例如
0(地址), 8Bytes数据; // 第一页
8(地址), 8Bytes数据; // 第二页

24(地址), 8Bytes数据; // 第三页

	/* 接口可以按页码, 简单写下 */
	uint8_t writePage(uint_8 pageNum, uint_8 *dat, uint_16 datSize)
	{
		uint16_t addr = 0;
		if (pageNum < 0 || pageNum >= 32)
			return 1; // HAL_ERROR;
		addr = pageNum * 8; // 每页8Bytes
		
		return HAL_I2C_Mem_Write(&hi2c1, AT24C02_READ_ADDRESS, addr, I2C_MEMADD_SIZE_8BIT, dat, datSize, 0xffff); 
	}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/222778.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微软 Power Platform 零基础 Power Pages 网页搭建高阶实际案例实践(四)

微软 Power Platform 零基础 Power Pages 网页搭建教程之高阶案例实践学习(四) Power Pages 实际案例学习进阶 微软 Power Platform 零基础 Power Pages 网页搭建教程之高阶案例实践学习(四)1、新增视图,添加List页面2、新增下载Excel功能3、添加视图权限,根据登录人自动…

【文章学习系列之模型】TimeGPT-1

本章内容 文章概况模型结构数据集实验结果调包使用一般性报错API报错 总结 文章概况 《TimeGPT-1》是2023年公开于arXiv的一篇文章&#xff0c;该文章以chatgpt为灵感&#xff0c;提出一种基础时序大模型TimeGPT。该方案的提出致力于解决数据集规模不够大、模型泛化能力不强以…

python+requests接口自动化测试框架实例详解教程

前段时间由于公司测试方向的转型&#xff0c;由原来的web页面功能测试转变成接口测试&#xff0c;之前大多都是手工进行&#xff0c;利用postman和jmeter进行的接口测试&#xff0c;后来&#xff0c;组内有人讲原先web自动化的测试框架移驾成接口的自动化框架&#xff0c;使用的…

中庸行者 - 华为机试真题题解

给定一个m * n的整数矩阵作为地图&#xff0c;短阵数值为地形高度&#xff1b; 中庸行者选择地图中的任意一点作为起点&#xff0c;尝试往上、下、左、右四个相邻格子移动; 移动时有如下约束: 中庸行者只能上坡或者下坡&#xff0c;不能走到高度相同的点不允许连续上坡或者连续…

SpectralGPT: Spectral Foundation Model 论文翻译3

遥感领域的通用大模型 2023.11.13在CVPR发表 原文地址&#xff1a;[2311.07113] SpectralGPT: Spectral Foundation Model (arxiv.org) E.消融研究 在预训练阶段&#xff0c;我们对可能影响下游任务表现的各种因素进行了全面研究。这些因素包括掩蔽比、ViT patch大小、数据规…

matplotlib学习

显示两个figure 坐标上刻度修改 plt.xlim() 下标范围 plt.xticks() 替换新的下标 图例显示 散点图 subplot多合一显示

LDAP协议和AD活动目录的讲解

目录 LDAP协议 LDAP基本概念 LDAP目录的数据结构 LDAP交互过程以及相关报文 AD&#xff08;Active Directory&#xff09; AD基本概念 AD域与工作组、本地组的区别 AD DS&#xff08;AD域服务&#xff09; 信任关系 组策略和安全组 LDAP协议 LDAP基本概念 LDAP&…

2023年【高压电工】考试报名及高压电工试题及解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 高压电工考试报名考前必练&#xff01;安全生产模拟考试一点通每个月更新高压电工试题及解析题目及答案&#xff01;多做几遍&#xff0c;其实通过高压电工理论考试很简单。 1、【单选题】 12m电杆埋设深度宜()。&…

每天一点python——day88

#每天一点Python——88 #编程两大思想【面向过程与面向对象】 #如图&#xff1a; 面向过程的线性思维&#xff1a; 类似于做菜一步步的来&#xff0c;先怎么样怎么样&#xff0c;再怎么样 如果不一步步的来&#xff0c;例如先炒菜再点火&#xff0c;这样是做不好的 面向对象&a…

MySQL系列(一):索引篇

为什么是B树&#xff1f; 我们推导下&#xff0c;首先看下用哈希表做索引&#xff0c;是否可以满足需求。如果我们用哈希建了索引&#xff0c;那么对于如下这种SQL&#xff0c;通过哈希&#xff0c;可以快速检索出数据&#xff1a; select * from t_user_info where id1;但是这…

十年前端之离别的旋律

在一家名叫“梦想家”的小公司里&#xff0c;有一个普通的程序员&#xff0c;他的名字叫做小帅。每天默默地坐在角落里&#xff0c;默默地写着代码&#xff0c;默默地为公司付出。他的眼睛里总是充满了对工作的热爱和对生活的热情&#xff0c;但他的内心却隐藏着一个秘密&#…

R语言学习

Part1阶段1&#xff1a;入门基础 1安装R和RStudio&#xff1a; 下载并安装R&#xff1a;https://cran.r-project.org/ 下载并安装RStudio&#xff1a;https://www.rstudio.com/products/rstudio/download/ 2Hello World&#xff1a; 学习如何在R中输出"Hello, World!"…

Vue2、Vue3的Diff算法比较

前言 diff算法是vue更新dom前&#xff0c;比较新旧vdom的一种优化方式 特点&#xff1a; 只会在同一级比较 从两边往中间收拢 差别 vue2 和 vue3的差别在于处理完头尾节点后&#xff0c;对设于节点的处理方式vue2 是遍历旧节点&#xff0c;将旧节点映射到map里&#xff0…

npm : 无法加载文件 D:\nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本。

今天在使用vscode下载项目的依赖时&#xff0c;输入 pnmp install,结果报错: npm : 无法加载文件 D:\nodejs\node_global\npm.ps1&#xff0c;因为在此系统上禁止运行脚本。原因&#xff1a; 因为在此系统上禁止运行脚本&#xff0c;也就是说没有权限&#xff0c;查一下&#…

每天一点python——day87

#每天一点Python——87 #Pycharm程序调试 #例&#xff1a;【我想输出1-10】 i1 while i<10:print(i) #会一直输出1{我想输出一到十&#xff0c;但是他一直输出1}【如果想找到问题出现在什么地方&#xff1a;就需要一步步调试】 #那么怎么调试呢 #前面声明是没有错的&#x…

Java——面试:异常处理所用到的关键字有哪些?具体有什么作用?

1.异常处理所用到的关键字有哪些&#xff1f; Java异常处理所使用的到的关键字有&#xff1a;try、catch、finally、throw、throws五个 2.具体有什么作用&#xff1f; try&#xff1a;用于捕获异常&#xff0c;后面必须跟一个或多个catch块或者一个finally块&#xff1b;捕获到…

AdaBoost 详解

AdaBoost Boosting Boosting 是指&#xff0c;仅通过训练精度比随机猜想&#xff08;50%&#xff09;稍高的学习器&#xff0c;通过集成的方式过建出强学习器。 其中boosting中最有名的是AdaBoost算法。AdaBoost是英文"Adaptive Boosting"&#xff08;自适应增强&…

祸害了人民3年的新冠消失了,但有些奇怪现象,让人百思不得其解

真是没想到啊&#xff0c;祸害我们3年的新冠病毒突然就消失了&#xff0c;但是紧接着呢&#xff0c;却有一个非常奇怪的现象出现了&#xff0c;真的是令人百思不得其解&#xff01; 新冠病毒&#xff0c;于2020年的开始&#xff0c;可以说根本就没有任何缓冲期&#xff0c;一开…

微信小程序基础bug

1.苹果11手机小程序请求数据不显示 设置-》隐私-》分析与改进-》开启 ”与开发者共享“ 2.<navigator>组件回退delta不成功 tabBar 页面是不能实现后退的效果的. 因为, 当我们跳转到 tabBar 页面&#xff0c;会关闭其他所有非tabBar 页面,所以当处于 tabBar 页面时, 无…

redhat修改root密码

系统环境 redhat版本redhat7.6 1.在当前界面按e键进入进行编辑 2.在rhgb quite 后面加入 rd.break&#xff0c;按住ctrlx使用更改的参数引导系统 3. 挂载文件系统 3.1 进入此界面后挂载文件 mount -o remount,rw /sysroot4. 更改系统文件的root chroot /sysroot5. 修改密码…