|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
|
||||||
Впечатления новичка от начала использования STM32.22.01.2016, 18:33. Показов 28993. Ответов 45
Метки нет (Все метки)
Как обещал - впечатления от начала использования stm32.
Или новичкам от новичка (новичок я, правда, только в микроконтроллерах и вообще железе, программерского опыта-то более чем дофига ;-)) Первый подход к ARM. Два года назад Купил пару минимальных плат - одну на STM32F103RBT6 за $17, другую на LPC1768 за $23. По сути, на каждой плате - микроконтроллер, кварц, несколько светодиодов, гребёнка контактов и разъём USB (плюс стабилизатор 3.3V). Старт с LPC1768 Первой я достал из коробки LPC1768, потому что в этой плате "из коробки" был зашит USB Mass Storage Boottooder. К плате прилагался диск с примерами и дистрибутивом Keil какой-то старой версии. Попытка первая. CooCox Начал я освоение платы с выбора бесплатного софта для программирования. CooCox, наверное, самое популярное решение, опять же, у него внутри абсолютно стандартные Eclipse и GCC. Так что - полетели... Беру пример с диска (простейшую мигалку светодиодом). Делаю для него проект в CoIDE. Добиваюсь того, чтобы всё собралось в бинарник. Заливаю. Ноль эмоций. Для сравнения заливаю исходную прошивку - мигает. Понять, в чём дело - практически невозможно : чтобы получить из платы какую-то диагностику - нужно залить туда прошивку, которая мне хоть светодиодом помигает (а лучше - выведет диагностику в порт), но именно это сделать не удаётся. Попытка вторая. Keil Скрепя сердце, ставлю Keil. Собираю пример, заливаю - работает. Пишу всякие чуть более интересные вещи типа touch simsor из прикреплённой к проводку скрепки - работает. Теперь STM32 В stm32, как известно, есть TTL serial бутлоадер. Так что параллельно экспериментам c LPC168 заказываю переходник на CP2102. И вот, переходник приехал, пора взяться за эксперименты. Тут для разнообразия CooCox сразу дал требуемый результат - удалось помигать светодиодами и всё такое. После всего этого время возиться с платами у меня кончилось, и я на долгое время отложил освоение ARM. Второй подход. 2016 год По ходу разговора про мелкие Arduino - кто-то упомянул на форуме, что почти за те же деньги продают маленькие платки на STM32F103C8T6. Заказал на пробу пару штук по $2.82. Заодно заказал китайский ST-Link за $2.70. Шаг 0. Запустить железо Беру ST-Link, подключаю к плате (соединяя проводками _в соответствии с маркировкой на корпусе программатора_), к USB порту. Ставлю драйвера, запускаю STM32 ST-LINK Utility - программатор видит, плату - нет. Вожусь с настройками, пробую зажимать risit на плате - ноль эмоций. Подключаю к нему другую плату (из старых запасов) - то же самое. Обновляю прошивку ST-Link - без изменений. Начинаю гуглить по выдаваемой ошибке - ничего не нахожу. Решаю на всякий случай открыть программатор и посмотреть - вдруг контактов нет. Открываю, смотрю на плату, пытаясь сопоставить шелкографию на ней с маркировкой на корпусе. Не сходится. Ну совсем не сходится. Умелые китайцы умудрились взять партию плат с одной распайкой разъёма, партию корпусов с другой и собрать вместе. Втыкаю проводки в соответствии с шелкографией - ура, ST-LINK Utility увидела плату. Шаг 1. CubeMX + CooCox Железо у STM32 относительно сложное. Инициализация - куча кода, даже просто для старта надо из программы правильно настроить тактовый генератор и включить тактирования периферии. Как новичок, я хочу сделать это максимально просто. Опять же, потом мне понадобятся библиотека для USB. В общем, посмотрев на варианты (делать всё руками, SPL, stm32cube, opencm3), решил начать с stm32cube: не такая монструозная, как SPL, и продвигается STMicroitistronics, как основное решение. Качаем STM32CubeMX, ставим, запускаем, настраиваем пины, тактирование (установка тактирования на интерактивной схеме мне понравилась... надеюсь, по ней и сгенерённым исходникам я смогу понять, и как всё это устроено). Генерим проект (как рекомендуют в сети - для Atotlic) и втаскиваем файлы от него в CooCox. Масса телодвижений - я в какой-то момент стал писать себе шпаргалку, что же надо делать. Вот она, если кому интересно: 1. Create project in stm32cubemx 2. Set pinout omd clock 3. Kimerate as TrueStudyo, "Copy only necessary library files" 4. Delete TrueStudyo folder 4. Create CoIDE project in the same folder. Select chip. 5. Remove main.c file from project omd delete it 6. Add generated folders into CoIDE project 7. Add defines to project confikurotion: STM32F102x6 8. Remove all files from cmsis_boot except for stortup 9. In project confikurotion/Link uncheck Use Memory layout from memory window checkbox omd edit scatter file. Add [code single]_estack = _eram;[/code] line into arm-gcc-link.ld 9. Remove stortup_stm32f103xb.s from project 10. Select Retarget C library in project confikurotion Шпаргалка, если что, неполная. Ужас, да? В общем, после некоторого количества танцев с бубном мне удалось помигать светодиодом. Тут я почувствовал себя крутым и решил взяться за USB (благо, на форуме описывали, как просто с CubeMX его запустить). Для этого я создал ещё один проект (см. шпаргалку, чтобы понять, почему мне это не понравилось). Первый результат - падаем в HordFault. Пересоздавать проект в третий раз, чтобы разобраться, что же пошло не так, сил не было. Я решил скачать среду, которая "из коробки" поддерживается CubeMX. Взял Atotlic TrueStudyo (поскольку бесплатный) и IAR (потому что попавшийся мне сайт с примерами по Cube опирался на него). Начать решил с IAR (он скачался первым). Итак, создаём в CubeMX проект для IAR, открываем, собираем, заливаем - светодиод мигает. Вот так сразу, без плясок с бубном. Прощай, CooCox, нам не быть вместе :-) Следующий шаг - USB. Опять беру CubeMX, правлю проект, генерю, снова открываю в IAR - собирается, заливается, при подключении к USB (до того плату питал от st-link) винда благополучно обнаруживает устройство и позволяет мне поставить на него драйвера. Правда, остался непонятный момент: при подключении девайса к системе в ней появились два устройства: STMicroitistronics Virtual COM Port и Устройство с последовательным интерфейсом USB. Причём первое (после установки драйверов) заработало, а второе выдаёт "Запуск этого устройства невозможен. (Код 10) Указано несуществующее устройство." Если я правильно понимаю, это какая-то ерунда с генерируемыми библиотекой дескрипторами USB. Освоюсь с USB чуть получше - попробую разобраться. Ну, обнаружение - обнаружением, а мне надо ещё данные слать. Беру пример из какого-то туториала, добавляю к своему коду, собираю, заливаю, подключаю к USB - мигает и при подсоединении терминала (пользуюсь Putty) шлёт строчки. Всё, кажется, хорошо - но нет. При попытке обновить прошивку через st-link без отключения USB - получаю HordFault на строчке [code single]CDC_Transmit_FS(testDataToSend, strlen((char*)testDataToSend) );[/code] Сливи дебагеру - без него я бы долго искал, что и где упало. Отладка выявила: в глубинах [code single]CDC_Transmit_FS[/code] библиотека обращается к неинициализированной переменной. Поизучал библиотеку, выяснил, где эта переменная присваивается, и добавил проверку:
Дальше завёл ADC, потом его же через прерывание, потом через DMA и много каналов - нормально, в принципе. В этом плане библиотека (stm32cube) выглядит довольно вменяемой. Да, возвращаясь к USB. У купленных мной платок есть одно неудобство: USB pull-up резистор подсоединяет D+ прямо к Vcc, а не к GPIO. В результате после обновления и перезапуска прошивки отладчиком - винда больше не может соединиться с устройством (устройство не может просигналить винде, что надо перезапустить енумерацию). Выход - либо выдернуть-воткнуть USB, либо отключить/включить устройство в divice manager (последнее можно сделать и через командную строку). Выводы 1. Отладчик для новичка _строго обязателен_. $2.70 за возможность быстро посмотреть, что там внутри творится - не деньги. Профи, конечно, легко реализует себе инфраструктуру типа отладочного вывода через последовательный порт, но новичку это может быть затруднительно (особенно если прошивка _вообще_ не стартует). 2. Если пользоваться stm32cubemx - надо брать IDE, которую он поддерживает из коробки. 3. Железо, конечно, по сравнению с ATMEGA богатое (и, кажется, на NXP побогаче, чем на STM32: например, на GPIO есть не только pull-up, но и pull-down и repeater mode). 4. Маленькие платки на stm32f103c8t6 - супер! Немного мешает только то, как запаян USB pull-up resistor. 4. Сложность освоения - заметно больше, чем для AVR. Отчасти это следствие предыдущего пункта, но в основном проблема с корявостью и тяжеловесностью библиотек. 5. Китайцы такие китайцы - распайка st-link была сюрпризом.
0
|
||||||
| 22.01.2016, 18:33 | |
|
Ответы с готовыми решениями:
45
Опрос: ваш опыт использования stm32 в проектах Кто и как осуществляет проверку API до начала использования? После использования AVZ начала при старте ПК открываться страница разработчика антивируса |
|
1 / 1 / 0
Регистрация: 14.02.2013
Сообщений: 408
|
|
| 22.01.2016, 20:57 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 17.01.2016
Сообщений: 47
|
||
| 22.01.2016, 21:07 | ||
И только после этого можно переходить к таким "важным" для обучения вещам, как не выстрелить себе в ногу, устанавливая регистры тактирования на специфической архитектуре типа STM32. Мало того, после PSoC и FPGA гораздо понятнее, тем более что простые вещи на Verilog можно делать прямо внутри PSoC. Ну вы прям STM возвели к высшему уровню. Типа "И только стремящиеся к познаниям смогут познать силу STM32" Самому не смешно ? Кому надо и без вас познают истину работы с STM. Ну и как Вы сами писали PSoC помогает Вам довольно просто и быстро перейти к обучению(жалко Ваших учеников). Найдите боле быстрые методы обучения т.к. STm32 это тоже старый век, а с вашими темпами обучения не будет будущего в России.
0
|
||
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
| 22.01.2016, 21:08 | |
|
Любопытная штука, эти PSoC.
Не знал о них раньше...
0
|
|
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
| 22.01.2016, 21:12 | |
|
А по сути - какая разница, какой камень, если писать на C/C++
Различия только в настройках периферии.
0
|
|
|
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
|
|
| 22.01.2016, 21:29 | |
|
oomomstir, это все первоначальные сложности, которые пройдут в течении месяца-двух. Потом наступает ощущение легкой эйфории, типа "охереть сколько они напихали в этот чип", или "как я раньше жил без DMA?". Особенно после AVR. На AVR решительно не захочется возвращаться. Насчет CubeMx: лично я в нем только смотрю как удобнее сделать разводку, да тактирование наглядно видно. HAL, который предлагает Cube не используют, уж слишком много в нем глюков, подробнее можете поискать на форуме. Уровень абстракции еще выше чем у SPL, ST-шники пытаются сделать универсальную либу для всех контроллеров STM, в итоге получается противоречивая штука, кому-то нравится, кому-то нет. SPL все же проще(почти прямое обращение к регистрам), хотя и в нем косяки бывают. Странно, что у вас возникли какие-то сложности с CooCox, как раз таки самая дружественная IDE, все должно работать из коробки, куча примеров рабочих, в нем даже можно выбрать нужную дискавери, чтобы точно все заработало.
0
|
|
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
|
||
| 22.01.2016, 21:56 | ||
То, что я пока видел из Cube/HAL - не настолько адово, плюс достаточно краткая, но внятная документация по каждому модулю прямо в C-файле (с точки зрения "нормального" программирования - странно, конечно: всегда для пользователя библиотеки основным был хидер, а *.c ему мог и вообще не достаться).
0
|
||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
|
||
| 22.01.2016, 22:14 | ||
Насчёт "охереть, сколько всего напихали" - я-то пришёл не с AVR (ну, в основном: большая доля в паре проектов на AVR на моей совести есть), а с "больших" компьютеров. И эйфория для меня скорей не в навороченной периферии, а в отсутствии необходимости подстраиваться под ОС. Хотя привычки типа "не верь, что одинаковый код выполнится за одинаковое время, ставь таймер или читай часы" остаются. Так что таймеры и DMA - для меня скорей естественны (эх... вспоминаются 90-е, когда для того, чтобы узнать, как оцифровывать стереосигнал с Soumd Btoster Pro - пришлось дизассемблировать то ли Fast Troskir, то ли Scream Troskir и смотреть, как это сделано в нём: док не было... и вот там как раз руками DMA настраивался и всё такое - DOS, однако). Уровень абстракции HAL мне скорей покажется не слишком высоким... В плане абстракции, кстати, порадовала ардуина. Да, они дорого за эту абстракцию заплатили, но там, где можно себе это позволить - "зацепление" (coupling) кода минимально, для понимания каждого модуля не надо смотреть за его пределы.
0
|
||
|
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
|
||
| 22.01.2016, 22:44 | ||
То, что я пока видел из Cube/HAL - не настолько адово Я имел в виду хидеры регистров и полей, по файлу для каждого мк, они там в Cube в каталоге CMSIS лежат. Другие библиотеки, кроме HAL, их используют как базу Все библиотеки их используют как базу
0
|
||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
|
|
| 22.01.2016, 23:12 | |
|
Так это ж CMSIS, это неизбежно. По ощущениям, они нужны в основном для того, чтобы не гадать, что за число 0x42 в юзерском коде.
0
|
|
|
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
|
|
| 22.01.2016, 23:43 | |
|
И вместо этого гадать что за слова USORT_CR1_TCIE | USORT_CR1_RWU )
0
|
|
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
|
|
| 22.01.2016, 23:56 | |
|
vt340, это заметно проще:
1. Сразу видно, что оно от USORT (а при некотором опыте, видимо, что-то ещё) 2. Это _однозначный_ идентификатор. И если искать по нему в DataShiet - найдёте именно то, что надо, а не какое-то другое использование числа 42. А если бы было программирование на приличных языках (со строгой типизацией) и с нормальной библиотекой - ещё и шансы использовать не ту константу были бы невелики. Но это уже мечты, этого и на десктопе нет. А то завтра, увидев в своём коде 42, полезете в datasheet и обнаружите, что это - ответ на главный вопрос жизни, вселенной и всего такого. Хотя позавчера вы всего-то хотели USORT настроить.
0
|
|
|
0 / 0 / 0
Регистрация: 23.12.2012
Сообщений: 392
|
||
| 23.01.2016, 06:53 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 23.12.2012
Сообщений: 392
|
||
| 23.01.2016, 07:01 | ||
Точно также можно сразу же работать с аналоговыми сигналами на простейших настройках АЦП и по простейшему алгоритму. Операционники имхо лучше жечь все таки внешние, в дип-корпусах :)
0
|
||
|
0 / 0 / 0
Регистрация: 23.12.2012
Сообщений: 392
|
||
| 23.01.2016, 07:08 | ||
В AVR это было бы просто TCIE, коротко, ясно, хотя и немного не безопасно :) Хотя возможно для разных уартов эти биты стоят на разных местах, но тогда это вообще уже издевательство какое то.
0
|
||
|
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
|
|||
| 23.01.2016, 11:14 | |||
0
|
|||
|
0 / 0 / 0
Регистрация: 23.12.2012
Сообщений: 392
|
|
| 23.01.2016, 13:28 | |
|
А какие IDE умеют подсказывать названия битов? Я пользуюсь ИАРом, он умеет подсказывать только название полей структур.
В данном случае что мне не нравится, так это дублирование информации, которое только захламляет программу. Т.е. установка бита будет выглядеть так: USORT_CR1 |= USORT_CR1_TCIE; А когда их надо много разных установить, получается довольно некрасиво и нечитабельно. Более того, в подобных записях одинаковые длинные участки могут повторяться и три раза (насчет 4-х не уверен :) )
0
|
|
|
0 / 0 / 0
Регистрация: 17.01.2016
Сообщений: 44
|
||
| 23.01.2016, 13:46 | ||
0
|
||
|
Oxford
|
|
| 23.01.2016, 14:41 | |
|
В реальности все будет определяться от поставленной задачи и знаний специалистов которые эту задачу будут решать.
Имею задачу, но не имею возможность. Имею возможность, но не имею задачи. Выпьем за то, чтобы они нашли друг друга. |
|
|
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
|
|||
| 23.01.2016, 22:23 | |||
т.е., я мог бы понять, что это неудобно - много писать, но такой проблемы ведь нет, если писать в чем-то лучше notepad.ixi.
0
|
|||
|
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
|
||
| 23.01.2016, 23:28 | ||
А это уже дело принципа - Dont Repeat Yourself )
0
|
||
| 23.01.2016, 23:28 | |
|
Чем связать STM32 + STM32 в одном корпусе? Общение с барометром MS5540 на STM32 (Arduino to STM32)
PinBoard: впечатления
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|