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

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

Привет всем.

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

Состав модуля: процессор - 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 не помогает, только реле .. Хотя реле ставить я пока не пробовал.

Поделиться сообщением


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

32 minutes ago, hd44780 said:

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

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

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

 

Поделиться сообщением


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

23 minutes ago, Gorby said:

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

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

Поделиться сообщением


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

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

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

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

Изменено пользователем Pengozoid

Поделиться сообщением


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

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

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

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

 

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

Поделиться сообщением


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

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

Цитата

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

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

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

Поделиться сообщением


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

3 hours ago, Arlleex said:

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

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

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

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

error.png

 

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

Поделиться сообщением


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

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

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

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

Изменено пользователем Arlleex

Поделиться сообщением


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

6 часов назад, hd44780 сказал:

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

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

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

Поделиться сообщением


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

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

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

2 hours ago, x893 said:

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

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

Поделиться сообщением


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

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

Пробую IAR.

STM32F030-HC-12.zip

Поделиться сообщением


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

Это правильно?

void bme280_init ( void )
{
	uint8_t bme280_id;

	RCC->AHBENR = RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN;
	RCC->APB2ENR = RCC_APB2ENR_SPI1EN;

 

Поделиться сообщением


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

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

Перенёс

RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN;

RCC->APB2ENR |= RCC_APB2ENR_SPI1EN | RCC_APB2ENR_SYSCFGEN;

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

 

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

Поделиться сообщением


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

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

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

Поделиться сообщением


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

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

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

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

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

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

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

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