【STM32 CubeMX】I2C查询方式

文章目录

  • 前言
  • 一、CubeMX配置IIC
  • 二、查询方式的使用
    • 2.1 分析一种情况
    • 2.2 Master模式
    • 2.3 Mem模式
  • 总结


前言

在STM32 CubeMX环境中,I2C(Inter-Integrated Circuit)通信协议的查询方式是一种简单而常见的通信方式。通过查询方式,微控制器不断地检查I2C总线的状态,直到数据准备就绪并可以进行传输。这种方式适用于简单的通信需求,而且在STM32 CubeMX的图形化配置工具中,我们可以方便地配置I2C的查询方式,使得通信的实现变得更加容易。


对于我们的IIC协议来说,他和我们的串口是非常的像的,比如有查询方式,中断方式还有DMA方式,这都是有的本博客主要是讲解IIC的查询方式

一、CubeMX配置IIC

点击Connectivity
在这里插入图片描述
选择你想要的I2C
在这里插入图片描述
我们可以找到他对应的引脚:
在这里插入图片描述
接下来生成代码,我们就可以去使用I2C了

二、查询方式的使用

2.1 分析一种情况

如果我去读一个存储空间使用I2C,我先要发送我要读的地址,然后从设备把我要读的内容给我返回过来,这样就完成了一次I2C的操作了
我们可以实现两个函数,一个发送地址,一个读地址上的内容。
或者实现一个函数实现了发送地址和读地址上的内容。

HAL库帮我们实现了这几个函数

  1. 一个发送一个接收这种叫做Master模式
  2. 一个函数实现发送地址和接收地址叫做Mem模式

2.2 Master模式

我们可以使用下面这两个函数进行Master模式的发送和接收:

HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, 
uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, 
uint8_t *pData, uint16_t Size, uint32_t Timeout);

I2C_HandleTypeDef *hi2c 使用哪个 I2C 控制器
uint16_t DevAddress 设备地址,需要把 7 位地址左移 1 位
uint8_t *pData 数据 buffer
uint16_t Size 数据个数
uint32_t Timeout 超时时间,单位是 Tick,一般是 1ms
返回值 HAL_OK:成功
HAL_ERROR:错误
HAL_BUSY:总线忙
HAL_TIMEOUT:超时

2.3 Mem模式

MEM 模式只是软件上的概念,仍然是作为 Master 读写数据。
上述函数只能发起单向的数据传输,但是在实际编程中,比如要“读存储地址 addr 上
的数值”,涉及 2 个方向的数据传输:要向 I2C 设备发起写操作把“存储地址 addr”发给
他,然后向 I2C 设备发起读操作得到数值。
还 有 一 种 情 况 ,“ 把 数 值 val 写 到 存 储 地 址 addr ” 上 , 使 用“HAL_I2C_Master_Transmit”函数时,需要在数据 buffer 里填入 addr 和 val,不太直观。
这时可以使用下面的函数:

HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t 
MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t 
MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout);

对于Mem模式,他会一次性把要写入/读出的I2C地址传入,然后把数据读出。一次性完成
那么对于Mem模式的函数,他们的参数区别仅仅是MemAddressMemAddSize
MemAddress的含义:
你要写入/读出的地址

MemAddSize的含义:
存储地址的大小,有 2 种取值:
I2C_MEMADD_SIZE_8BIT:存储地址为 1 字
节,就是 MemAddress 的低字节
I2C_MEMADD_SIZE_16BIT:存储地址为 2 字
节,先发送 MemAddress 的高字节,再发送低字节


总结

I2C的查询方式是一种简单而直观的通信方式,特别适用于简单的通信需求。在STM32 CubeMX环境中,通过图形化配置工具,我们可以轻松地配置I2C的查询方式,从而加快开发过程。总体而言,查询方式提供了一种直观的、易于理解的通信方式,适用于一些对实时性要求不高的应用场景。在这种方式下,STM32 CubeMX为开发者提供了方便而高效的工具,使得I2C通信的配置变得更加简便。

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

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

相关文章

【并发编程】AQS原理

📝个人主页:五敷有你 🔥系列专栏:并发编程 ⛺️稳中求进,晒太阳 1. 概述 全称是 AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架 特点: 用 state 属性来表示资源的状…

【漏洞复现】某情侣飞行棋源码未授权访问漏洞

Nx01 产品简介 情侣飞行棋源码是一款专为情侣设计的互动游戏。通过游戏的方式,它可以帮助情侣们建立共同兴趣,增加互动,增进了解,培养默契,并创造美好的回忆。 Nx02 漏洞描述 某情侣飞行棋源码存在未授权访问漏洞&…

讲解用Python处理Excel表格

我们今天来一起探索一下用Python怎么操作Excel文件。与word文件的操作库python-docx类似,Python也有专门的库为Excel文件的操作提供支持,这些库包括xlrd、xlwt、xlutils、openpyxl、xlsxwriter几种,其中我最喜欢用的是openpyxl,这…

[嵌入式系统-16]:RT-Thread -2- 主要功能功能组件详解与API函数说明

目录 一、RT-Thread主要功能组件 二、内核组件 2.1 概述 2.2 API 三、设备驱动 3.1 概述 3.2 API 四、通信组件 4.1 概述 4.4 API 五、网络组件 5.1 概述 5.2 API 5.3 补充:MQTT协议 六、文件系统 6.1 概述 6.2 API 七、GUI 组件 7.1 概述 7.2 …

小米米家智能摄像头mp4多碎片手工恢复案例

小米米家智能摄像头mp4多碎片手工恢复案例 智能摄像头品牌中小米算是绝对的大厂,其采用的方案也是比较成熟比较典型的:日志截图1分钟1个文件。小米米家的智能摄像头之前处理过很多,这次来讲一个比较特殊的案例。 故障存储: 32G TF卡 fat…

机器学习和统计学的区别?

1、本质区别: 目标:机器学习的核心目标是建立一个可以自动学习和改进的模型,以预测未知数据。它更关注结果的准确性和模型的泛化能力,通常不关心模型是否可以解释。而统计学的目标是探究变量之间的关系,理解数据的内在…

HCIA-HarmonyOS设备开发认证V2.0-轻量系统内核基础-信号量semaphore

目录 一、信号量基本概念二、信号量运行机制三、信号量开发流程四、信号量接口五、代码分析(待续...)坚持就有收获 一、信号量基本概念 信号量(Semaphore)是一种实现任务间通信的机制,可以实现任务间同步或共享资源的…

RT-Thread(RTT)如何打印输出浮点数

问题: 一、基于RTT的工程下,打印输出浮点数 二、输出的都是这些,因为RTT默认下不支持输出浮点数 解决: 一、点击RT-Thread Settings 二、点击添加软件包 三、输入print ,搜索后添加rt_vsnprintf_full这个 四、添加后…

【惠友小课堂】滑雪的尽头是骨科?这份滑雪指南快收好,安全快乐两不误

今年滑雪运动异常火爆,寒假一开启,不少家长趁着放假打算带孩子出门玩一趟,各地的滑雪场也成了最热门的旅游项目之一。 但说到滑雪 不少网友调侃“听说雪道的尽头是骨科”还有人说“今年滑雪一共花了2万”“滑雪2000,骨折进医院180…

相机图像质量研究(13)常见问题总结:光学结构对成像的影响--鬼影

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结:光学结构对成…

RK3568笔记十六:Framebuffer实验

若该文为原创文章,转载请注明原文出处。 本意是移植LVGL,但在编译DRM过程中一直编译失败,然后就想Framebuffer是否可以用,所以测试一下。 一、framebuffer介绍 FrameBuffer中文译名为帧缓冲驱动,它是出现在2.2.xx内…

【刷题记录】合并两个有序数组、移除元素

本系列博客为个人刷题思路分享,有需要借鉴即可。 1.题目链接: T1:LINK T2:LINK 2.详解思路: T1: 思路1:弄个新数组,比较两个数组中的值,哪个小就把哪个值放到新数组中。 分析1&a…

精品jsp+ssm汽车店维保信息系统

《[含文档PPT源码等]精品jspssm汽车店维保信息系统[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 使用技术: 开发语言:Java 框架:ssm 技术:JSP JDK版本&…

智慧供应链控制塔大数据解决方案

一、供应链控制塔的概念定义 (1) Gartner 的定义: “控制塔是一个物理或虚拟仪表板,提供准确的、及时的、完整的物流事件和数据,从组织和服务的内部和跨组织运作供应链,以协调所有相关活动。”、“供应链控制塔…提供供应链端到端整体可见性和近实时信息和决策的概念……

0901多元函数的基本概念-多元函数微分法及其应用

文章目录 1 平面点集1.1 坐标平面1.2 平面点集1.3 邻域1.4 电与点集的关系1.5 聚点1.6 点集所属点的特征定义的平面点集 2 多元函数的概念2.1 定义2.2 值域2.3推广2.4 自然定义域2.5 二元函数的图形 3 多元函数的极限4 多元函数的连续性4.1 连续函数定义4.2 间断点定义4.3 多元…

『 C++ - STL 』位图(BitMap)与布隆过滤器(Bloom Filter)

文章目录 🧸 位图(BitMap)概念🧸 位图的实现🪅 总体框架🪅 位图的数据插入🧩 左移操作与右移操作的区别 🪅 位图的数据删除🪅 位图的数据查找🪅 位图整体代码(供参考) 🧸…

第7章 Page449 7.8.9智能指针 std::unique_ptr课堂作业,使用智能指针改写foo()函数

源代码&#xff1a; /** \brief 使用std::unique_ptr改写智能指针章节开始的foo()函数** \param* \param* \return**/ #include <iostream> #include <memory>using namespace std;struct O {~O(){cout << "我是被管的对象。我要被释放啦......" …

【Java多线程】对进程与线程的理解

目录 1、进程/任务&#xff08;Process/Task&#xff09; 2、进程控制块抽象(PCB Process Control Block) 2.1、PCB重要属性 2.2、PCB中支持进程调度的一些属性 3、 内存分配 —— 内存管理&#xff08;Memory Manage&#xff09; 4、线程&#xff08;Thread&#xff09;…

关于DVWA靶场Could not connect to the database service的几种解决办法

总的来说这个问题都是 config 配置文件没有修改正确 一般修改数据库的用户名和密码与 phpstudy 一致并且添加了 key 就能初始化成功的 但是我还遇到过另一种情况&#xff0c;修改了上面的东西依旧无法连接到数据库 Could not connect to the database service. Please check …

猫头虎分享已解决Bug || ValueError: Found array with dim 3. Estimator expected <= 2.

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …