STM32
直播中

刘满贵

7年用户 1387经验值
私信 关注
[问答]

STM8S105K4硬件IIC卡死在发送起始信号怎么解决?

硬件IIC调试SHT30的
一开始卡在等待总线空闲,后查贴,①设置了option byte AFR6 ②在初始化里加了复位I2C->CR2 |= 0x80;等待总线空闲问题解决。
紧接着发送起始信号,通过串口打印信息发现 等待发送完成卡住了。没有发送启动信号,难道是硬件bug?还是有什么没设置到位的地方?
关键位置已用红字标识。求解救!
void I2C_Init(void)
{
   CLK->PCKENR1|=0x01;//使能IIC时钟
  I2C->CR1=0;   
  I2C->FREQR=16;//设置时钟为16m
  I2C->CCRL=0x50;//100khz的IIC速度
  I2C->CCRH=0x00;
  I2C->TRISER=0x11;//250ns上升时间
  /* Enable I2C */
  I2C->CR1 |= I2C_CR1_PE;  
  I2C->CR2 |= 0x80;//复位一下 用于去除busy
}
void Driver_I2CSend(u8 Address,u8 *DataBuff,u16 DataLen)
{         
  volatile u8 temp;//防止被优化而产生警告
  u16 time;  

  while(I2C->SR3 0x02)//等待总线空闲        
  printf("n1-------------!n");//调试一开始卡在这,在初始化里加了   I2C->CR2 |= 0x80;这个位置就过了。  


  I2C->CR2 |= 0x01;//发送起始信号

  while((I2C->SR1 0x01)==0)//等待起始信号发送完毕,现在就卡在这了,卡了两天了求大神解救!
  printf("n2-----hhhh---------n");  

  ............以下程序先省略了
}

回帖(2)

刘佳

2024-4-17 16:10:50
外设库里有例程,跑一下例程吧。另外I2C注意连接的设备
举报

李艳

2024-4-17 16:42:59
出现这种情况可能有以下几种原因:

1. 硬件连接问题:检查硬件连接是否正确,包括SDA和SCL引脚是否接触良好,是否存在短路或者断路等问题。

2. 软件配置问题:确保正确配置I2C相关的寄存器。根据你提供的代码,初始化部分已经设置了时钟频率和速度,但可能还有其他相关寄存器没有配置正确。

3. 中断问题:如果使用了中断方式进行I2C通信,可能存在中断优先级配置不正确的问题。请确保中断优先级设置正确,避免可能的冲突。

4. 软件逻辑错误:检查代码逻辑是否正确,例如检查是否在I2C传输完成之后及时清除标志位。

5. 硬件问题:如果以上所有方法都检查确定没有问题,那可能是硬件问题。可能存在I2C总线波特率设置错误、时钟源选择错误、引脚驱动能力不足等问题。需要检查硬件设计是否符合规范,并尽可能排除硬件问题。

综上所述,建议逐步排查以上可能原因,先检查硬件连接和软件配置,然后逐步进行调试和优化。
举报

更多回帖

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