I2C SM32F3
Добавлено: Пн ноя 20, 2017 15:10:57
Странности у меня.
Есть дискавери f3.
Настроил i2c, и посылаю только СТАРТ бит.
Он уходит, правда какой то длинный и с заполнением SCL.
Что ты такое?
Добавлено after 4 minutes 11 seconds:
Как будто старт бит длинный слишком. Но что за второй ноль на шине? Это не отклик ведомого, так как не пропадает он даже после отключения слейва от мастера.
Есть дискавери f3.
Настроил i2c, и посылаю только СТАРТ бит.
Он уходит, правда какой то длинный и с заполнением SCL.
Что ты такое?
Код: Выделить всё
int main(void)
{
GPIO_InitTypeDef gpio;
I2C_InitTypeDef i2c;
// Включаем тактирование нужных модулей
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
// А вот и настройка I2C
i2c.I2C_Timing = 0x00902025;
i2c.I2C_Mode = I2C_Mode_I2C;
i2c.I2C_Mode = I2C_Mode_I2C;
i2c.I2C_OwnAddress1 = ADDR;
i2c.I2C_Ack = I2C_Ack_Enable;
i2c.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_Init(I2C1, &i2c);
// I2C использует две ноги микроконтроллера, их тоже нужно настроить
gpio.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
gpio.GPIO_Mode = GPIO_Mode_AF;
gpio.GPIO_Speed = GPIO_Speed_50MHz;
gpio.GPIO_OType = GPIO_OType_OD;
gpio.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, &gpio);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_4);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_4);
// Ну и включаем, собственно, модуль I2C1
I2C_Cmd(I2C1, ENABLE);
while(1)
{
//Старт
I2C_GenerateSTART (I2C1, ENABLE);
for(i=0;i<1000;i++)
{
asm("nop");
}
}
}Как будто старт бит длинный слишком. Но что за второй ноль на шине? Это не отклик ведомого, так как не пропадает он даже после отключения слейва от мастера.