This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

我用gd32f130单片机读取bq76930的eeprom没有方波是因为什么?



这个是我的电路图文件:

我的程序:

#define I2C_ADDR 0x11
#define I2C2_SLAVE_ADDRESS7 0x08
/* Private variables ---------------------------------------------------------*/
uint8_t I2C2_Buf_Write[5];
uint8_t I2C2_Buf_Read[2];
uint8_t addr[2];


/* Private function prototypes -----------------------------------------------*/
void RCC_Configuration(void);
void I2C_GPIO_Configuration(void);
void I2C_Configuration(void);

/* Private function ---------------------------------------------------------*/
/**
* @brief Main program
* @param None
* @retval None
*/
void RCC_Configuration(void)
{
// Set_SysClockTo56();
/* Enable HSI CLK = 8M*/
RCC_HSI_Enable(ENABLE);//
/* GPIOA, GPIOB, GPIOC and GPIOF clocks enable */
RCC_AHBPeriphClock_Enable( RCC_AHBPERIPH_GPIOA |
RCC_AHBPERIPH_GPIOB |
RCC_AHBPERIPH_GPIOC |
RCC_AHBPERIPH_GPIOF, ENABLE);
}
/**
* @brief Configure the LED GPIO ports.
* @param None
* @retval None
*/


/**
* @brief Cofigure the GPIO Ports.
* @param None
* @retval None
*/
void I2C_GPIO_Configuration(void)
{
GPIO_InitPara GPIO_InitStructure;

/* I2C1 and I2C2 GPIO ports */
GPIO_InitStructure.GPIO_Pin = GPIO_PIN_6 | GPIO_PIN_7;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
GPIO_InitStructure.GPIO_OType = GPIO_OTYPE_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PUPD_NOPULL;
GPIO_Init(GPIOF, &GPIO_InitStructure);

}
/**
* @brief Cofigure the I2C1
* @param None
* @retval None
*/
void I2C_Configuration(void)
{
/* I2C2 periphral configuration */
I2C_InitPara I2C_InitStructure;
I2C_InitStructure.I2C_Protocol = I2C_PROTOCOL_I2C;
I2C_InitStructure.I2C_DutyCycle = I2C_DUTYCYCLE_2;
I2C_InitStructure.I2C_BitRate = 100000;
I2C_InitStructure.I2C_AddressingMode = I2C_ADDRESSING_MODE_7BIT;
I2C_InitStructure.I2C_DeviceAddress = I2C2_SLAVE_ADDRESS7;

}

int main(void)
{
int i;
//uint32_t sr2_1;
RCC_Configuration();
RCC_APB1PeriphReset_Enable(RCC_APB1PERIPH_I2C2RST, ENABLE);
RCC_APB1PeriphReset_Enable(RCC_APB1PERIPH_I2C2RST, DISABLE);
I2C_GPIO_Configuration();
I2C_Configuration();

/* Enable I2C2 */
I2C_Enable(I2C2,ENABLE);

I2C_Acknowledge_Enable(I2C2,ENABLE);

/* The software must wait until I2C Bus is idle */
while(I2C_GetBitState(I2C2,I2C_FLAG_I2CBSY));

/* Send a start condition to I2C bus */
I2C_StartOnBus_Enable(I2C2,ENABLE);

/* The software must wait until SBSEND bit is set */
while(!I2C_StateDetect(I2C2,I2C_PROGRAMMINGMODE_MASTER_SBSEND));

/* Send slave address to I2C bus */
I2C_AddressingDevice_7bit(I2C2,I2C_ADDR,I2C_DIRECTION_TRANSMITTER);

//for(;;)
//{
//I2C_SendData(I2C2,I2C2_Buf_Write[0]);
//}

/* The software must wait until ADDSEND bit is set */
while(!I2C_StateDetect(I2C2,I2C_PROGRAMMINGMODE_MASTER_TRANSMITTER_ADDSEND));

/* Wait until the transmit data buffer is empty */
while(!I2C_GetBitState(I2C2,I2C_FLAG_TBE));

for(i=0;i<5;i++)
{
/* Data transmission */
I2C_SendData(I2C2,I2C2_Buf_Write[i]);
while(!I2C_StateDetect(I2C2, I2C_PROGRAMMINGMODE_MASTER_BYTE_TRANSMITTED));
}

/* Send a stop condition to I2C bus */
I2C_StopOnBus_Enable(I2C2,ENABLE);
while(I2C2->CTLR1&0x0200);


/*read*/
I2C_Enable(I2C2,ENABLE);

I2C_Acknowledge_Enable(I2C2,ENABLE);

while(I2C_GetBitState(I2C2, I2C_FLAG_I2CBSY));


I2C_StartOnBus_Enable(I2C2, ENABLE);


while(!I2C_StateDetect(I2C2, I2C_PROGRAMMINGMODE_MASTER_SBSEND));


I2C_AddressingDevice_7bit(I2C2,I2C_ADDR,I2C_DIRECTION_TRANSMITTER);


while(!I2C_StateDetect(I2C2, I2C_PROGRAMMINGMODE_MASTER_RECEIVER_ADDSEND));

I2C_StartOnBus_Enable(I2C2, ENABLE);

while(!I2C_StateDetect(I2C2, I2C_PROGRAMMINGMODE_MASTER_SBSEND));

for(i=0;i<2;i++)
{
I2C_SendData(I2C2,addr[i]);
while(!I2C_StateDetect(I2C2, I2C_PROGRAMMINGMODE_MASTER_BYTE_TRANSMITTED));
}

I2C_AddressingDevice_7bit(I2C2, I2C_ADDR, I2C_DIRECTION_RECEIVER);

while(!I2C_StateDetect(I2C2, I2C_PROGRAMMINGMODE_MASTER_RECEIVER_ADDSEND));

for(i=0;i<3;i++)
{
if(i==2)
{
/* Wait until the second last data byte is received into the shift register */
while(!I2C_GetBitState(I2C2,I2C_FLAG_BTC));
/* Send a NACK for the last data byte */
I2C_Acknowledge_Enable(I2C2, DISABLE);
}
/* Wait until the RBNE bit is set */
while(!I2C_StateDetect(I2C2, I2C_PROGRAMMINGMODE_MASTER_BYTE_RECEIVED));
/* Read a data from I2C_DTR */
I2C2_Buf_Read[i] = I2C_ReceiveData(I2C2);
}

I2C_StopOnBus_Enable(I2C2,ENABLE);
while(I2C2->CTLR1&0x0200);
I2C_Acknowledge_Enable(I2C2, ENABLE);

/* Infinite loop */
while(1);
}