hd44780 0 Posted November 29, 2018 · Report post Привет всем. Собрал небольшой модуль-радиодатчик температура-давление-влажность, который передаёт инфу по радиоканалу когда оттуда же прилетит нужная команда. Состав модуля: процессор - STM32F030F4P6, UART радиомодуль HC-12 (выбран специально, великолепно пробивает жб перекрытия в отличие от Bluetooth HM-10, который испытание жб стенами не прошёл ) и датчик 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 вольт ? Здесь ужо и Ф103 не помогает, только реле .. Хотя реле ставить я пока не пробовал. Quote Ответить с цитированием Share this post Link to post Share on other sites
Gorby 0 Posted November 29, 2018 · Report post 32 minutes ago, hd44780 said: И ещё одна мистика. У модуля есть нога SET, при подаче 0 на которую он перестаёт работать с радиоэфиром, переходит в режим AT-команд. Выяснилось, что если замкнуть ногу в землю проводком, ответы приходят, но если подключить эту ногу к пину проца и подать туда 0 - ответа никакого нет... И что делать - ставить туда механическое реле с герконами на 12 вольт ? Мистики нет. Пины у процессора слабоваты (это если они еще правильно включены!). Повышенная радиомощность (стены пробивает) на расстоянии в несколько сантиметров при неудачном стечении обстоятельств запросто может наводить на вход управления потенциал, достаточный для дребезжания. Поэтому прикручиваем мощность до минимума и смотрим, повлияло ли, думаем, делаем выводы. Ставим на управляющий вход конденсатор на землю 1000 пикофарад на всякий случай. И эту дорожку исследуем на предмет близости к антенне. Убеждаемся осциллографом, ЧТО там нам есть на самом деле, а не то что Вы думаете там есть. По результатам - либо сами справитесь, либо - опять сюда. А реле не нужно. Его не усыпить... Разве что поляризованное... Quote Ответить с цитированием Share this post Link to post Share on other sites
scifi 0 Posted November 29, 2018 · Report post 23 minutes ago, Gorby said: Повышенная радиомощность (стены пробивает) на расстоянии в несколько сантиметров при неудачном стечении обстоятельств запросто может наводить на вход управления потенциал, достаточный для дребезжания. Не удивлюсь, если в результате особо талантливой разводки токи с радиочастотой будут забегать внутрь процессора, и у него просто снесёт крышу. Quote Ответить с цитированием Share this post Link to post Share on other sites
Pengozoid 0 Posted November 29, 2018 (edited) · Report post От радиомодуля к процессору все шины (питание, SPI и прочее) лучше зафильтровать и прикрыть процессор и прочее уязвимое "шапочкой из фольги". От 100 мВт вполне может и SPI прилечь, и что-нибудь еще. От 500 мВт в диапазоне около 400 МГц еще как ложится если никаких мер не предпринимать. Проверенное решение для шин данных и управления (SPI, энейблы всякие, управление ключами и пр.) - эллиптические фильтры 3 порядка, на шинах питания по 2 емкости 330 пФ и 10 нФ, ферритовые бусины и Low-ESL емкость (Murata NFM). Ну и все экранировано. От 5-ваттного широкополосного передатчика могут уже сбоить всякие китайские сделанные ногами DC-DC конверторы, драйверы двигателей и пр. Edited November 29, 2018 by Pengozoid Quote Ответить с цитированием Share this post Link to post Share on other sites
hd44780 0 Posted November 29, 2018 · Report post ага, спасибо. Попробую, отпишусь. Кондёры добавлю. Там кое-что быстро не переделать. Пока могу сказать, что модуль спаян на макетке проволочками. Ф103 был подключен к радиомодулю 15 см проводами. Теми же проводами подключал его и к Ф030 - пофигу. Quote Ответить с цитированием Share this post Link to post Share on other sites
Arlleex 0 Posted November 29, 2018 · Report post Я, все-таки, поставлю на лажовый код для F030. Так как наводят на мысли данные слова: Цитата ...так он всё равно оказался в DefaultHandler из (внимание !!!) прерывания USART2, которого в проце STM32F030F4P6 (корпус TSSOP-20) физически нет!!... Откуда, спрашивается, Вы взяли тогда, что от USART2? Если ни среда, ни startup-файл не должны вообще заикаться о USART2? Полагаю, в проекте настроен не тот контроллер, либо startup-файл не для этого контроллера, либо что-то еще подобного плана. Quote Ответить с цитированием Share this post Link to post Share on other sites
x893 0 Posted November 29, 2018 · Report post Это наказание за грехи ! Quote Ответить с цитированием Share this post Link to post Share on other sites
hd44780 0 Posted November 29, 2018 · Report post 3 hours ago, Arlleex said: Я, все-таки, поставлю на лажовый код для F030. Так как наводят на мысли данные слова: Откуда, спрашивается, Вы взяли тогда, что от USART2? Если ни среда, ни startup-файл не должны вообще заикаться о USART2? Полагаю, в проекте настроен не тот контроллер, либо startup-файл не для этого контроллера, либо что-то еще подобного плана. Взял я это из отладчика, проц задан правильно, стартап файл родом из кокоса. Могу даже полный проект выложить, там ничего секретного нет совершенно. Quote Ответить с цитированием Share this post Link to post Share on other sites
Arlleex 0 Posted November 29, 2018 (edited) · Report post Если проблема при определенном закреплении программных условий (не менять код) выглядит одинаково - 99% вероятность, что баг именно в коде. А в другой среде собрать - соберется? В том же Keil. С его startup. Попробуйте. Проект тоже прикрепите, посмотрим Edited November 29, 2018 by Arlleex Quote Ответить с цитированием Share this post Link to post Share on other sites
Arlleex 0 Posted November 29, 2018 · Report post 6 часов назад, hd44780 сказал: И ещё одна мистика. У модуля есть нога SET, при подаче 0 на которую он перестаёт работать с радиоэфиром, переходит в режим AT-команд. Выяснилось, что если замкнуть ногу в землю проводком, ответы приходят, но если подключить эту ногу к пину проца и подать туда 0 - ответа никакого нет... Осциллограф что говорит? Тот же вопрос в режиме передачи данных, интересуют диаграммы на ножках NRST, VCC процессора. Есть ли провалы при передаче - посмотрите, поизучайте. Quote Ответить с цитированием Share this post Link to post Share on other sites
hd44780 0 Posted November 29, 2018 · Report post осциллом пока не смотрел. Да, как посмотрю, отпишусь. Спасибо 2 hours ago, x893 said: Это наказание за грехи ! Ага. Наказание за передачу данных о погоде по радиоканалу Quote Ответить с цитированием Share this post Link to post Share on other sites
hd44780 0 Posted November 30, 2018 · Report post Прикладываю проект для кокоса. С кейлом что-то у меня не складывается - показывает только процы ARM. Никаких STM там вообще нет. Пробую IAR. STM32F030-HC-12.zip Quote Ответить с цитированием Share this post Link to post Share on other sites
mcheb 0 Posted November 30, 2018 · Report post Это правильно? void bme280_init ( void ) { uint8_t bme280_id; RCC->AHBENR = RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN; RCC->APB2ENR = RCC_APB2ENR_SPI1EN; Quote Ответить с цитированием Share this post Link to post Share on other sites
hd44780 0 Posted November 30, 2018 · Report post угу, следствие разного рода отладок. Перенёс RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN; RCC->APB2ENR |= RCC_APB2ENR_SPI1EN | RCC_APB2ENR_SYSCFGEN; в main, ничего не поменялось. К вопросу о Keil и IAR. С выбором типа проца для проекта разобрался, но они оба почему-то генерят совершенно пустые проекты, в которых нет ни одного файла - ни стартового кода, ни main.c - ничего. main-то у меня свой есть, а вот где взять стартап - пока не понял. Quote Ответить с цитированием Share this post Link to post Share on other sites
Wasserati 0 Posted November 30, 2018 · Report post Startup файл соответствующего мк можно из репозитория CubeMX взять. Там они в отдельной папочке лежат. Советую обновить все файлы от ST. А то какие-то уже очень старые версии файлов в приложенном проекте. Quote Ответить с цитированием Share this post Link to post Share on other sites