Question
How To get GPIO Input data in STM32F103
Hi, I want to make I2C By GPIO I/O Ports Using STM32F103RBT6 64 Pins.

run my source code result is above figure.
When I2C Input Read time, It Can’t read data how can I get input data?
Start_Setup_Time();
// b7 ~ b1 Addr + bo_wr + ack
Setup_Addr(0xA0);
// ucReg Addr
uint32_t regi_addr = 0x16;
Setup_Regi_Addr(regi_addr);
// Start
SDA_Up();
SCL_Up();
TIMER_us(50);
Start_Setup_Time();
// b7 ~ b1 Addr + bo_wr + ack
Setup_Addr(0xA1);
uint32_t temp = 0;
IO_Change(0);
TIMER_us(50);
for(uint32_t idx = 0; idx<8; idx++)
{
SCL_Down();
TIMER_us(t_low);
temp <<= 1;
TIMER_us(t_low);
SCL_Up();
TIMER_us(t_low);
TIMER_us(t_low);
if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_11))
{
temp |= 0x1;
}
SCL_Down();
TIMER_us(t_low);
}
TIMER_us(60);
is_End_NACK();
TIMER_us(150);
//is_ACK();
// Start
// b7 ~ b1 Addr + bo_r + ack
// Data
// Stop
End_Setup_Time();void IO_Change(uint8_t io)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(io)
{
GPIO_InitStruct.Pin = SDA_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
}
else
{
GPIO_InitStruct.Pin = SDA_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
}
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
