nj786c 发表于 2019-10-4 18:33:34

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");

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

butterflyspring 发表于 2019-10-8 15:05:43

外设库里有例程,跑一下例程吧。另外I2C注意连接的设备:)
页: [1]
查看完整版本: STM8S105K4硬件IIC卡死在发送起始信号,怎么破?