Jump to content

    
Sign in to follow this  
hd44780

STM32F030F4 + радиомодуль HC12 - творится нечто странное

Recommended Posts

Привет всем.

Собрал небольшой модуль-радиодатчик температура-давление-влажность, который передаёт инфу по радиоканалу когда оттуда же прилетит нужная команда.

Состав модуля: процессор - STM32F030F4P6, UART радиомодуль HC-12 (выбран специально, великолепно пробивает жб перекрытия в отличие от Bluetooth HM-10, который испытание жб стенами не прошёл :biggrin:) и датчик BME280, работающий по SPI.

 

Питание этого блока сейчас от 9в кроны через LF33. На тему выбранного стабилизатора просьба не подшучивать, выбор сделан вполне осознанно - когда к модулю никто не обращается, он тихо-мирно спит с целью снижения энергопотребления.

Из трёх проверенных мною стабилизаторов - AMS1117-3.3, LF33 и LM317 (настроенный на 3.3в) у LF33 оказался наименьший ток собственного потребления - 0.535 mA против ~2.5 mA у двух других.

На время отладки спячку всю убрал, всё крутится на всю катушку. Питание от USB-шных 5в через AMS1117-3.3 стабилизатора ST-Link-а.

 

Алгоритм работы проца - ловит из радиоканала по уарту команды и отвечает на них. Сейчас команды всего 2 - "Получить строку About" - гонит фиксированную ASCIIZ строку и команда "Получить данные" - передаёт 7 байт данных  с датчика.

В качестве опрашивающего узла сейчас связка "терминал на компе - FT232BL - HC-12".

Когда начал эксперименты - началась некая мистика.

модуль успешно отвечает на 1..4 команды и замолкает навсегда. Отладчик показал, что проц попадает в DefaultHandler из каких-то случайных мест типа delay_ms (примитивная задержка на базе систика) и пр. Но самое интересное то, что в DefaultHandler он попадает из прерывания собаки WWDG_IRQHandler. Само собой собака мне не нужна, я её и не включал.

Думаю, ладно, фиг с ней, добавил в программу этот WWDG_IRQHandler, так он всё равно оказался в DefaultHandler из (внимание !!!) прерывания USART2, которого в проце STM32F030F4P6 (корпус TSSOP-20) физически нет!! Ну писать прерывание USARt2 я уже не стал ...

 

Проведенные эксперименты:

1. Если убрать HC-12 и подключить вместо него простой USB-переходник - всё пашет прекрасно.

2. Если собрать такую же схему на STM32F103C8T6 - работает прекрасно.

3. Прошивки F030 и F103 писал на кокосе, пробовал прошивку F030 на Atollic 9.1 (или как там его) - та же мистика с непонятными прерываниями.

4. Думал, что HC-12 садит питание при радиообмене - повесил электролит 100 мкФ на питание - не помогло. Ф103 пашет и без оного. Керамика 100 нФ стоит везде.

5. Думал, что из-за float где-то спонтанно не хватает стека. Выкидывал датчик полностью - ставил отсылку просто 7 фиксированных байт - не помогло.

 

Кто-то может сказать что-либо что там происходит? Я, в принципе, не гордый, могу и ф103 там оставить, но просто он крупноват для этой задачи - прошивка 6 кил (флэш Ф030 - 16 кил, F103 - 128 кил), при том, что я там вовсю использую плавающую точку при пересчёте сырых данных датчика в человеко-понятные единицы.

Хотя ещё один уарт на модуле не помешал бы ...

 

Спасибо.

PS.

Несколько слов о HC-12. Это маленькая платка с трансивером SI4463+STM8. STM8 по сути переходник SPI<->UART, потому можно сказать, что STM32 общается именно с STM8.

И ещё одна мистика. У модуля есть нога SET, при подаче 0 на которую он перестаёт работать с радиоэфиром, переходит в режим AT-команд. Выяснилось, что если замкнуть ногу в землю проводком, ответы приходят, но если подключить эту ногу к пину проца и подать туда 0 - ответа никакого нет... И что делать - ставить туда механическое реле с герконами на 12 вольт :crazy:?

Здесь ужо и Ф103 не помогает, только реле .. Хотя реле ставить я пока не пробовал.

Share this post


Link to post
Share on other sites
32 minutes ago, hd44780 said:

И ещё одна мистика. У модуля есть нога SET, при подаче 0 на которую он перестаёт работать с радиоэфиром, переходит в режим AT-команд. Выяснилось, что если замкнуть ногу в землю проводком, ответы приходят, но если подключить эту ногу к пину проца и подать туда 0 - ответа никакого нет... И что делать - ставить туда механическое реле с герконами на 12 вольт :crazy:?

Мистики нет. Пины у процессора слабоваты (это если они еще правильно включены!). Повышенная радиомощность (стены пробивает) на расстоянии в несколько сантиметров при неудачном стечении обстоятельств запросто может наводить на вход управления потенциал, достаточный для дребезжания.

Поэтому прикручиваем мощность до минимума и смотрим, повлияло ли, думаем, делаем выводы. Ставим на управляющий вход конденсатор на землю 1000 пикофарад на всякий случай. И эту дорожку исследуем на предмет близости к антенне. Убеждаемся осциллографом, ЧТО там нам есть на самом деле, а не то что Вы думаете там есть. По результатам - либо сами справитесь, либо - опять сюда. А реле не нужно. Его не усыпить... Разве что поляризованное...

 

Share this post


Link to post
Share on other sites
23 minutes ago, Gorby said:

Повышенная радиомощность (стены пробивает) на расстоянии в несколько сантиметров при неудачном стечении обстоятельств запросто может наводить на вход управления потенциал, достаточный для дребезжания.

Не удивлюсь, если в результате особо талантливой разводки токи с радиочастотой будут забегать внутрь процессора, и у него просто снесёт крышу.

Share this post


Link to post
Share on other sites

От радиомодуля к процессору все шины (питание, SPI и прочее) лучше зафильтровать и прикрыть процессор и прочее уязвимое "шапочкой из фольги". От 100 мВт вполне может и SPI прилечь, и что-нибудь еще. От 500 мВт в диапазоне около 400 МГц еще как ложится если никаких мер не предпринимать.

Проверенное решение для шин данных и управления (SPI, энейблы всякие, управление ключами и пр.) - эллиптические фильтры 3 порядка, на шинах питания по 2 емкости 330 пФ и 10 нФ, ферритовые бусины и Low-ESL емкость (Murata NFM). Ну и все экранировано.

От 5-ваттного широкополосного передатчика могут уже сбоить всякие китайские сделанные ногами DC-DC конверторы, драйверы двигателей и пр.

Edited by Pengozoid

Share this post


Link to post
Share on other sites

ага, спасибо.

Попробую, отпишусь. Кондёры добавлю. Там кое-что быстро не переделать.

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

 

Ф103 был подключен к радиомодулю 15 см проводами. Теми же проводами подключал его и к Ф030 - пофигу.

Share this post


Link to post
Share on other sites

Я, все-таки, поставлю на лажовый код для F030. Так как наводят на мысли данные слова:

Цитата

...так он всё равно оказался в DefaultHandler из (внимание !!!) прерывания USART2, которого в проце STM32F030F4P6 (корпус TSSOP-20) физически нет!!...

Откуда, спрашивается, Вы взяли тогда, что от USART2? Если ни среда, ни startup-файл не должны вообще заикаться о USART2?

Полагаю, в проекте настроен не тот контроллер, либо startup-файл не для этого контроллера, либо что-то еще подобного плана.

Share this post


Link to post
Share on other sites
3 hours ago, Arlleex said:

Я, все-таки, поставлю на лажовый код для F030. Так как наводят на мысли данные слова:

Откуда, спрашивается, Вы взяли тогда, что от USART2? Если ни среда, ни startup-файл не должны вообще заикаться о USART2?

Полагаю, в проекте настроен не тот контроллер, либо startup-файл не для этого контроллера, либо что-то еще подобного плана.

Взял я это из отладчика, проц задан правильно, стартап файл родом из кокоса.

error.png

 

Могу даже полный проект выложить, там ничего секретного нет совершенно.

Share this post


Link to post
Share on other sites

Если проблема при определенном закреплении программных условий (не менять код) выглядит одинаково - 99% вероятность, что баг именно в коде.

А в другой среде собрать - соберется? В том же Keil. С его startup. Попробуйте.

Проект тоже прикрепите, посмотрим:smile:

Edited by Arlleex

Share this post


Link to post
Share on other sites
6 часов назад, hd44780 сказал:

И ещё одна мистика. У модуля есть нога SET, при подаче 0 на которую он перестаёт работать с радиоэфиром, переходит в режим AT-команд. Выяснилось, что если замкнуть ногу в землю проводком, ответы приходят, но если подключить эту ногу к пину проца и подать туда 0 - ответа никакого нет...

Осциллограф что говорит?

Тот же вопрос в режиме передачи данных, интересуют диаграммы на ножках NRST, VCC процессора. Есть ли провалы при передаче - посмотрите, поизучайте.

Share this post


Link to post
Share on other sites

осциллом пока не смотрел.

Да, как посмотрю, отпишусь. Спасибо

2 hours ago, x893 said:

Это наказание за грехи !

Ага. Наказание за передачу данных о погоде по радиоканалу :biggrin::crazy:

Share this post


Link to post
Share on other sites

Прикладываю проект для кокоса. С кейлом что-то у меня не складывается - показывает только процы ARM. Никаких STM там вообще нет.

Пробую IAR.

STM32F030-HC-12.zip

Share this post


Link to post
Share on other sites

угу, следствие разного рода отладок.

Перенёс

RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN;

RCC->APB2ENR |= RCC_APB2ENR_SPI1EN | RCC_APB2ENR_SYSCFGEN;

в main, ничего не поменялось.

 

К вопросу о Keil и IAR. С выбором типа проца для проекта разобрался, но они оба почему-то генерят совершенно пустые проекты, в которых нет ни одного файла - ни стартового кода, ни main.c - ничего. main-то у меня свой есть, а вот где взять стартап - пока не понял.

Share this post


Link to post
Share on other sites

Startup файл соответствующего мк можно из репозитория CubeMX взять. Там они в отдельной папочке лежат.

Советую обновить все файлы от ST. А то какие-то уже очень старые версии файлов в приложенном проекте.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this