Jump to content

    

hd44780

Свой
  • Content Count

    1231
  • Joined

  • Last visited

Everything posted by hd44780


  1. Привет всем. Собрал небольшой модуль-радиодатчик температура-давление-влажность, который передаёт инфу по радиоканалу когда оттуда же прилетит нужная команда. Состав модуля: процессор - 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 не помогает, только реле .. Хотя реле ставить я пока не пробовал.
  2. STM32 USB HID Host

    Как я понимаю, сперва надо понять, как работать с хабами, чтобы проц: 1. Распознал хаб 2. Понял, что к хабу подключена клавиатура. Но лично я этим пока не занимался. Как по мне гораздо более актуальны радиомыши (они отличаются от проводных) и комплекты клавиатура+мышь (составной USB-девайс, ST-шная "фиговинка" их вообще не понимает).
  3. STM32 USB HID Host

    Нужна голая клава, разные радиогибриды с мышами и прочей хренью скорее всего работать не будут, т.к. там другие протоколы. А ST-шный драйвер очень примитивный, он такого не понимает. Например, комплект клава+мышь это уже не простой HID девайс, а композитное устройство из 2-х девайсов, драйвер должен такое понимать. Но он даже на простой радиомыше скорее всего споткнётся, не говоря уж про радиокомплект.
  4. STM32 USB HID Host

    Странно, я использовал старые, докубовые ST-шные либы, там в одном флаконе мышь+клава, у меня и те и те работали. Но ассортимента клав у меня нет, потому по стабильности я сказать не могу.
  5. STM32 USB HID Host

    угу, было дело ... пришедший мышиный пакет с данными отбрасывается как невалидный, если он старее периода, указанного в дескрипторах мыши. Драйвер HID класса просто уходит на следующий цикл опроса и не передаёт пакет на дальнейшую расшифровку.
  6. STM32 USB HID Host

    Делал на Ф105 USB мышу, всё пашет, ни в какие дебри с эндпоинтами и прочим не лез. Но есть один значительный нюанс. Функцию USB_HostProcess обязательно вызывать не реже того периода, который задан в дескрипторах мыши. Типовая величина этого периода - 10 мс. Проще говоря, Вы обязаны дёргать эту функцию не реже одного раза в 10 мс. Можно чаще. Иначе драйвер класса будет отбраковывать приходящие пакеты. Я пробовал убрать отбраковку - курсор мыши прыгает, как пьяный заяц по дороге. Возможно именно это Вы и имели в виду. USB_HostProcess можно вызывать и в таймере (проверял на ф439, должно и на ф105 работать), но лично мне этот способ не нравится. Почему - не знаю. Просто не нравится.
  7. Да, вышло не особо - насколько именно - сказать сложно. Земляные полигоны есть. H7 пока не делали, щупаю помаленьку на NUCLEO плате.
  8. На двухслойке вообще не выравнивал (авторазводка альтиум :D ) - хреново вышло... F439IIT6 + 16 бит SDRAM завёлся только на 66МГц, на 90 - сплошные глюки. 32 вообще нигде не разводил. Сейчас сижу на F439+16бит SDRAM 4 слоя, 90 МГц - идеально работает. Выравнивание длин - на 100% конечно, на стм32 с их идиотским разбрасыванием пинов FMC буквально по всем сторонам проца по-моему идеально и не сделаешь. Там ещё и LTDC дисп висит 24 битный. Конечно 24 бит дисп при 16 битной памяти - неразумно, но когда делали, ещё не понимали до конца.. Ну да ладно.... Работает в RGB565 режиме хорошо.
  9. Слышал, заказывали такое у китайцев. Но дорого. Сам не заказывал, пока 4-х слоек, LQFP и 16-бит SDRAM хватает.
  10. Так... Без перепрошивки, на том, что есть нащупал как искать устройства рядом и подключаться к какому-то из них. Данные туда-сюда бегают. Теперь проблема - как отключиться :))) Пока отключился обесточиванием одного из модулей, но это жесть :wacko:
  11. В интернете эти модули прошивают через ардуину - ардуины у меня нету, но есть USB-уарт переходник и мега328. Ну либо фирмовым дебаггером-прошивальщиком от TI за 50 вечнозелёных бумажек. Расковырял те посты, исходники ардуино-скетча, увидел, что эти ребята перешивают модуль не через уарт, а ногодрыгом через debug пины, ретранслируя туда байты, прилетевшие в ардуину по уарту с компа. Я правильно понял? Надо наваять этот горе-программатор чтобы перепрошить модуль? Пост - http://forum.arduino.cc/index.php?topic=393655.0 + https://github.com/bjoerke/HM-10-Firmware/w.../flash-firmware Скетч-перекодировщик - https://github.com/RedBearLab/CCLoader/tree...rduino/CCLoader Прога для компа - https://github.com/RedBearLab/CCLoader
  12. Привет всем. Обзавёлся я парой таких блютуз модулей - https://www.ebay.com/itm/AT-09-Bluetooth-4-...~cAAOSwiqJZebYF Доки в инете вроде вагон, скачал ДШ, подключил к компу для начала, начал подавать команды ... На многие команды модуль тупо не отвечает (понимать буквально - в ответ ни одного байта, работаю под Serial монитором), на другие ответ ERR. На команду AT+HELP он выдаёт: ******************************************************************* * Command Description *---------------------------------------------------------------- * AT Check if the command terminal work normally * AT+DEFAULT Restore factory default <0>* AT+BAUD Get/Set baud rate * AT+RESET Software reboot * AT+ROLE Get/Set current role. * AT+DISC Disconnect connection * AT+ADVEN Broadcast switch * AT+ADVI Broadcast interval * AT+NINTERVAL Connection interval * AT+POWE Get/Set RF transmit power * AT+NAME Get/firmware,firmware, device name * AT+LADDR Get local bluetooth address * AT+VERSION Get bluetooth, HCI and LMP version * AT+TYPE Binding and pairing settings * AT+PIN Get/Set pin code for pairing * AT+UUID Get/Set system SERVER_UUID . * AT+CHAR Get/Set system CHAR_UUID . * AT+INQ Search from device * AT+RSLV Read the scan list MAC address * AT+CONN Connected scan list device * AT+CONA Connection specified MAC * AT+BAND Binding from device * AT+CLRBAND Cancel binding ******************CN Number of scanned list devices * AT+SLEEP Sleep mode * AT+HELP List all the commands * --------------------------------------------------------------- ********************************************************* Посмотрел версию AT+VERSION - ответ "MLT-BT05-V4.4". Думаю - старьё, на сайте уже 6.06 лежит - http://www.jnhuamao.cn/download_rom_en.asp?id= Начал обновлять, ни на команду "AT assistant", ни на "AT+SBLUP" в ответ ни одного байта :( Соответственно прошивальщик не пашет, ругается - не могу подключиться. Может кто-то объяснить, как этой хреновиной работать?? Насколько я понимаю, чтобы к чему-то одключиться я должен провести поиск доступных устройств. Но как? Может я чего недогоняю? На модуле есть нога EN - может на неё что-то подавать надо? В инетах про неё вообще ничего не пишут. Спасибо. PS Команда AT+NAME пашет, а толку с неё? :biggrin:
  13. У RGB дисплеев, с которыми работает ST-шный LTDC никакого буфера нет вообще. Т.е., чтобы там вообще что-то отображалось, неважно, статичное оно или динамичное, нужно, чтобы на дисплей кто-то постоянно гнал картинку. Именно это и делает блок LTDC. Он постоянно читает данные из фреймбуфера и гонит их на дисплей. Сам фреймбуфер вы можете располагать где угодно - или во флэше проца (для какой-то статичной картинки), либо во внешних SRAM/SDRAM. Адрес фреймбуфера задаётся при конфирурировании самого LTDC (точнее его слоя). После этого туда лезть не надо, он сам читает указанную память и гонит её содержимое на дисплей. А рисование на таком дисплее - просто запись данных, описывающих пиксели в фреймбуфер. Ну плюс разные фенечки, которые даёт DMA2D. Но для полноценной работы DMA2D и 2-х слоёв необходима 32-битная память, лично я с такой не работал, тонкостей не подскажу. Тут на форуме где-то была огроменная тема про DMA2D, поищите. MIPI-DPI - не знаю, не слышал.
  14. Кэш пока вообще не включал, DMA там вроде нет. А вот SET_BIT(PWR->CR3, PWR_CR3_USB33DEN); (то самый HAL_PWREx_EnableUSBVoltageDetector) действительно помог, спасибо. Шарманка сразу ожила, спасибо вам большое. Я добавил его туда же, где пины USB и прерывание USB инитятся. Пойду USB прикручивать, там в кубе чего-то нахимичено ... Надо на привычный diskio.c переделать, на 439 у меня там 3 накопителя без проблем крутилось (2 флэшки + SDIO).
  15. Привет всем. Есть плата NUCLEO-H743ZI. Пытаюсь запустить на ней USB (хост для флэшки, MSD в терминах ST) на данном чипе. За неимением никаких других примеров в качестве основы взял ST-шный куб. USB - FS, тот, который разведен на плате (пины проца PA11, PA12). Добавил куда надо управление питанием разъёма, светодиодик на плате засветился (также как и лампочка на флэшке). Дальше глухо - проц видит, что что-то подключено (срабатывает юзерский хук), но флэшка не проходит энумерацию (бесконечно крутится в тщетных попытках получения дескрипторов). Пробовал 2 примера - сгенеренный кубом и готовый FatFs_USBDisk_Standalone для платы STM32H743I-EVAL (естественно подчистив его от особенностей этой платы - ключ питания там управляется не напрямую пинами проца, а через I2C расширитель портов). Результат примерно одинаковый - висяк на дескрипторах. Проверял 2 флэшки, которые с полпинка запускаются на F439 и F105 процах. Но там работает старое USB ядро времён SPL. Для H7 этого драйвера просто нет. Кубовый драйвер на F1/F4 я никогда не пробовал (не было нужды, и без него всё в шоколаде), равно как и не пробовал запускать старый Fx драйвер на H7. Даже не знаю, совместимы ли они. Стек везде ставил 10 кил. FreeRTOS (и прочих аналогов) нет. После нескольких дней ковыряний выяснилось следующее: 1. Стек, по крайней мере, на первый взгляд ни при чём - детали ниже (п. 3). 2. Плата питалась от ST-Link-овского USB питания, которое у меня хз почему 4-4.1в. После прохождения всех ключей на плате на USB разъёме получалось порядка 3.7-3.8в, иногда и меньше. Маловато как-то. Подал на плату внешние 5в от компового БП, на разъёме увидел нормальные 5 вольт. Слава Богу, одной проблемой меньше. 3. Самая загадочная на текущий момент вещь. Выяснилось, что прервание USB НИКОГДА не возникает. Никогда от слова "вообще". Доказано отладчиком и точкой останова в обработчике. Точнее сказать - после шаманского бубна и фиг знает с какого перезапуска оно начинает возникать, и тогда всё чудесным образом начинает работать. Под "начинает работать" я подразумеваю то, что юзерский callback драйвера с именем USBH_UserProcess вызывается сколько положено раз, в том числе с аргументом равным 2, что, согласно кубового талмуда означает готовность флэшки к работе. FatFs пока не подключал. Пока дрова не начнут работать стабильно, пихать туда FAT имхо бессмысленно. Прерывания там включаются так (выдрано с куба и тамошних примеров): Код: /* Peripheral clock enable */ __HAL_RCC_USB_OTG_FS_CLK_ENABLE(); /* Peripheral interrupt init */ // HAL_NVIC_SetPriority(OTG_FS_IRQn, 0, 0); // генерит куб HAL_NVIC_SetPriority(OTG_FS_IRQn, 6, 0); // Так написано в примере к плате STM32H743I_EVAL // HAL_NVIC_SetPriority(OTG_FS_IRQn, 1, 3); // это используется в F439 HAL_NVIC_EnableIRQ(OTG_FS_IRQn); Пробовал разные приоритеты - ничего оно не даёт :( Битика в самом USB, отвечающего за вкл/выкл прерываний (таковые есть и в SPI, и во всяких там уартах), я вообще не нашёл ... Может плохо искал? Могу выложить проект под атоллик, хотя там 99% ровно то, что генерит куб. Оставшийся 1% это включение светодиодиков платы нуклео, чтобы без отладчика можно было хоть как-то понять, что там творится... Кто-то пользовался USB хостом на H7, может я чего-то где-то не доделываю? Или может где-то есть какие-то другие примеры? В своё время на Ф4 мне сильно помог пример немца http://mikrocontroller.bplaced.net/wordpress/ (по факту он оказался немного переработанным ST-шным примером, но всё равно), но у него нет ничего для H7. Заранее благодарен.
  16. Сам не делал, т.к. на моей плате NUCLEO-H743ZI SDRAM нет, но Вы можете глянуть, какие настройки производятся кубом. Я понимаю нелюбовь многих к этой софтине, но деваться некуда, других примеров просто нет. Кроме того, в кубе есть примеры для платы STM32H743I_EVAL, на которой есть SDRAM чип. Можно там что-то подсмотреть. Я тоже сижу, раскуриваю разные примеры по кубу и тамошним платам...
  17. STM32H743 SPI

    Всё-таки это косяки в либах атоллика (я про sprintf). Та же самая пустышка в STM32 SystemWorkbench завелась с полпинка. Правда пришлось разобраться, как включить в нём поддержку float output в spintf. По умолчанию она отключена, %f полностью игнорится.
  18. STM32H743 SPI

    Небольшой оффтоп в теме про SPI: Покопался ещё на предмет флэша. Пустышка вида char sBuffer[256]; int main(void) { float temp = 656.89F; int i = 78; sprintf ( sBuffer, "%d; %.02fv", i, temp ); while ( 1 ) { } // while } // main При использовании newlib standard даёт размер кода: Print size information text data bss dec hex filename 17644 1660 10772 30076 757c STM32H7_ILI9163.elf Ошибка записи во флэш есть. Если эту же программу перекомпилить с newlib nano, то получаю: Print size information text data bss dec hex filename 5180 112 10720 16012 3e8c STM32H7_ILI9163.elf Ошибки флэша нет, всё гуд. Но в sBuffer я вижу: "78; v", т.е. видно, что sprintf не поддерживает плавающую точку, что меня лично меня категорически не устраивает. Чтобы отсечь вопрос о "битости" некоторых участков флэша проца приведу следующий пример: Прошивка размером Print size information text data bss dec hex filename 18480 36 10876 29392 72d0 STM32H7_ILI9163.elf без sprintf шьётся, отлаживается и работает совершенно нормально. Стек в обоих случаях одинаковый: /* 0x2800 == 10K */ _Min_Stack_Size = 0x2800; Какие соображения, товарищи? И чем можно заменить sprintf? Я нашёл только это - https://github.com/torvalds/linux/blob/master/lib/vsprintf.c , но пока не пытался затащить её в проц. Увеличение размера прошивки меня совершенно не волнует. Кто-то делал что-либо подобное? Штуки типа itoa, ltoa я знаю, они нормально работают, но результирующие строки надо дополнительно склеивать, но самое главное, чего-то родственного для плавающей точки я не знаю. Писать самому? Что касается периферии - запустил UART - отправка опросом, приём прерыванием в буфер. Перешёл к USB.
  19. STM32H743 SPI

    Датчик успешно переехал на SPI3 :) .
  20. STM32H743 SPI

    Вот так нормально работает опросом: // Чтение/запись байта SPI uint8_t spi1_sendByte ( uint8_t data_out ) { uint8_t data_in = 0; // старт передаем неопределенное кол-во байт // Disable SPI SPI_PORT->CR1 &= ~SPI_CR1_SPE; SPI_PORT->CR2 = 0; // Enable SPI SPI_PORT->CR1 |= SPI_CR1_SPE; SPI_PORT->CR1 |= SPI_CR1_CSTART; while (!(SPI_PORT->SR & SPI_SR_TXP)); *((__IO uint8_t *)&SPI_PORT->TXDR) = data_out; // Ждать завершения приёма while(!(SPI_PORT->SR & SPI_SR_RXP)); data_in = *(volatile uint8_t *) &(SPI_PORT->RXDR); return data_in; } // SPI_sendByte Попробую ещё перенести это на другой SPI.
  21. STM32H743 SPI

    Осциллом 3.3 платы посмотрел - чисто. Может иголки какие, хз, моим хилым UT-81B их фиг найдёшь.
  22. STM32H743 SPI

    Покупал не я, а знакомый. Говорил, вроде где-то в США... Кстати, мы с ним тоже подумали на хреновое питание +3.3в. Я ж подавал на неё 5 вольт, т.е. конечный 3в стабилизатор всё равно работал родной. Стабилизатор завтра осциллом потыкаю, отпишусь. Готовых внешних 3.3в у меня щас нету, спаять внешний стаб смогу только на выходных, т.к. у меня это хобби, в рабочее время я паять не шибко могу. Атоллик после ругани на флэш всё-таки заходит в отладку, но ещё во время блужданий по стартовому коду попадает в DefaultHandler. Т.е. до активации PLL и HSE там дело не доходит. Там действительно что-то странное. Добавил в ту же тестовую прошивку с SPI мигание светодиодиком, залил ST-Link utility - замигал нормально.
  23. STM32H743 SPI

    MasterElectric, удачи. Мои эксприменты, похоже, откладываются - см. вложение. При простом подключении всё прекрасно читает. Ошибка только после Erase. Atollic True Studio тож ругается "flash error". Хз, чё с ней стряслось. Пытался +5в со своего БП подавать, другой программатор подключал - без разницы. Прошивается и работает не знаю с какого раза. 2 недели всего проработала :crying: Если оно всё же будет работать, я тоже буду продолжать изучение всего вышесказанного.
  24. STM32H743 SPI

    Спасибо. Попробую, отпишусь. Родственные сомнения.. Рано ещё этот проц в какие-то серъёзные вещи ставить имхо ... Так, чисто поизучать, поиграться. F1/F4, помню, с полпинка заводилось всё. С SDRAM и LTDC на F439, помню, года 4 назад промучился, но во всём оказалась виновата хреновая разводка платы. Сделали другую - все мгновенно заработало как надо. Тут на форуме даже тема моя есть про "неработающий" LTDC :biggrin: У меня есть свободная QSPI флэшка, думаю, следующими блоками на изучение будут QSPI и уарты :rolleyes: Ну и USB c сетевухой, раз уж они есть на NUCLEO. Не пропадать же добру :biggrin: С сетью и lwIP на МК я вообще никогда не работал. Ну всякие там ESP8266 не в счёт конечно.
  25. STM32H743 SPI

    Задал вроде: SPI_PORT->CR2 = 1; // Передать 1 байт После Enable SPI.