STM32 HAL 硬件I2C

本文分享STM32 HAL硬件I2C使用记录。此前因硬件I2C有BUG多用IO模拟,现测试没问题。介绍I2C配置、查看生成代码,指出使用I2C时程序常返回BUSY是未复位I2C,1.5版本STM32Cube IDE生成代码已调用复位。还说明用I2C读TMP103温度传感器方法,以及BUSY问题可能是上拉电阻虚焊。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STM32 HAL 硬件I2C使用记录

以前听说硬件I2C有BUG,一直用的都是IO模拟,现在试了下硬件I2C没问题了,在此分享下

I2C配置

在这里插入图片描述

查看生成的代码

在此之前,网上最多问题是使用I2C时,程序一直返回BUSY,导致该问题的原因是程序没有复位I2C。
使用1.5版本的STM32Cube IDE生成的代码已经调用复位了I2C
在这里插入图片描述

使用I2C读取TMP103温度传感器

直接使用库函数
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)

值得注意的是,从设备的地址(DevAddress)的7位地址是左对齐的

问题排查

如果看到代码已经执行过复位了
/Reset I2C/
hi2c->Instance->CR1 |= I2C_CR1_SWRST;
hi2c->Instance->CR1 &= ~I2C_CR1_SWRST;

但还是一直返回BUSY的话,那可能是SCL和SDA上拉电阻虚焊。两个地方都要加4.7K的上拉电阻

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值