RT-Thread Studio学习(十一)IIC

article/2025/9/9 3:29:37

RT-Thread Studio学习(十一)IIC

  • 一、简介
  • 二、新建RT-Thread项目并使用外部时钟
  • 三、设置AT24Cxx的驱动框架
  • 四、驱动代码移植
  • 五、测试
  • 六、总结

一、简介

本文将基于STM32F407ZGT芯片介绍如何在RT-Thread Studio开发环境下访问AT24C256模块。

  • 操作系统:WIN10 x64
  • 硬件电路:正点原子探索者开发板,主芯片为STM32F407ZGT6
  • 软件开发环境:STM32CubeMX v6.3.0,RT-Thread Studio v2.2.4

二、新建RT-Thread项目并使用外部时钟

详细步骤参考文档《RT-Thread Studio学习(一)使用外部时钟系统》。
在STM32CubeMX中仅仅启用了USART1串口,配置了RCC晶体振和SYS下载方式。

三、设置AT24Cxx的驱动框架

查看原理图
在这里插入图片描述
在RT-Thread Studio的RT-Thread settings中,添加软件包at24cxx,再开启软件模拟I2C

根据开发板原理图,在board.h文件中,修改相应代码

/*#define BSP_USING_I2C1*/
#define BSP_USING_I2C1
#ifdef BSP_USING_I2C1
#define BSP_I2C1_SCL_PIN    GET_PIN(D, 6)
#define BSP_I2C1_SDA_PIN    GET_PIN(D, 7)
#endif

四、驱动代码移植

打开工程目录下的packagesat24cxx-latestat24cxx.h,修改第34-36行代码:

#ifndef EE_TYPE
#define EE_TYPE     AT24C256
#endif

在这里插入图片描述
在工程目录下的applications文件夹下添加文件hw_at24cxx.hhw_at24cxx.c
hw_at24cxx.h

#ifndef APPLICATIONS_HW_AT24CXX_H_
#define APPLICATIONS_HW_AT24CXX_H_extern void hw_at24cxx_init(void);
extern void hw_at24cxx_prog(void);#endif /* APPLICATIONS_HW_AT24CXX_H_ */

hw_at24cxx.c

#include <hw_at24cxx.h>
#include "at24cxx.h"#define AT24CXX_ADDR (0xA0 >> 1)        //A0 A1 A2 connect  GND
#define AT24Cxx_I2C_NAME        "i2c1"  /* PWM设备名称 */struct at24cxx_device *at24cxx_dev;void hw_at24cxx_init(void)
{at24cxx_dev = at24cxx_init(AT24Cxx_I2C_NAME,AT24CXX_ADDR);
}void hw_at24cxx_prog(void)
{rt_uint8_t buff[2]={55,66};at24cxx_write(at24cxx_dev,0x00,buff,2);buff[0] = 0;buff[1] = 0;rt_thread_mdelay(10);at24cxx_read(at24cxx_dev,0x00,buff,2);rt_kprintf("buff[0] = %d\n buff[1] = %d\n",buff[0],buff[1]);
}

修改main.c的代码为:

main.c

#include <rtthread.h>#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>int main(void)
{int count = 1;LOG_D("Hello RT-Thread!");hw_at24cxx_init();while (1){hw_at24cxx_prog();rt_thread_mdelay(1000);}return RT_EOK;
}

五、测试

在这里插入图片描述
在这里插入图片描述

六、总结

本文仅仅搭建了能够使用的IIC驱动框架和代码,需要更多实验内容可以灵活使用官方函数:

extern at24cxx_device_t at24cxx_init(const char *i2c_bus_name, uint8_t AddrInput);
extern rt_err_t at24cxx_read(at24cxx_device_t dev, uint32_t ReadAddr, uint8_t *pBuffer, uint16_t NumToRead);
extern rt_err_t at24cxx_write(at24cxx_device_t dev, uint32_t WriteAddr, uint8_t *pBuffer, uint16_t NumToWrite);
extern rt_err_t at24cxx_page_read(at24cxx_device_t dev, uint32_t ReadAddr, uint8_t *pBuffer, uint16_t NumToRead);
extern rt_err_t at24cxx_page_write(at24cxx_device_t dev, uint32_t WriteAddr, uint8_t *pBuffer, uint16_t NumToWrite);

http://chatgpt.dhexx.cn/article/T1IwZ9CF.shtml

相关文章

从根上理解操作系统(二)

目录 进程 1、进程到底是什么 2、怎么知道时间片用完的 3、进程切换 4、进程初始化 5、任务堆栈 6、系统调用 进程 程序是一个可执行文件&#xff0c;而进程是一个执行中的程序实例&#xff0c;所以可以认为 进程 进程资源 执行序列 利用分时技术&#xff0c;在操作系统…

【ubuntu18.04】meson 安装 及python升级python3.9

发现openh264 支持meson 发现openh264 支持meson 写的也太简单了完全不知道openh264 到底怎么搞meson看起来支持windows和ubuntu先安装python3 参考大神: 注意:meson安装前必须确认是否已经安装python3.5及以上版本;因为meson依赖于python3和ninja 1 安装python3和ninja:su…

KEAZ128 时钟配置

本文介绍如何用KEAZ128评估版&#xff08;FRDM-KEAZ128Q80&#xff09;配置为40MHz core freqency/20MHz bus frequency。 1.了解器件时钟特性 参见NXP KEA128 DS&#xff08;S9KEA128P80M48SF0.pdf )&#xff0c;可以知道这个MCU最高支持48MHz core frequency. 从KEA128 RM&…

《软件工程》整理

目录 Scrum开发 概念 scrum开发流程 Scrum开发 需求获取&#xff08;拆分&#xff09; DevOps Server的CMMI模型对需求的层级划分&#xff0c;Epic&#xff08;长篇故事&#xff09;、Feature&#xff08;特性&#xff09;、Requirement&#xff08;需求&#xff09;其中&am…

RTKLIB源码调试.trace文件解析.stat文件解析

.trace文件是调试文件&#xff0c;帮助用户在程序、输入数据时&#xff0c;进行分析的一个很好的提示&#xff01; .trace文件的生成、trace文件内容的生成&#xff0c;均在execses中&#xff01; 以单点定位为例&#xff0c;大体流程为&#xff1a; 生成.trace文件&#xf…

sopt:一个简单的python最优化库

sopt:一个简单的python最优化库引言 最近有些朋友总来问我有关遗传算法的东西&#xff0c;我是在大学搞数学建模的时候接触过一些最优化和进化算法方面的东西&#xff0c;以前也写过几篇博客记录过,比如遗传算法的C语言实现(一):以非线性函数求极值为例和C语言实现粒子群算法(P…

python古诗词生成_Python一日一练02----诗词生成器

要求 编写一段程序&#xff0c;可以自动生成小诗。 格式如下 源码 import random import sys articles ["the", "a", "another", "her", "his"] subjects ["cat", "dog", "horse", "m…

LSTM古诗词生成

Le LSTM古诗词生成 一、简介 基于LSTM的古诗词生成&#xff0c;设计神经网络模型&#xff0c;使模型学习数据是6291首古诗&#xff0c;没有专门的验证数据和测试数据&#xff0c;感觉不会预测正确。边学习边生成古诗&#xff0c;从生成的古诗来看学习的效果。 涉及到的模块有Py…

宋词自动生成

利用宋词语料库&#xff0c;通过单双词的组合与模板的匹配&#xff0c;实现指定词牌宋词的生成 import random import tkinter as tk import re from tkinter import messageboxlist []class Window:# 界面设计def __init__(self, root):label1 tk.Label(root, text输入词牌…

基于Python的宋词生成器

资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/85631523 1. 背景 我有两个爱好&#xff0c;一个是传统文化&#xff0c;另一个是高新技术。 传统文化&#xff0c;我喜欢唐诗宋词、笔墨丹青&#xff0c;高新技术我则从事前沿的IT编程&#xff0c;喜…

基于java的古诗词生成管理系统

10161-古诗词生成管理系统 开发工具 eclipse tomact mysql jdk 功能详情&#xff1a; 古诗搜索、古诗问答、机器回复、古诗管理&#xff08;添加古诗、古诗分类、古诗标签、古诗列表&#xff09;、用户管理

田字格字帖生成器、孩子取名系列工具

大家好&#xff0c;我是小寻&#xff0c;欢迎关注公众号:工具优选&#xff0c;免费领取优质项目源码和常用工具&#xff0c;还可以加入我的交流群! 这是是一款2013年上线的在线小工具集&#xff0c;包括了 13 款中文学习工具&#xff0c;有田字格字帖、拼音田字格、古诗词字帖…

有趣的深度学习——使用TensorFlow 2.0 + RNN 实现一个古体诗生成器

一、前言 很早之前&#xff0c;我曾经写过一个古体诗生成器&#xff08;详情可以戳TensorFlow练手项目二&#xff1a;基于循环神经网络(RNN)的古诗生成器&#xff09;&#xff0c;那个时候用的还是Python 2.7和TensorFlow 1.4。 随着框架的迭代&#xff0c;API 的变更&#x…

现在还可以一键自动生成古诗词,你知道吗?

人类在漫长的历史长河中&#xff0c;一直在探索着各种各样的美好&#xff0c;不断地追求着更高的境界。而如今&#xff0c;随着科技的不断发展&#xff0c;人工智能已经成为了我们得力的伙伴之一&#xff0c;为我们带来了更多的便利和可能性。尤其是在艺术和文化领域&#xff0…

古诗词在线起名 - 一刀工具箱

古诗词名字生成器帮助你在线生成古诗词名字&#xff0c;包含&#xff1a;诗经、楚辞、唐诗、宋词、辞赋等古风的名字&#xff0c;这些名字都非常的优美好听&#xff0c;希望你们能够喜欢这款古诗词起名工具。 代码片段 async subName() {let name_arr Object.keys(this.userN…

NLP入门 - 基于Word Embedding + LSTM的古诗生成器

一共实现三个功能&#xff1a; 1. 续写五言诗 2. 续写七言诗 3. 写五言藏头诗 之前用这个做Intro to Computer Science的期末项目折腾太久&#xff0c;不想赘述&#xff0c;内容介绍及实现方法可参考期末presentation的slides&#xff1a; https://docs.google.com/presen…

基于古诗词的名字生成器

数据集 因为数据量庞大&#xff0c;使用本地的 CSV 数据进行测试。 后续改进 CSV 文件保存到 mongodb 数据库&#xff0c;便于聚合查询。 数据分词 我们需要一个分词器将这些数据进行分词&#xff0c;用到的是 Golang 版的 jieba 库如下&#xff1a; "github.com/go-e…

基于LSTM + keras 的古诗生成器

1.语料准备&#xff1a;包含 5.5 万首唐诗、26 万首宋诗、2.1 万首宋词和其他古典文集。诗人包括唐宋两朝近 1.4 万古诗人&#xff0c;和两宋时期 1.5 千古词人。数据来源于互联网。每行一首诗&#xff0c;标题在预处理的时候已经去掉了。2.模型参数配置&#xff1a;预先定义模…

唐诗生成器

使用唐诗语料库&#xff0c;经过去噪预处理、分词、生成搭配、生成主题等过程&#xff0c;生成唐诗。 csdn下载地址&#xff1a;http://download.csdn.net/detail/lijiancheng0614/9840952 github上repository地址&#xff1a;https://github.com/lijiancheng0614/poem_genera…

JQuery中的val()函数

JQuery中的val()函数相当于Javascript中的value属性&#xff0c;可以用来设置和获取元素的值。 下面用一个简单的邮箱登陆界面来举个例子&#xff1a; 在默认情况下邮箱的地址输入框和密码输入框都有相应的提示。 要求&#xff1a;当鼠标聚焦在邮箱地址输入框时&#xff0c;提…