Перейти к содержанию

STM32 для чайника


ART_ME

Рекомендуемые сообщения

Ковыряюсь с модулем FM-приёмника RDA5807M и внезапно от HAL_I2C_Master_Transmit стал получать HAL_BUSY.

Перед использование HAL_I2C_Master_Transmit проверяю состояние - HAL_I2C_STATE_READY как доктор прописал.

Подтяжка SDA и SCL к Vdd есть через резисторы 4.7 кОм.

У меня этот модуль внятно не заработал, но хоть I²C работало без проблем, а тут и I²C отпало :o Сам модуль тоже менял - те же яйца.

Куда копать? Замена I2C2 на I2C1 ничего не изменила. Часики DS3231 работают идеально на тех же выводах (подключал для проверки при отключенном RDA5807M).

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Это с самой первой команды такое. Обычно он занят когда ACK в ответ не получил. То есть послал одну комманду и I2C стал занят. Может тактовая высокая слишком для приёмника, попробуйте уменшить.

Koret, по АЦП. Вход ацп зашунтировать конденсаторм 10n думаю хватит, колличество отсчётов ацп на максимум.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

8 минут назад, GOR23 сказал:

Может тактовая высокая слишком для приёмника, попробуйте уменшить

Дык 100 кГц... Куда уж меньше-то... Сделал 10 кГц - без изменений.

Ссылка на комментарий
Поделиться на другие сайты

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

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

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

17 минут назад, GOR23 сказал:

Koret, по АЦП. Вход ацп зашунтировать конденсаторм 10n думаю хватит, колличество отсчётов ацп на максимум.

Не думал что так получится, даже проверять не хотел, но измерил другим мультиметром и с ним показания один в один.

Изменено пользователем Koret
Ссылка на комментарий
Поделиться на другие сайты

Вот человек проводил исследования АЦП, правда исходя из них получается что конденсатор ставить вредно, но это смотря кому какая точность нужна, интересный материал.

Ссылка на комментарий
Поделиться на другие сайты

48 минут назад, GOR23 сказал:

Ковыряйтесь по кишкам HAL

Какая-то странная фигня - HAL_I2C_Master_Transmit первым делом проверяет состояние интерфейса I²C и если оно не равно HAL_I2C_STATE_READY, то возвращает HAL_BUSY.

Но я же перед вызовом HAL_I2C_Master_Transmit только что проверял и состояние было HAL_I2C_STATE_READY. Как такое может быть?

Даже при отключенном модуле RDA5807M HAL_I2C_Master_Transmit возвращает HAL_BUSY

Изменено пользователем Darth_Vader
Ссылка на комментарий
Поделиться на другие сайты

@Koret для получения ответа на ваш вопрос нужна вся схема вашей дребедени. Иначе непонятно где искать вашу нелинейность. Это раз. И инитку АЦП, это два. В ином случае ответ будет - ХЕЗ

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

23 минуты назад, GOR23 сказал:

выложите Init I2C

Init исключительно из Куба.

static void MX_I2C2_Init(void)
{

  hi2c2.Instance = I2C2;
  hi2c2.Init.ClockSpeed = 100000;
  hi2c2.Init.DutyCycle = I2C_DUTYCYCLE_2;
  hi2c2.Init.OwnAddress1 = 0;
  hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  hi2c2.Init.OwnAddress2 = 0;
  hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  if (HAL_I2C_Init(&hi2c2) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

}

 

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, mail_robot сказал:

@Koret для получения ответа на ваш вопрос нужна вся схема вашей дребедени. Иначе непонятно где искать вашу нелинейность. Это раз. И инитку АЦП, это два. В ином случае ответ будет - ХЕЗ

@mail_robot как выше написал, причину нашёл, оказалось мультиметр "врал", подключил другой - всё нормально, очень точно.

Ребята, кто пользуется HAL-ом, подскажите, для чего в большинстве примерах в сети в бесконечный цикл while(1) вставляют HAL_ADC_Start(&hadc1);   и  HAL_ADC_Stop(&hadc1);? Ведь старт лучше делать один раз до бесконечного цикла. А так получается каждый такт мы зачем-то каждый раз делаем старт, а потом еще и стоп. И так во многих примерах, для чего так делают?

Ссылка на комментарий
Поделиться на другие сайты

Так это смотря в каком режиме, есть режим одиночного преобразования, есть циклический. Смотря, что нужно, какая задача. Если измерять всё время не нужно, то можно и стопнуть АЦП, что бы мк меньше тока ел.

Ссылка на комментарий
Поделиться на другие сайты

@GOR23 так ведь если он в цикле (while(1)) находится, он по умолчанию превращается в циклический, даже если выбран одиночный режим, какой смысл от такой конструкции?

Ссылка на комментарий
Поделиться на другие сайты

Продолжаю мучить RDA5807M.

Поменял STM32F103 на STM32VLDISCOVERY c STM32F100RBT6B - такой же результат, вызов HAL_I2C_Master_Transmit не возвращает HAL_OK.

Что ещё может быть? :( Подтяжка линий в Vdd через резисторы 4.7K есть. Провода не длинные. Аналогичным способом с аналогичными проводами работаю с DS1307 и DS3231 без проблем.

Модули дохлые?

Изменено пользователем Darth_Vader
Ссылка на комментарий
Поделиться на другие сайты

Коллеги хотел посоветоваться.

Хочу использовать одну микросхему EEPROM на два контроллера. Не для экономии денег, а ради удобства.

На STM выделю отдельный порт на переключение.

Получается что надо поставить 4 транзистора на переключение линий i2c 

Когда STM Решит что то записать или считать он установит на порту 1 линии переключатся на STM, он сделает все что нужно и отпустит линию и ей сможет пользоваться второй контроллер ESP12, который сможет по запросу выводить данные из EEPROM в веб, на дисплей или отправлять по MQTT.

Ситуация чтоб i2c одновременно нужна была обоим контроллерам исключена. Даже если она возникнет у STM будет приоритет т.к нога его))

Как думаете взлетит?

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, MihaNN52 сказал:

Как думаете взлетит?

Не надо транзисторов. Просто подключаете оба контроллера и память на одну и ту же шину I2C.

Выходы всех контроллеров являются Open-Drain, значит они не будут влиять друг на друга. Линии SDA и SCL подтянуты в питанию резисторами. Поэтому тот мастер, который в данный момент хочет опросить память,  он и будет дёргать линии I2C.

Ссылка на комментарий
Поделиться на другие сайты

Так не получится, может возникнуть конфликт, вот есть книженция по i2C

Семёнов Б. Шина I2C в радиотехнических конструкциях 2002.djvu

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

Ссылка на комментарий
Поделиться на другие сайты

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

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...