STM32F1 - I2C读写EEPROM

news2024/11/24 23:24:55

Inter-integrated circuit

  • 1> 实验概述
  • 2> I2C模块 - 硬件方框图
  • 3> I2C模块 - 主发送器模式
    • 3.1> 发送1Byte数据
    • 3.2> 抓波形
  • 4> I2C模块 - 主接收器模式


1> 实验概述

通过STM32F103内部I2C硬件模块,
读写EEPROM - AT24C02


2> I2C模块 - 硬件方框图

2


3> I2C模块 - 主发送器模式


3.1> 发送1Byte数据

31

#define AT24C02_ADDR 0xA0

// PB6 - I2C1_SCL
// PB7 - I2C1_SDA
void EEPROM_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	I2C_InitTypeDef I2C_InitStruct;
	
/* 首先 开时钟 */	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
	
/* GPIO参数配置 */
	GPIO_InitStruct.GPIO_Pin	= GPIO_Pin_6 | GPIO_Pin_7;	
	GPIO_InitStruct.GPIO_Mode	= GPIO_Mode_AF_OD;
	GPIO_InitStruct.GPIO_Speed	= GPIO_Speed_50MHz;
	
	GPIO_Init(GPIOB, &GPIO_InitStruct);
	
/* I2C参数配置  */	
	I2C_InitStruct.I2C_Mode 				= I2C_Mode_I2C;
	I2C_InitStruct.I2C_ClockSpeed 			= 40000;
	I2C_InitStruct.I2C_DutyCycle 			= I2C_DutyCycle_2;
	I2C_InitStruct.I2C_Ack 					= I2C_Ack_Enable;
	I2C_InitStruct.I2C_AcknowledgedAddress	= I2C_AcknowledgedAddress_7bit;
	I2C_InitStruct.I2C_OwnAddress1 			= 0X88;
	
	I2C_Init(I2C1, &I2C_InitStruct);
	
/* 使能 I2C1  */		
	I2C_Cmd(I2C1, ENABLE);	
}
	


void EEPROM_Write(uint8_t c)
{
	//------------ Step 1> 发送起始位[s] -----------------//
	I2C_GenerateSTART(I2C1, ENABLE);
	while ( !( I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT) == SUCCESS ) ){
		/* 检测事件EV5, SB flags */ ;
	}
	
	//---------- Step 2> 发送从机AT24C02地址 ------------//
	I2C_Send7bitAddress(I2C1, AT24C02_ADDR, I2C_Direction_Transmitter);
	while ( !( I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) == SUCCESS ) ){
		/* 检测事件EV6, BUSY, MSL, ADDR, TXE and TRA flags  */ ;
	}
	
	//----------- Step 3> 发送存储地址 -----------------//
	I2C_SendData(I2C1, 0x00); 
	while ( !( I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTING) == SUCCESS ) ){
		/* 检测事件EV8, TRA, BUSY, MSL, TXE flags  */ ;
	}
	
	//----------- Step 4> 发送1字节数据 ---------------// 
	I2C_SendData(I2C1, c); 
	while ( !( I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTING) == SUCCESS ) ){
		/* 检测事件EV8, TRA, BUSY, MSL, TXE flags  */ ;
	}

	//----------- Step 5> 发送停止位[P] ---------------//
	I2C_GenerateSTOP(I2C1, ENABLE);	
}

311


3.2> 抓波形

32

SCL 频率40KHz, 占空比1/2, 周期25us
ACK信号,脉宽1.5us左右;

这波形果然比用软件模拟整齐滴多!


4> I2C模块 - 主接收器模式

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

H5 异次元二次元引导页源码

H5 异次元二次元引导页源码 源码介绍:异次元二次元引导页源码是一款二次元引导单页源码,此单页有模拟4个页面的H5自适应效果。源码全局H5未加密,可自行修改调配。 下载地址: https://www.changyouzuhao.cn/9834.html

JS加密解密之JS广告漂浮代码分析

前言 之前有个客户要求帮忙复刻一份广告漂浮代码,我看了下,目标站的广告代码是通过了JS加密后的,经过我解密还原后分析了一下该代码的作用如下。 ;var _0xodDddd,_0xodD_[_0xodD],_0x1d02[_0xodD,\x73\x54\x69\x6d\x65,\x6c\x6f\x61\x64\x5…

【Linux】进程信号的保存 | 自定义捕捉

文章目录 三、信号的阻塞(信号的保存)1. 信号相关其他常见概念2. 在内核中的表示3. sigset_t类型4. 信号集操作函数函数列表注意事项 5. 读取/修改block位图 - sigprocmask6. 读取pending位图 - sigpending 四、信号捕捉1. 信号捕捉的初步认识自定义捕捉…

Stable Diffusion 绘画入门教程(webui)-提示词

通过上一篇文章大家应该已经掌握了sd的使用流程,本篇文章重点讲一下提示词应该如何写 AI绘画本身就是通过我们写一些提示词,然后生成对应的画面,所以提示词的重要性不言而喻。 要想生成更加符合自己脑海里画面的图片,就尽量按照…

孢子捕捉仪结构

TH-BZ2在现代农业科技的浪潮中,孢子捕捉仪作为一种先进的农业监测设备,正逐渐走进人们的视野。它以其独特的结构和功能,为农作物的健康生长提供了有力保障。那么,孢子捕捉仪究竟是何方神圣?它的结构又是怎样的呢&#…

vulnhub靶场之doubletrouble

一.环境搭建 1.靶场描述 get flags difficulty: easy about vm: tested and exported from virtualbox. dhcp and nested vtx/amdv enabled. you can contact me by email for troubleshooting or questions. This works better with VirtualBox rather than VMware 2.下载地…

详解4大C语言内存函数【超详细建议点赞收藏】

目录 1. memcpy----内存拷贝1.1 函数介绍1.2 函数使用1.3 模拟实现 2. memmove----重叠内存的数据拷贝2.1 函数介绍2.2 函数使用2.3 模拟实现 3. memcmp----内存比较3.1 函数介绍3.2 函数使用 4.memset----内存设置4.1 函数介绍4.2 函数使用 注意:以下4个内存函数在…

VFH特征的使用(二)

一、VFH特征识别 C recognize_objects.h #pragma once #include <pcl/point_cloud.h> #include <pcl/point_types.h> #include <pcl/common/common.h> #include <pcl/common/transforms.h> #include <pcl/console/parse.h> #include <pcl/…

基于Spring Boot的智能物流管理系统,计算机毕业设计(带源码+论文)

源码获取地址&#xff1a; 码呢-一个专注于技术分享的博客平台一个专注于技术分享的博客平台,大家以共同学习,乐于分享,拥抱开源的价值观进行学习交流http://www.xmbiao.cn/resource-details/1759581137025445890

做temu跨境电商,必读这五大秘诀!

随着互联网的飞速发展&#xff0c;电商行业呈现出前所未有的繁荣景象。新兴电商平台Temu成为了众多创业者的关注焦点。本文将为您解析如何在Temu电商蓝海项目中&#xff0c;从自身能力建设、了解市场环境到做好定位等方面&#xff0c;找到属于您的成功之路。 一、自身能力建设 …

【白嫖8k买的机构vip教程】Selenium(3):python+selenium环境安装

准备工具如下&#xff1a; Python安装包&#xff1a;https://www.python.org/getit/PyCharm Pycharm安装包&#xff1a;http://www.jetbrains.com/pycharm/download/Selenium Selenium安装包&#xff1a;https://pypi.python.org/pypi/selenium、或者在pycharm中直接下载seleni…

Vector - CANoe - CAPL重启VN设备退出BusOff

在总线测试中进行BusOff测试的时候&#xff0c;偶尔会遇到将Vector工具链下的VN系列设备进入到BusOff状态&#xff0c;这个时候我们就只能重启CANoe才能将VN系列设备进行重启&#xff0c;才可以再次在Trace窗口上看到发送和接收的报文。不过在某些特定的情况的下&#xff0c;我…

【大模型 知识图谱】ChatKBQA:KBQA知识图谱问答 + 大模型

ChatKBQA&#xff1a;KBQA知识图谱问答 大模型 提出背景传统方法处理流程ChatKBQA处理流程对比优势 总结ChatKBQA框架概览特征1&#xff1a;逻辑形式生成特征2&#xff1a;无监督实体和关系检索特征3&#xff1a;参数高效的微调特征4&#xff1a;GQoT 可解释的查询执行特征5&a…

【白嫖8k买的机构vip教程】安卓设备连接电脑进行adb命令操作

Android 真机进行adb 命令的操作&#xff1a; 连接方式 &#xff1a; 数据线连接&#xff1a; 1&#xff09;手机需通过数据线连接电脑&#xff1b; 2&#xff09;手机调出开发者选项&#xff1b;手机操作步骤&#xff1a;设置——系统——关于手机&#xff08;平板电脑&am…

VMware还原Windows11 ghost镜像

文章目录 环境步骤准备制作启动iso文件创建虚拟机启动虚拟机还原Windows 参考 环境 Windows 11 家庭中文版VMware Workstation 17 Pro石大师装机大师Windows 11 ghost系统镜像 步骤 准备 下载好Windows 11 ghost系统镜像&#xff0c;我下载的文件是 FQ_WIN11_X64_VDL_V2080…

【教3妹学编程-算法题】将数组分成最小总代价的子数组 II

2哥 : 叮铃铃&#xff0c;3妹&#xff0c;过年干嘛呢&#xff0c;是不是逛吃逛吃&#xff0c;有没有长胖呢。 3妹&#xff1a;切&#xff0c;我妈张罗着要给我相亲呢。 2哥 : 相亲&#xff1f;哈哈哈哈 3妹&#xff1a;别笑了&#xff0c;我妈说跟我年龄相等的人都已经孩子上小…

为什么2023年是AI视频的突破年,以及对2024年的预期#a16z

2023年所暴露的AI生成视频的各种问题&#xff0c;大部分被OpenAI发布的Sora解决了吗&#xff1f;以下为a16z发布的总结&#xff0c;在关键之处&#xff0c;我做了OpenAI Sora的对照备注。 推荐阅读&#xff0c;了解视频生成技术进展。 Why 2023 Was AI Video’s Breakout Year,…

开发消息多发工具需要用到的源代码

在数字化时代&#xff0c;消息传递是许多应用程序的核心功能之一&#xff0c;从社交媒体到企业通信&#xff0c;从个人聊天到群发消息&#xff0c;消息传递无处不在&#xff0c;为了满足这种需求&#xff0c;开发者经常需要创建或定制消息多发工具。 这些工具通常需要处理多个…

MySQL数据库基础(十):DQL数据查询语言

文章目录 DQL数据查询语言 一、数据集准备 二、select查询 三、简单查询 四、条件查询 1、比较查询 2、范围查询 3、逻辑查询 4、模糊查询 5、非空查询 五、排序查询 六、聚合查询 七、分组查询与having子句 1、分组查询介绍 2、group by的使用 3、group by 聚…

【深入理解设计模式】单例设计模式

单例设计模式 概念&#xff1a; 单例模式&#xff08;Singleton Pattern&#xff09;是 Java 中最简单的设计模式之一。 单例设计模式是一种创建型设计模式&#xff0c;其主要目的是确保类在应用程序中的一个实例只有一个。这意味着无论在应用程序的哪个位置请求该类的实例&a…