I2C SM32F3

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
rahmaevao
Встал на лапы
Сообщения: 126
Зарегистрирован: Пн окт 13, 2014 09:31:45

I2C SM32F3

Сообщение rahmaevao »

Странности у меня.
Есть дискавери f3.
Настроил i2c, и посылаю только СТАРТ бит.
Он уходит, правда какой то длинный и с заполнением SCL.
Что ты такое? :roll:
Изображение

Код: Выделить всё

 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");
    	    	}
    }
}
Добавлено after 4 minutes 11 seconds:
Как будто старт бит длинный слишком. Но что за второй ноль на шине? Это не отклик ведомого, так как не пропадает он даже после отключения слейва от мастера.
Реклама
Ответить

Вернуться в «ARM»