STM32
直播中

华强一条街

9年用户 767经验值
擅长:处理器/DSP
私信 关注
[问答]

STM8S I2C从机模式无ACK的原因?

公司一款产品的研发项目需要用到I2C通信,采用了STM8S103F3的片子。 一开始就遇到了I2C通信问题。采用的是中断法。 配置初始化后主机模式  在发送起始位后,能进入中断按照给定的顺序发送数据。 但在从机模式时对主机发送的地址无应答,进入不了中断。 地址设置和主机端的发送地址一致,应答位也设置了。用示波器和逻辑分析仪观察时序没有任何问题。大致的初始化程序如下。

I2C_CR1 = 0X00;
I2C_FREQR //与主机相同,忘记是啥了
I2C_CCRL //与主机相同,忘记是啥了
I2C_CCRH //与主机相同,忘记是啥了

I2C_TRISE = 0X02;//与主机相同
I2C_OARL = 0XA8;//与主机发送地址一致
I2C_OARH = 0X40;
I2C_CR2 |= 0X04;
I2C_ITR = 0X07;
I2C_CR1 = 0X01;

就这个配置,切换到主机模式访问24C02正常。 但从机模式时,对另一块做主机的板发送的地址无应答。 百思不得其解。试着将主机端的寻址地址从0到最大值逐一的试了一个遍也没效果。 现求助大神有没有解决的办法



回帖(2)

周淑枫

2024-5-6 16:31:20
是不是总线挂两个设备了?那么有可能导致无应答。
搞不懂你又要当主机又要当从机是什么个情况?可攻可受?
还有就是速率问题,速度慢点再试试?
举报

王帅

2024-5-6 17:00:12
在STM8S103F3的I2C从机模式下,无ACK的原因可能有以下几点:

1. 地址不匹配:确保从机的地址与主机发送的地址完全一致。检查地址寄存器的设置,确保它们与主机端的地址相匹配。

2. 时钟频率不一致:确保I2C从机和主机的时钟频率相同。检查I2C_FREQR、I2C_CCRL和I2C_CCRH寄存器的设置,确保它们与主机端的时钟频率相匹配。

3. 从机模式未正确配置:确保从机模式已正确配置。检查I2C_CR1寄存器的设置,确保已启用从机模式。

4. 中断配置问题:检查中断配置,确保已启用相应的I2C中断,并在中断服务程序中正确处理中断。

5. 硬件连接问题:检查I2C总线的硬件连接,确保SDA和SCL引脚正确连接,没有短路或断路。

6. 软件问题:检查初始化程序和中断服务程序,确保没有逻辑错误或遗漏。

7. 外部干扰:检查周围环境是否有电磁干扰,这可能会影响I2C通信。

8. 硬件故障:如果以上方法都无法解决问题,可能是STM8S103F3芯片本身存在硬件故障。

为了解决这个问题,你可以尝试以下步骤:

1. 仔细检查地址寄存器、时钟频率寄存器和中断配置。
2. 使用逻辑分析仪或示波器检查I2C总线上的信号,确保它们与预期一致。
3. 检查硬件连接,确保没有短路或断路。
4. 在中断服务程序中添加调试信息,以便更好地了解程序的执行情况。
5. 如果可能,尝试使用另一块STM8S103F3芯片进行测试。

希望这些建议能帮助你解决问题。如果问题仍然存在,请提供更多详细信息,以便进一步分析。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分