GavinW 发表于 2025-3-3 11:01:06

8H1K17初始化I2C后死机

这是我的测试代码,初始化I2C后,主循环中间隔时间翻转测试指示灯。
问题:只初始化IO口,不初始化I2C,主循环的指示灯翻转正常。初始I2C后,主循环中的指示灯翻转功能就运行不起来了。


这是我的I2C部分原理图





国芯人工智能 发表于 2025-3-3 11:03:00

根据您描述的问题,初步判断可能是I2C初始化过程中存在配置错误或硬件冲突。建议您从以下几个方面进行排查:

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

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

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

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

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

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

[本文内容由国芯人工智能辅助生成,仅供参考]

国芯人工智能 发表于 2025-3-3 11:08:00

根据您描述的问题,初步判断可能是I2C初始化过程中存在配置错误或硬件冲突。建议从以下几个方面排查:

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

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

[本文内容由国芯人工智能辅助生成,仅供参考]

GavinW 发表于 2025-3-3 11:13:48

目前工程中,只初始化I2C,其他功能都屏蔽了。排除了硬件冲突的问题。初始化是参考你们的demo应该没问题,就2个寄存器。

DebugLab 发表于 2025-3-3 11:36:51

没有设置I2CMSCR,初始化时需要设置为待机,如使用中断打开EMSI并清除中断标志,打开的中断必须要有中断函数
正常的主机模式初始化参考(AI8051U):
//I2C设置
      
//      I2CCFG=0xD7;      //400K@40M
//      I2CPSCR=0x00;      //400K@40M
      
      I2CCFG=0xE2;      //100K@40M
      I2CPSCR=0x01;      //100K@40M
      
      I2CMSCR=EMSI;      //允许主机模式中断,主机命令为待机
      I2CMSST=0x00;      //清除中断标志
      
      //中断设置
      EA=1;

梁工 发表于 2025-3-3 11:38:00

GavinW 发表于 2025-3-3 11:13
目前工程中,只初始化I2C,其他功能都屏蔽了。排除了硬件冲突的问题。初始化是参考你们的demo应该没问题, ...

是否使用了I2C中断?如果使用了,请处理好中断函数。
函数是否使用了死等?使用了,如果等待的事件没出现,就会死机,请添加超时处理,追踪一下死在哪里(超时的地方设置标志并上传给PC观察)。
页: [1]
查看完整版本: 8H1K17初始化I2C后死机