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

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 пользователей онлайн

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

  • Сообщения

    • Monica Хорошие вопрос для начинающего! Вот несколько основных радиокомпонентов, которые я бы рекомендовал новичку: Резисторы - это базовый пассивный компонент, который используется для регулировки тока и напряжения в цепи. Выберите набор резисторов с разными номиналами сопротивления. Конденсаторы - еще один основной пассивный компонент, используемый для фильтрации, развязки и других применений. Рассмотрите электролитические, керамические и пленочные конденсаторы. Светодиоды - это простые и полезные активные компоненты, которые можно использовать для индикации и простых схем. Транзисторы - эти активные компоненты являются основой многих электронных схем. Я бы посоветовал начать с биполярных транзисторов. Микроконтроллеры - миниатюрные программируемые компьютеры, которые дают начинающим большие возможности для творчества и экспериментов. Также очень полезно иметь базовые инструменты, такие как мультиметр, паяльник и припой. Начните с этих основных компонентов и постепенно расширяйте свою коллекцию по мере роста знаний и интересов. Желаю успехов в ваших электронных проектах!
    • А, вы такую штуку пытались в спять обернуть ))  
    • Как озвучили выше - мультиметр (это как глаза и уши) , паяльник или паяльная станция - ее конечно для серьёзного применения, осциллограф. А все там резисторы, конденсаторы, диоды, транзисторы, микросхемы - всё это по мере необходимости, а то будут лежать" мертвым грузом" - много лет без применения. 
    • Обычный кольцевой ...этот ещё с хорошим распределением ! У меня есть ещё один который реально способен ЭДС вырабатывать ... (типа с одного полюса) ;-)   Перекошенный насмерть! Когда их ставят в динамики то провалы не имеют большого значения т.к. в центре такой конструкции расположен керн из магнитомягкой стали , что и выравнивает общую характеристику МП . А вообще какая разница что крутить ?  ;-)  Диск куда безопаснее , а надёжность сьёма - индукционной катухой ...тогда и щйётки сами по себе не нужны ... Вообщем с этим "униполяром " - сплошная лапша с макаронами на ушах студентов ....;-) Вот вырезка из учебника : Как мотор - устройство работает за счёт взаимодействия магнитным полей (на рисунке , конечно - никак не указано) Как генератор - таки нет !  Но утверждается , что таки-ДА ...опятьже никаких доказательств не приводится ... ;-) Ну и ляд с ним! Мне хватило одного разрыва ! ;-) На втором снимке - амплитуда от работы такого шума около 0,3вольт,  сигнал положительный , однако к практике такие уровни и нах никому не нужны ....а так в теории конечно -ДА !  Но есть одна загигулина - применялось ПОЛНОЕ покрытие полюса магнита диском. В таком эксе полно всяких интересных проявлений индукции и одно самое главное - это НЕ униполяр по Фарадею , а работа ИНДУКЦИИ при неполном покрытии диска магнитным полем.... Другая песня !  Однако - НЕ НУНО крутить магнит!! Вон у людей обычный диск из камня разрывало!  Я когдато накие диски пропитывал эпоксидкой и они работали вплоть по почти полного износа камня (конечно и бытовка была обычная -1200 об/мин)
    • Для этого хоть бы знать что за датчик. А так из Wireshark выгрузить в CSV а потом Exel уже.
    • А че за магнит то, с торсионными синфазно-поперечными полями?  Дураков много, а стиралок выпущено еще больше, на всех хватит.
×
×
  • Создать...