RDA5807制作收音机,stm32 i2c读出寄存器数据出错。
时间:10-02
整理:3721RD
点击:
/*******************************************************************
oˉêy?? £oRead_FM_Data
?èê? £oFM?£?é??′??÷á?D??á3?
ê?è? £oêy×é??????
·μ?? £o?T
μ÷ó? £o?ú2?μ÷ó?
*******************************************************************/
static void Read_FM_Data(uint8_t *Readbuf)
{
uint8_t i; //?-?·??êy
while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY)==SET);//2é?|
I2C_GenerateSTART(I2C1,ENABLE); //I2C?eê?D?o?
/*è·è?EV5ê??t·¢éú*/
while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)==SUCCESS);
I2C_Send7bitAddress(I2C1,FM_addr,I2C_Direction_Receiver);
/*è·è?EV6ê??t·¢éú*/
while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)==SUCCESS);
for(i=0;i<=3;i++)
{
*(Readbuf+i)=I2C_ReceiveData(I2C1);
/*è·è?EV7ê??t·¢éú*/
while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED)==SUCCESS);
}
I2C_GenerateSTOP(I2C1,ENABLE); //I2C???1D?o?
}
/********************************************************************/
乱码请忽视。读出的寄存器数据全部为0x21,RDA芯片的地址是0x20。不知道是i2c配置问题,还是rda的寄存器操作不对。求看看问题
oˉêy?? £oRead_FM_Data
?èê? £oFM?£?é??′??÷á?D??á3?
ê?è? £oêy×é??????
·μ?? £o?T
μ÷ó? £o?ú2?μ÷ó?
*******************************************************************/
static void Read_FM_Data(uint8_t *Readbuf)
{
uint8_t i; //?-?·??êy
while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY)==SET);//2é?|
I2C_GenerateSTART(I2C1,ENABLE); //I2C?eê?D?o?
/*è·è?EV5ê??t·¢éú*/
while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)==SUCCESS);
I2C_Send7bitAddress(I2C1,FM_addr,I2C_Direction_Receiver);
/*è·è?EV6ê??t·¢éú*/
while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)==SUCCESS);
for(i=0;i<=3;i++)
{
*(Readbuf+i)=I2C_ReceiveData(I2C1);
/*è·è?EV7ê??t·¢éú*/
while(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED)==SUCCESS);
}
I2C_GenerateSTOP(I2C1,ENABLE); //I2C???1D?o?
}
/********************************************************************/
乱码请忽视。读出的寄存器数据全部为0x21,RDA芯片的地址是0x20。不知道是i2c配置问题,还是rda的寄存器操作不对。求看看问题
STM32的IIC外设驱动有bug的,或者说与一般我们用到IIC有些差异,所以建议不熟悉的直接用IO口模拟IIC协议,那样应该更快哦~~~