【STM32 CubeMX】I2C查询方式
@TOC
前言
在STM32 CubeMX环境中,I2C(Inter-Integrated Circuit)通信协议的查询方式是一种简单而常见的通信方式。通过查询方式,微控制器不断地检查I2C总线的状态,直到数据准备就绪并可以进行传输。这种方式适用于简单的通信需求,而且在STM32 CubeMX的图形化配置工具中,我们可以方便地配置I2C的查询方式,使得通信的实现变得更加容易。
对于我们的IIC协议来说,他和我们的串口是非常的像的,比如有查询方式,中断方式还有DMA方式,这都是有的本博客主要是讲解IIC的查询方式
一、CubeMX配置IIC
点击Connectivity
选择你想要的I2C
我们可以找到他对应的引脚:
接下来生成代码,我们就可以去使用I2C了
二、查询方式的使用
2.1 分析一种情况
如果我去读一个存储空间使用I2C,我先要发送我要读的地址,然后从设备把我要读的内容给我返回过来,这样就完成了一次I2C的操作了
我们可以实现两个函数,一个发送地址,一个读地址上的内容。
或者实现一个函数实现了发送地址和读地址上的内容。
HAL库帮我们实现了这几个函数
- 一个发送一个接收这种叫做Master模式
- 一个函数实现发送地址和接收地址叫做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模式的函数,他们的参数区别仅仅是MemAddress
和MemAddSize
MemAddress的含义:
你要写入/读出的地址
MemAddSize的含义:
存储地址的大小,有 2 种取值:
I2C_MEMADD_SIZE_8BIT:存储地址为 1 字
节,就是 MemAddress 的低字节
I2C_MEMADD_SIZE_16BIT:存储地址为 2 字
节,先发送 MemAddress 的高字节,再发送低字节
总结
I2C的查询方式是一种简单而直观的通信方式,特别适用于简单的通信需求。在STM32 CubeMX环境中,通过图形化配置工具,我们可以轻松地配置I2C的查询方式,从而加快开发过程。总体而言,查询方式提供了一种直观的、易于理解的通信方式,适用于一些对实时性要求不高的应用场景。在这种方式下,STM32 CubeMX为开发者提供了方便而高效的工具,使得I2C通信的配置变得更加简便。
- 点赞
- 收藏
- 关注作者
评论(0)