前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >STM32的IIC库函数使用误区注意

STM32的IIC库函数使用误区注意

作者头像
用户9736681
发布2023-10-23 17:46:29
1590
发布2023-10-23 17:46:29
举报
文章被收录于专栏:嵌入式随笔嵌入式随笔

HAL库里有很多的IIC的库函数,比如

代码语言:javascript
复制
HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size)
HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size);
HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size)等

这些函数参数需要使用发送的器件地址,数据地址和数据长度。具体的器件地址需要查询数据手册。很多原理图会标记出器件的地址(七位地址),如果不看手册,直接使用此地址进行读写的话往往是不行的。

这里的地址一般使用的是八位地址,IIC的器件手册给的一般是七位地址比如下两个图的A2A1A0如果全都为0,七位地址就是1110000=0x70;

但是根据读写要将此地址左移一位,然后最低位赋值0或者1。此例子中,读地址为11100001=0xE1;

写地址为11100000=0xE0。使用库函数的时候要使用这两个地址,不要直接使用0x70这个地址。

以此地址为例可以进行如下读写。

代码语言:javascript
复制
写:
HAL_I2C_Master_Transmit_IT(&hi2c1,0xE0, Pointer_Register,1);
while (HAL_I2C_GetState(&hi2c1) != HAL_I2C_STATE_READY)
{
  ;
}
读:
HAL_I2C_Master_Receive_IT(&hi2c1, 0xE1, pData,1);
while (HAL_I2C_GetState(&hi2c1) != HAL_I2C_STATE_READY)
{
  ;
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档