• 正文
  • 推荐器件
  • 相关推荐
申请入驻 产业图谱

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

2023/10/17
665
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

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模型 风险等级 参考价格 更多信息
510KCA25M0000BAG 1 Silicon Laboratories Inc Oscillator, 0.1MHz Min, 212.5MHz Max, 25MHz Nom,

ECAD模型

下载ECAD模型
$4.67 查看
CSTCR4M00G53Z-R0 1 Murata Manufacturing Co Ltd Ceramic Resonator, 4MHz Nom, SMD, 3 PIN

ECAD模型

下载ECAD模型
$0.38 查看
FTLX8573D3BTL 1 Finisar Corporation Transceiver, 840nm Min, 860nm Max, LC Connector, Panel Mount, PACKAGE-20
$67.02 查看

相关推荐

嵌入式知识,FPGA,通信等知识交流。