硬件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");
............以下程序先省略了
} |