为什么将f103上的i2c的函数移植到f407上面后,会死在里面?
因为没有f407关于i2c的固件库,用printf将每个while循环试了一遍!结果每个while循环都会死在里面!不知道是怎么回事啊!
急求大神帮忙!!!
一下是出问题的程序:
/*******************************************************************************
* Function Name : I2C_WriteOneByte
* Description : 通过指定I2C接口写入一个字节数据
* Input : - I2Cx:I2C寄存器基址
* - I2C_Addr:从器件地址
* - addr:预写入字节地址
* - value:写入数据
* Output : None
* Return : 成功返回0
* Attention : None
*******************************************************************************/
uint8_t I2C_WriteOneByte(I2C_TypeDef *I2Cx,uint8_t I2C_Addr,uint8_t addr,uint8_t value)
{
/* 起始位 */
// I2C_AcknowledgePolling(I2Cx,I2C_Addr);
while(I2C_GetFlagStatus(I2Cx, I2C_FLAG_BUSY)); 这里死了
I2C_GenerateSTART(I2Cx, ENABLE); //
while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_MODE_SELECT)); 这里死了
/* 发送器件地址(写)*/
I2C_Send7bitAddress(I2Cx, I2C_Addr, I2C_Direction_Transmitter);
while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))这里死了
{
I2C_delay(100);
}
/*发送地址*/
I2C_SendData(I2Cx, addr);
while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED));这里死了
/* 写一个字节*/
I2C_SendData(I2Cx, value);
while(!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_TRANSMITTED)); 这里死了
/* 停止位*/
I2C_GenerateSTOP(I2Cx, ENABLE);
I2C_AcknowledgePolling(I2Cx,I2C_Addr);
I2C_delay(1000);
return 0;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
已经解决的,在初始化函数时,使i2c总线处于忙了!所以后面调用,一直死循环着
一周热门 更多>