MarkoSiroki
Member level 2
Hello, I have following STM32F103RC on custom board (I2C pins reside on PB8, PB9 GPIOB pins) init function:
Now, when I try to write data to slave device via I2C with following function(s):
I get stuck in
line, which means (I've checked) EVENT 5 from documentation is not fired (SB bit is not set) and the code steps into endless while loop. Why?
Code:
GPIO_InitTypeDef ueNCP5623_PinMappingsHandle;
I2C_InitTypeDef ueNCP5623_CommHandle;
int ueSystemInit(void)
{
SystemInit();
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,
ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,
ueNCP5623_PinMappingsHandle.GPIO_Pin=UE_NCP5623_SCL_Pin|UE_NCP5623_SDA_Pin;
ueNCP5623_PinMappingsHandle.GPIO_Mode=GPIO_Mode_AF_OD;
ueNCP5623_PinMappingsHandle.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(UE_NCP5623_GPIO_Port,
&ueNCP5623_PinMappingsHandle);
GPIO_PinRemapConfig(GPIO_Remap_I2C1,
ENABLE);
ueNCP5623_CommHandle.I2C_Ack=I2C_Ack_Disable;
ueNCP5623_CommHandle.I2C_AcknowledgedAddress=I2C_AcknowledgedAddress_7bit;
ueNCP5623_CommHandle.I2C_ClockSpeed=400000;
ueNCP5623_CommHandle.I2C_DutyCycle=I2C_DutyCycle_2;
ueNCP5623_CommHandle.I2C_Mode=I2C_Mode_I2C;
ueNCP5623_CommHandle.I2C_OwnAddress1=0xff;
I2C_Init(UE_NCP5623_COMM_PORT,
&ueNCP5623_CommHandle);
I2C_Cmd(UE_NCP5623_COMM_PORT,
ENABLE);
}
Code:
void ueI2CWrite(uint8_t ueAddress,
uint8_t ueData)
{
ueI2CStart();
ueI2CAddressDirection(ueAddress<<1,
I2C_Direction_Transmitter);
ueI2CTransmit(ueData);
ueI2CStop();
} // ueI2CWrite
Code:
void ueI2CStart(void)
{
while(I2C_GetFlagStatus(UE_NCP5623_COMM_PORT,
I2C_FLAG_BUSY));
I2C_GenerateSTART(UE_NCP5623_COMM_PORT,
ENABLE);
while(!I2C_CheckEvent(UE_NCP5623_COMM_PORT,
I2C_EVENT_MASTER_MODE_SELECT));
} // ueI2CStart()
I get stuck in
Code:
while(!I2C_CheckEvent(UE_NCP5623_COMM_PORT, I2C_EVENT_MASTER_MODE_SELECT));