加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

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

2023/10/17
2878
阅读需 4 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

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

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这个地址。

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

写: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){  ;}

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
VCC1-B3D-50M0000000 1 Vectron International CMOS Output Clock Oscillator, 50MHz Nom, ROHS COMPLIANT, HERMETIC SEALED, SMALL PACKAGE-4
暂无数据 查看
ASSR-1218-003E 1 Avago Technologies TRANSISTOR OUTPUT SOLID STATE RELAY, 3750V ISOLATION-MAX, ROHS COMPLIANT, SURFACE MOUNT, SOP-4
$1.93 查看
PD69208T4ILQ-TR 1 Microsemi Corporation Power Supply Support Circuit,
暂无数据 查看

相关推荐

电子产业图谱