Например TDA7294

Форум РадиоКот • Просмотр темы - STM32F103C8T6 и модуль DS1307 по аппаратному I2C
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 23, 2024 21:13:58

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: STM32F103C8T6 и модуль DS1307 по аппаратному I2C
СообщениеДобавлено: Ср окт 18, 2017 17:02:03 
Встал на лапы

Карма: 2
Рейтинг сообщений: 3
Зарегистрирован: Вс авг 23, 2015 08:14:05
Сообщений: 123
Рейтинг сообщения: 0
Доброго времени суток коты !

есть проект в 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 вижу обмен
при аппаратном вообще тишина

возможно я что-то забыл при инициализации ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F103C8T6 и модуль DS1307 по аппаратному I2C
СообщениеДобавлено: Ср окт 18, 2017 20:20:35 
Грызет канифоль
Аватар пользователя

Карма: 6
Рейтинг сообщений: 202
Зарегистрирован: Пт ноя 13, 2009 10:39:32
Сообщений: 272
Откуда: Москва
Рейтинг сообщения: 0
Еще надо AFIO включить:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

Вот тут рабочий код для STM103C8T6 и I2C датчика AP3216C:
http://cvs.aiq.ru/ap3216/i2c.html


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F103C8T6 и модуль DS1307 по аппаратному I2C
СообщениеДобавлено: Пт окт 20, 2017 08:57:47 
Встал на лапы

Карма: 2
Рейтинг сообщений: 3
Зарегистрирован: Вс авг 23, 2015 08:14:05
Сообщений: 123
Рейтинг сообщения: 0
попробовал, результат тот-же
ERROR в I2C_CheckEvent после I2C_GenerateSTART

попробовал полностью как в рабочем коде i2c1 на порту GPIO_Pin_6 | GPIO_Pin_7 тактирование 2мгц
в этом случае всегда стоит флаг занятости шины т.е. дальше
Код:
while(I2C_GetFlagStatus(I2Cx, I2C_FLAG_BUSY));
дело не идет

осциллографом смогу тыкнуться только вечером

может дело ещё и в модуле ?
схема
Изображение

в модуле должен стоять аккумулятор, я временно поставил батарейку, не думаю что это как-то может повлиять на i2c но вдруг ...

без батарейки кстати ситуация точно такая-же


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: STM32F103C8T6 и модуль DS1307 по аппаратному I2C
СообщениеДобавлено: Сб окт 21, 2017 16:22:58 
Родился

Зарегистрирован: Сб апр 27, 2013 20:15:08
Сообщений: 10
Рейтинг сообщения: 0
Вам стоит заглянуть сюда
http://www.st.com/content/ccc/resource/ ... 211391.pdf
что бы у вас отбило охоту пользовать в STM23F1XX аппаратный I2C. Я в свое время повозился с ним и работать заставил, но до какой либо неполадки. После любого сбоя оно поднималось только после сброса контроллера.
Вот еще тема
http://we.easyelectronics.ru/steel_ne/s ... otona.html
Так что советую оставить софтовый, с ним обычно все работает.


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: STM32F103C8T6 и модуль DS1307 по аппаратному I2C
СообщениеДобавлено: Вс окт 22, 2017 13:47:10 
Встал на лапы

Карма: 2
Рейтинг сообщений: 3
Зарегистрирован: Вс авг 23, 2015 08:14:05
Сообщений: 123
Рейтинг сообщения: 0
спасибо за информацию !

пробовал на выходных по разному, грешил на емкость монтажа, фазы луны, настроение домочадцев :) но так и не смог добиться стабильной работы аппаратного i2c, а софтовый при всех экспериментах работал на ура

потому видимо его, софтовый i2c, и оставлю


чтоб не открывать новую тему:
а с аппаратным SPI та-же засада ?


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: STM32F103C8T6 и модуль DS1307 по аппаратному I2C
СообщениеДобавлено: Вс окт 22, 2017 22:52:20 
Грызет канифоль
Аватар пользователя

Карма: 6
Рейтинг сообщений: 202
Зарегистрирован: Пт ноя 13, 2009 10:39:32
Сообщений: 272
Откуда: Москва
Рейтинг сообщения: 0
Аппаратный SPI работает отлично (например с дисплейчиком 2.2 дюйма)

Аппаратный I2C 400 кГц с датчиком AP3216C у меня работает без сбоев.
Вот тут проект для Кейл целиком:
http://cvs.aiq.ru/ap3216/ap3216.html


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F103C8T6 и модуль DS1307 по аппаратному I2C
СообщениеДобавлено: Пн окт 23, 2017 08:05:45 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 155
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0

Вы полностью читали, с камментами?
Так что советую оставить софтовый, с ним обычно все работает.


Такие "советы" надо множить на нуль...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F103C8T6 и модуль DS1307 по аппаратному I2C
СообщениеДобавлено: Пн окт 23, 2017 17:18:18 
Родился

Зарегистрирован: Сб апр 27, 2013 20:15:08
Сообщений: 10
Рейтинг сообщения: 0
Вы полностью читали, с камментами?

Естественно. В камментах обычно самое интересное. Однако там так никто и не привел того, как правильно делать и причин, почему не работает. А так то у нас все крутые.
dosikus писал(а):
Такие "советы" надо множить на нуль...

Да ради бога.

Fusion писал(а):
Аппаратный I2C 400 кГц с датчиком AP3216C у меня работает без сбоев.

У меня тоже работало без сбоев. Пока просто не отключишь физически провод и не подключишь обратно. Сколько там таких сюрпризов написано в errata. Вроде объем errata по i2c в STM32F1XX пока не превышает объем описания самого i2c в даташите. :))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F103C8T6 и модуль DS1307 по аппаратному I2C
СообщениеДобавлено: Чт окт 26, 2017 18:07:00 
Вымогатель припоя
Аватар пользователя

Карма: 7
Рейтинг сообщений: 58
Зарегистрирован: Чт янв 20, 2011 09:07:08
Сообщений: 665
Откуда: Пермь
Рейтинг сообщения: 0
STM32F103C8T6 c DS1307 по аппаратному I2С работает нормально.
Могу скинуть проект Cube+Keil с использованием HAL

_________________
Никакая контра не уйдёт от нас


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: an.ig.nik и гости: 26


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y