Доброго времени суток коты !
есть проект в CooCox CoIDE Version: 1.7.8
есть STM32F103C8T6
использую библиотеку из CooCox stm32f10x_i2c.h
столкнулся с проблемой, модуль DS1307 не отвечает (или не правильно отвечает) на команду START
инициализирую I2C так
Код:
GPIO_InitTypeDef gpio;
I2C_InitTypeDef i2c;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
/* Configure I2C_EE pins: SCL and SDA */
gpio.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
gpio.GPIO_Speed = GPIO_Speed_50MHz;
gpio.GPIO_Mode = GPIO_Mode_AF_OD;
GPIO_Init(GPIOB, &gpio);
/* I2C configuration */
i2c.I2C_Mode = I2C_Mode_I2C;
i2c.I2C_DutyCycle = I2C_DutyCycle_2;
i2c.I2C_OwnAddress1 = 0;
i2c.I2C_Ack = I2C_Ack_Enable;
i2c.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
i2c.I2C_ClockSpeed = 100000;
/* Apply I2C configuration after enabling it */
I2C_Init(I2C1, &i2c);
/* I2C Peripheral Enable */
I2C_Cmd(I2C1, ENABLE);
далее функция установки состояния СТАРТ и отсылки адреса (найдено на просторах интернета)
Код:
// На всякий случай ждем, пока шина освободится
while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
// Генерируем старт - тут все понятно )
I2C_GenerateSTART(I2C1, ENABLE);
// Ждем пока взлетит нужный флаг
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
// Посылаем адрес подчиненному
I2C_Send7bitAddress(I2C1, slaveAddress, transmissionDirection);
while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
// А теперь у нас два варианта развития событий - в зависимости от выбранного направления обмена данными
if(transmissionDirection == I2C_Direction_Transmitter)
{
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
}
if(transmissionDirection == I2C_Direction_Receiver)
{
while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
}
так вот, после формирования СТАРТ I2C_GenerateSTART(I2C1, ENABLE);
функция I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT) возвращает ERROR
при этом модуль прекрасно работает на софтовом I2C настроенном на эти-же ножки порта (GPIO_Pin_8 | GPIO_Pin_9)
подскажите, куда копать ?
Добавлено after 4 hours 6 minutes 11 seconds:хм ...
сейчас ткнулся осциллографом на шину i2c и при программном i2c вижу обмен
при аппаратном вообще тишина
возможно я что-то забыл при инициализации ?