STM32G0开发笔记-Platformio+libopencm3-EEPROM M24C02使用

news2025/1/20 1:42:51

使用Platformio平台的libopencm3开发框架来开发STM32G0,以下为EEPROM M24C02的使用方法。

1 新建项目

  • 建立eeprom项目

在PIO的Home页面新建项目,项目名称eeprom,选择开发板为 MonkeyPi_STM32_G070RB,开发框架选择libopencm3;

  • 项目建立完成后在src目录下新建main.c主程序文件;

  • 修改下载和调试方式,这里开发板使用的是DAPLink仿真器,因此修改platformio.ini文件如下:

1upload_protocol = cmsis-dap
2debug_tool = cmsis-dap

2 编写程序

首先从之前的I2C项目中拷贝sw_i2c库文件夹到当前项目的lib目录下:

图片

image-20220925192507020

本次不使用串口打印,直接使用SEGGER rtt打印,因此将SEGGER RTT也放置在lib目录下,便于调试打印:

1void log(const char* fmt, ...)
2{
3    va_list va;
4    va_start(va, fmt);
5    SEGGER_RTT_vprintf(0,fmt,&va);
6    va_end(va);
7}

2.1 EEPROM 写数据
1static inline bool m24cxx_write_one_byte(uint8_t addr, uint8_t data)
2{
3    uint8_t buffer[2];
4
5    buffer[0] = addr;
6    buffer[1] = data;
7    return sw_i2c_transfer(M24CXX_DEVICE_ADDR, buffer, 2, 0, 0);
8}

2.2 EEPROM 读数据
1static inline bool m24cxx_read_one_byte(uint8_t addr, uint8_t *ptr)
2{
3    return sw_i2c_transfer(M24CXX_DEVICE_ADDR, &addr, 1, ptr, 1);
4}

3 连接硬件进行测试

将EEPROM模块与开发的I2C引脚连接好:

图片

image-20220925192735228

先执行程序进行写入:

 1int main(void)
 2{
 3    sys_clock_setup();
 4
 5    log("init sw i2c.\r\n");
 6
 7    sw_i2c_init();
 8
 9    log("eeprom read testing.\r\n");
10
11    uint8_t addr = 0x01;
12    uint8_t read_data=0;
13    uint8_t write_data = 0x88;
14
15    #if 0
16        m24cxx_read_one_byte(addr,&read_data);
17
18        if(read_data == write_data){
19            log("eeprom write ok\r\n");
20        }else{
21            log("ERR:EEPROM write failed.\r\n");
22        }
23
24    #endif
25
26    log("eeprom write.\r\n");
27
28    m24cxx_write_one_byte(addr, write_data);
29
30    delay_ms(5);//wait write done
31
32    while(1){/*do nothing*/}///!!!not go here.
33    return 0;
34}

然后将读取部分的程序注释打开:

 1    #if 1
 2        m24cxx_read_one_byte(addr,&read_data);
 3
 4        if(read_data == write_data){
 5            log("eeprom write ok\r\n");
 6        }else{
 7            log("ERR:EEPROM write failed.\r\n");
 8        }
 9
10    #endif

将开发板断电后重新上电可以看到测试正确:

图片

image-20220927211659396

注:写入数据根据M24C02的数据手册,其 Write time 为5ms,因此写入后要进行等待其写入完成;

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

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

相关文章

loss盘点: GIoU loss (拆 PaddleDetection 轮子)

1. GIoU 计算 关于 GIoU 的实现,可直接参看原文给出的网站: https://giou.stanford.edu/ GIoU∣A∩B∣∣A∪B∣−∣C∖(A∪B)∣∣C∣IoU−∣C∖(A∪B)∣∣C∣GIoU \frac { |A \ \cap \ B | } { |A \ \cup \ B | } - \frac { | C \setminus (A \ \cup \…

Spring MVC 总结

Spring MVC Spring MVC 是 javaWeb 的开发模块,是一个架构模式,是整个 javaWeb 开发领域 最重要的一个技术。 Spring MVC 文档 Spring MVC 是 Spring 体系的 轻量级Web MVC框架。Spring MVC 的核心 Controller 控制器,用于处理请求&#xff…

C语言入门(五)——深入理解函数

return 语句 增量式开发 递归 return 语句 之前我们一直在main函数中使用return语句,现在是时候全面深入地学习一下。在有返回值地函数中,return语句的作用是提供整个函数的返回值,并结束当前函数返回到调用它的地方。在没有返回值的函数中…

vue修改el-input样式,样式穿透

vue–element的form表单中修改el-input样式 在使用 element ui 组件过程中,我最近碰到了新的问题。 初始的界面效果是这样的: 这个效果真的不怎么好看,我想把输入框的背景色变浅,变得透明。于是我在代码中添加 .el-input{backgro…

Polygon生态

1. 引言 当前区块链存在不可能三角问题: 1)去中心化2)可扩展性3)安全性 当前单一链仅能兼顾不可能三角中的2个维度,而无法做到三者兼顾。 区块链中的主要角色有: 1)共识层——负责对包含在…

python基础篇之数字类型(上)

大家好,我是csdn的博主:lqj_本人 这是我的个人博客主页:lqj_本人的博客_CSDN博客-微信小程序,前端,vue领域博主lqj_本人擅长微信小程序,前端,vue,等方面的知识https://blog.csdn.net/lbcyllqj?spm1000.2115.3001.5343 哔哩哔哩欢迎关注&…

【NI Multisim 14.0原理图设计基础——元器件属性设置】

目录 序言 一、属性编辑 二、元器件属性设置 🍉 1.“标签”选项卡 🍉2.“显示”选项卡 🍉 3.“值”选项卡 🍉 4.“故障”选项卡 🍉5.“管脚”选项卡 🍉 6.“变体”选项卡 🍉 7.“用户字…

正则表达式查漏补缺(包括es9的新方法)

一、创建正则 1、方法创建正则 // let regnew RegExp("a","ig")//检查字符串中是否包含a // let str"a" // console.log(reg.test("As"))i是忽略大小写 g是全局匹配,不会只返回一个 2、字面量创建正则 // let reg/a|c/…

挂载本地光盘

一、挂载本地光盘到/mnt 使用mount模块 二.配置YUM源 (1)使用yum_repository模块 (2) 控制端主机编辑配置文件使用synchronize模块发送到受控主机 (3) 使用file模块创建一个base.repo文件,并…

HarmonyOS鸿蒙学习笔记(17)获取屏幕宽高等属性

ohos.display组件使用获取屏幕属性的三种方法getDefaultDisplay(callback: AsyncCallback<Display>)的用法getDefaultDisplay()的用法getAllDisplay(callback: AsyncCallback<Array<Display>>)的用法参考资料ohos.display屏幕属性提供管理显示设备的一些基础…

linux 设备树简析

1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. 设备树的来源 在 Linux 中&#xff0c;每个设备驱动&#xff0c;管理一组设备数据&#xff0c;类似面向对象编程中类和其实例对象的关系。一段时…

VMware-【Linux】centos7 /boot磁盘扩容

我的/boot当时安装的时候只分了不到200MB现在不够了所以扩容下这是我学习的文章&#xff0c;细节说明了很多地方还有一些坑&#xff1a;https://blog.51cto.com/u_15801765/5697187开始操作前&#xff0c;可以先用命令 df -hl 记录一下你现在/boot 剩余磁盘空间。到文章最后面我…

设计模式_创建型模式 -《工厂模式》

设计模式_创建型模式 -《工厂模式》 笔记整理自 黑马程序员Java设计模式详解&#xff0c; 23种Java设计模式&#xff08;图解框架源码分析实战&#xff09; 概述 需求&#xff1a;设计一个咖啡店点餐系统。 设计一个咖啡类&#xff08;Coffee&#xff09;&#xff0c;并定义其…

MySQL学习之一条SQL查询语句的执行

文章目录前言一、MySQL基础架构二、连接器三、查询缓存四、分析器五、优化器六、执行器前言 今天我们通过一条SQL查询语句的执行过程&#xff0c;来剖析MySQL的基础架构。让我们从宏观上先有一个对MySQL的认识与了解 一、MySQL基础架构 首先&#xff0c;我们要对MySQL的整体架…

深入分析Linux PCI驱动框架分析(二)

说明&#xff1a; Kernel版本&#xff1a;4.14ARM64处理器使用工具&#xff1a;Source Insight 3.5&#xff0c; Visio 1. 概述 本文将分析Linux PCI子系统的框架&#xff0c;主要围绕Linux PCI子系统的初始化以及枚举过程分析&#xff1b;如果对具体的硬件缺乏了解&#xff…

详解c++---vector介绍

这里写目录标题什么是vectorvector的定义reservevector数据插入push_backinsertresizeassignvector数据的删除pop_backeraseclearvector性质查看sizecapacityemptymax_sizevector元素修改operator[ ]atfrontbackvector其他函数operatorswap什么是vector vector是表示可变大小数…

深入浅出Cookie、Session、Token:背后的技术原理

目录 简介 . 网站交互体验升级 1.1 无状态的 HTTP 协议 1.2 解决之道 2. Cookie方案 2.1 Cookie 定义和作用 2.2 服务端创建 Cookie 2.4 存在的问题 3. Session 方案 3.1 Session 机制的概念 3.2 简单的交互流程 3.3 Session 的实现方式 3.4 存在的问题 4. Token…

【微服务】Nacos 认证机制

目录 一、背景 二、需求 三、方案 1、安全架构选型 2、会话管理 2.1、会话选型 2.2、Session 登录流程 2.3、Token 登录流程 2.4、jwt 框架选型 2.5、会话超时 3、SSO 支持 4、UI设计 5、接口设计 6、数据库表设计 6.1、user表 6.2、roles表 7、Filter 拦截请求…

C++ —— 模板的基本概念和使用

目录 1.函数模板是什么 1.1函数模板的基本概念 1.2函数模板的基本使用 1.3函数模板的特化 1.4非类型模板参数 2.类模板是什么 2.1类模板的基本使用 2.2非类型模板参数 2.3类模板的特化 2.4模板特化后的优先级 3.函数模板不要分离编译 1.函数模板是什么 模板是一种…

python和MySQL的基础使用和数据的插入导出

一.基础使用第三方库pymysql除了使用图形化工具以外&#xff0c;我们也可以使用编程语言来执行SQL从而操作数据库。在Python中&#xff0c;使用第三方库:pymysql来完成对MySQL数据库的操作。安装创建到MySQL的数据库链接具体代码如下from pymysql import Connect #获取到MySQL数…