硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1559|回复: 6
收起左侧

[I2C] 中断时I2C驱动,老是进HAL_I2C_ERROR_AF错误?

[复制链接]

49

主题

389

回帖

536

积分

金牌会员

积分
536
发表于 2025-1-2 11:02:48 | 显示全部楼层 |阅读模式
请教一下,使用H7 HAL 库通过I2C接口(中断方式)读取Sensor数据,经常发生HAL_I2C_ERROR_AF错误,这个可能原因有哪些?


另,不是所有传感器都会发生。
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
120448
QQ
发表于 2025-1-2 14:13:00 | 显示全部楼层
H7的I2C主机方式没有使用过,从机方式使用过,没这种问题。
回复

使用道具 举报

49

主题

389

回帖

536

积分

金牌会员

积分
536
 楼主| 发表于 2025-1-2 14:19:01 | 显示全部楼层
eric2013 发表于 2025-1-2 14:13
H7的I2C主机方式没有使用过,从机方式使用过,没这种问题。

已经定位问题,手册提供的设备地址需要进行 <<1 处理,再调用 HAL_I2C_Master_Transmit_IT之类函数
回复

使用道具 举报

49

主题

389

回帖

536

积分

金牌会员

积分
536
 楼主| 发表于 2025-1-2 17:46:09 | 显示全部楼层
分析时序,发现ACK信号正常,但读取寄存器数据全为零


2025-01-02_16-57-51.jpg

回复

使用道具 举报

8

主题

30

回帖

59

积分

初级会员

积分
59
发表于 2025-1-3 06:43:24 | 显示全部楼层
I2C主机要考虑有噪声的情况,有时会有数据错误或者不应答,之前使用一个I2C的光传感器的时候发生过。一定要有容错处理。
回复

使用道具 举报

49

主题

389

回帖

536

积分

金牌会员

积分
536
 楼主| 发表于 2025-1-3 08:28:37 | 显示全部楼层
wanglehui_12 发表于 2025-1-2 17:46
分析时序,发现ACK信号正常,但读取寄存器数据全为零

定位了问题,必须严格按照传感器时序进行读写操作
2025-01-02_18-29-56.jpg

使用STM32 HAL API组织实现:


HAL_I2C_Master_Seq_Transmit_XX

HAL_I2C_Master_Seq_Receive_XX




回复

使用道具 举报

27

主题

269

回帖

350

积分

高级会员

积分
350
QQ
发表于 昨天 12:00 | 显示全部楼层
本帖最后由 yono 于 2026-1-9 12:01 编辑
wanglehui_12 发表于 2025-1-2 14:19
已经定位问题,手册提供的设备地址需要进行

这个我知道,hal 库的 i2c 会用最低位标记读写,在 api 函数中自动处理最低位(置读或置写),实际地址需要放在其他高位。

其实我不知道,是 GPT 自动生成代码然后告诉我的。AI时代基本上只要自己完成驱动层就可以让他生成基本操作的示例了,如果用hal库甚至不需要编写驱动层。

手册是啥?哪怕遇到问题都是让AI看手册

屏幕截图 2026-01-09 115737.png

屏幕截图 2026-01-09 115832.png

屏幕截图 2026-01-09 115933.png






回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-1-10 17:19 , Processed in 0.068006 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表