• 【STM32 CubeMX】I2C查询方式



    前言

    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);
    
    • 1
    • 2
    • 3
    • 4

    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);
    
    • 1
    • 2
    • 3
    • 4

    对于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通信的配置变得更加简便。

  • 相关阅读:
    大数据安全技术总体视图
    简单概括下get请求和post请求的区别
    Python的推导式与三目运算符
    【无标Spring Boot (十五): Spring Boot + Jpa + Thymeleaf 增删改查示例题】
    中国电子学会五级C++考试秘籍
    30分钟学会如何使用Shiro
    Django思维导图-配置信息
    定时任务报警通知解决方案详解
    【7.27】代码源 - 【删数】【括号序列】【数字替换】【游戏】【画画】
    实现外网手机或者电脑随时随地远程访问家里的电脑主机(linux为例)
  • 原文地址:https://blog.csdn.net/m0_62599305/article/details/136114220