找回密码
 立即注册
查看: 95|回复: 5

8H1K17初始化I2C后死机

[复制链接]
已绑定手机

2

主题

2

回帖

18

积分

新手上路

积分
18
发表于 2025-3-3 11:01:06 | 显示全部楼层 |阅读模式
这是我的测试代码,初始化I2C后,主循环中间隔时间翻转测试指示灯。
问题:只初始化IO口,不初始化I2C,主循环的指示灯翻转正常。初始I2C后,主循环中的指示灯翻转功能就运行不起来了。

截图202503031051432784.jpg
这是我的I2C部分原理图
截图202503031059426796.jpg




回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-3-3 11:03:00 | 显示全部楼层
根据您描述的问题,初步判断可能是I2C初始化过程中存在配置错误或硬件冲突。建议您从以下几个方面进行排查:

1. **I2C引脚配置**:确保I2C的SDA和SCL引脚配置正确,且未与其他功能冲突。检查引脚复用配置和上拉电阻是否正常。

2. **时钟配置**:I2C的时钟频率应与外设匹配,过高或过低的时钟频率可能导致通信失败。建议根据手册设置合适的时钟分频。

3. **中断与优先级**:如果使用了I2C中断,确保中断优先级和使能状态正确,避免中断嵌套或死锁。

4. **硬件连接**:检查I2C总线上的设备地址和硬件连接,确保设备正常工作且无短路或断路。

5. **调试信息**:通过调试工具查看I2C初始化后的寄存器状态,确认配置是否生效。

建议逐步排查,先确保I2C初始化代码正确,再结合硬件调试工具分析问题。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-3-3 11:08:00 | 显示全部楼层
根据您描述的问题,初步判断可能是I2C初始化过程中存在配置错误或硬件冲突。建议从以下几个方面排查:

1. **时钟配置**:确保I2C时钟频率设置正确,避免过高或过低导致通信异常。
2. **引脚复用**:检查I2C引脚是否与其他功能引脚冲突,确保引脚复用配置正确。
3. **中断处理**:如果使用了I2C中断,确保中断服务程序正确编写,避免死循环或未清除中断标志。
4. **电源与上拉电阻**:确认I2C总线的电源稳定,SCL和SDA引脚是否接有适当的上拉电阻(通常为4.7kΩ)。
5. **调试信息**:通过调试工具或串口输出,观察I2C初始化后的状态寄存器,确认初始化是否成功。

建议逐步简化代码,隔离I2C初始化部分,定位具体问题。如有必要,可参考STC8H1K17的数据手册,核对I2C相关寄存器的配置。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

已绑定手机

2

主题

2

回帖

18

积分

新手上路

积分
18
发表于 2025-3-3 11:13:48 | 显示全部楼层
目前工程中,只初始化I2C,其他功能都屏蔽了。排除了硬件冲突的问题。初始化是参考你们的demo应该没问题,就2个寄存器。

点评

是否使用了I2C中断?如果使用了,请处理好中断函数。 函数是否使用了死等?使用了,如果等待的事件没出现,就会死机,请添加超时处理,追踪一下死在哪里(超时的地方设置标志并上传给PC观察)。  详情 回复 发表于 2025-3-3 11:38
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-01 07:10:25
已绑定手机

76

主题

4833

回帖

8343

积分

超级版主

DebugLab

积分
8343
发表于 2025-3-3 11:36:51 | 显示全部楼层
没有设置I2CMSCR,初始化时需要设置为待机,如使用中断打开EMSI并清除中断标志,打开的中断必须要有中断函数
正常的主机模式初始化参考(AI8051U):
  1. //I2C设置
  2.         
  3. //        I2CCFG=0xD7;        //400K@40M
  4. //        I2CPSCR=0x00;        //400K@40M
  5.         
  6.         I2CCFG=0xE2;        //100K@40M
  7.         I2CPSCR=0x01;        //100K@40M
  8.         
  9.         I2CMSCR=EMSI;        //允许主机模式中断,主机命令为待机
  10.         I2CMSST=0x00;        //清除中断标志
  11.         
  12.         //中断设置
  13.         EA=1;
复制代码


DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2025-3-3 11:38:00 | 显示全部楼层
Gav*** 发表于 2025-3-3 11:13
目前工程中,只初始化I2C,其他功能都屏蔽了。排除了硬件冲突的问题。初始化是参考你们的demo应该没问题, ...

是否使用了I2C中断?如果使用了,请处理好中断函数。
函数是否使用了死等?使用了,如果等待的事件没出现,就会死机,请添加超时处理,追踪一下死在哪里(超时的地方设置标志并上传给PC观察)。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:36 , Processed in 0.144669 second(s), 80 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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