STM32 новичку в ARM что к чему
Re: STM32 новичку в ARM что к чему
Недавно начал изучать ARM, в связи с этим возник вопрос - совместимы ли средства отладки одного производителя с чипами другого?
К примеру, у меня имеется в наличии программатор/дебагер Atmel ICE, который позволяет работать с ARM чипами Atmel (Ну, теперь уже Microchip)... А подойдет ли он для ARM чипов скажем STM или NXP?
Я как бы хочу все унифицировать и по возможности уйти от ПО и средств разработки производителей и использовать их только как вспомогательные средства. В данный момент использую GNU Toolchain для ПО. А вот как быть с железом? Не покупать же под каждого производителя свой программатор/отладчик... Или придется?
К примеру, у меня имеется в наличии программатор/дебагер Atmel ICE, который позволяет работать с ARM чипами Atmel (Ну, теперь уже Microchip)... А подойдет ли он для ARM чипов скажем STM или NXP?
Я как бы хочу все унифицировать и по возможности уйти от ПО и средств разработки производителей и использовать их только как вспомогательные средства. В данный момент использую GNU Toolchain для ПО. А вот как быть с железом? Не покупать же под каждого производителя свой программатор/отладчик... Или придется?
- Реклама
Re: STM32 новичку в ARM что к чему
[uquote="PombI4",url="/forum/viewtopic.php?p=3782198#p3782198"]Недавно начал изучать ARM, в связи с этим возник вопрос - совместимы ли средства отладки одного производителя с чипами другого?
К примеру, у меня имеется в наличии программатор/дебагер Atmel ICE, который позволяет работать с ARM чипами Atmel (Ну, теперь уже Microchip)... А подойдет ли он для ARM чипов скажем STM или NXP?[/uquote]
Встречный вопрос: зачем начинающему сразу армы от Atmel, STM и NXP? Тем более если у тебя уже есть AVR и STM8, причем этот STM8 подключен к полтора баксовому ST-Link(что видно на скрине в твоем старом сообщении) поддерживающем и STM32... А вообще даже этот ST-Link поддерживается не во всех средах разработки под STM32, так что хотя аппаратно отладчики от Atmel должны уметь работать с любыми кортексами, но в большинстве сред, если не во всех, они все равно работать не будут.
К примеру, у меня имеется в наличии программатор/дебагер Atmel ICE, который позволяет работать с ARM чипами Atmel (Ну, теперь уже Microchip)... А подойдет ли он для ARM чипов скажем STM или NXP?[/uquote]
Встречный вопрос: зачем начинающему сразу армы от Atmel, STM и NXP? Тем более если у тебя уже есть AVR и STM8, причем этот STM8 подключен к полтора баксовому ST-Link(что видно на скрине в твоем старом сообщении) поддерживающем и STM32... А вообще даже этот ST-Link поддерживается не во всех средах разработки под STM32, так что хотя аппаратно отладчики от Atmel должны уметь работать с любыми кортексами, но в большинстве сред, если не во всех, они все равно работать не будут.
Re: STM32 новичку в ARM что к чему
У вас не найдется 100 рублей на ST-Link? https://aliexpress.ru/wholesale?SearchT ... =price_ascPombI4 писал(а):Не покупать же под каждого производителя свой программатор/отладчик...
Без IDE? Чем шьете и отлаживаете? Или только собираетесь? На хабре недавно вышла статья, посмотрите если хотите. https://habr.com/ru/post/485514/PombI4 писал(а):В данный момент использую GNU Toolchain для ПО.
В ней про прошиватель и отладчик. Но нужен ST-Link.
Re: STM32 новичку в ARM что к чему
Я не писал, что я начинающий. Я написал, что начал изучать ARM. Это как бы слегка разные вещи
...
Давно на работе кодил под Freescale'овский проц, под Freescale'овским же IDE. Но то было давно.
Дома накопилось много чего от AVRок, в т.ч. тот же Atmel Ice. Но Атмел стал негуманен по цене.
Поэтому решено было переключить внимание на STM. В т.ч. и на ARM. Соответственно есть кое что и для него. Но поддерживать знания в актуальном состоянии для нескольких разных IDEшек, это накладно. Хочется золотой середины и универсальности.
То же самое и с железом.
Вопрос не в 100 рублях, а в обилии платохлама на столе и в шкафу. Зачем использовать разные инструменты, если можно пользоваться одним.
В качестве IDE использую Eclipse. Всякие конфигураторы/профилировщики от производителей по возможности. Но есть желание минимизировать их.
В качестве доступного железа экспериментирую пока на Raspberry без ОС. В шкафу лежит Arduino Due и STM Nucleo F413ZH...
Давно на работе кодил под Freescale'овский проц, под Freescale'овским же IDE. Но то было давно.
Дома накопилось много чего от AVRок, в т.ч. тот же Atmel Ice. Но Атмел стал негуманен по цене.
Поэтому решено было переключить внимание на STM. В т.ч. и на ARM. Соответственно есть кое что и для него. Но поддерживать знания в актуальном состоянии для нескольких разных IDEшек, это накладно. Хочется золотой середины и универсальности.
То же самое и с железом.
Вопрос не в 100 рублях, а в обилии платохлама на столе и в шкафу. Зачем использовать разные инструменты, если можно пользоваться одним.
В качестве IDE использую Eclipse. Всякие конфигураторы/профилировщики от производителей по возможности. Но есть желание минимизировать их.
В качестве доступного железа экспериментирую пока на Raspberry без ОС. В шкафу лежит Arduino Due и STM Nucleo F413ZH...
Re: STM32 новичку в ARM что к чему
Наверное уже привыкли к неспешности IDE?PombI4 писал(а):В качестве IDE использую Eclipse.
- Реклама
- daaar
- Держит паяльник хвостом
- Сообщения: 920
- Зарегистрирован: Пн июн 13, 2016 19:37:24
- Откуда: Perm
- Контактная информация:
Re: STM32 новичку в ARM что к чему
Есть микроконтроллер gd32f130c8t6, как понял под них можно писать в любой среде для stm32. Проект конфигурирую в кубе обычно. Как быть с gd32? Какие есть подводные камни при работе с gd32?
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: STM32 новичку в ARM что к чему
daaar, прошить его st-link'ом при помощи утилиты st-flash точно не удастся без патча утилиты. Я уже пытался и с GD32 и с CS32 (подсунул, зараза, китаец в "синей таблетке" вместо STM32 эту дрянь). В итоге плюнул, выпаял и выкинул гадость, а вместо нее впаял STM32.
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: STM32 новичку в ARM что к чему
Там вроде какие-то резисторы со 100 кОм меняют на поменьше и все начинает прошиваться... ? Где-то читал про это.
Станислав
- Ivanoff-iv
- Друг Кота
- Сообщения: 7077
- Зарегистрирован: Пт ноя 11, 2016 05:48:09
- Откуда: Сердце Пармы
Re: STM32 новичку в ARM что к чему
я столкнулся (c CS32) только с тем что памяти в нём ровно столько, сколько заявлено (а не в 2 раза больше как у стм32ф103с8т6) хотел в паяльник вставить его - код считанный с STM в CS не влез... (шил штатным стлинком) прошиться прошился, но верификация не прошла (выше заявленной памяти закономерно читаются нули).
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
- daaar
- Держит паяльник хвостом
- Сообщения: 920
- Зарегистрирован: Пн июн 13, 2016 19:37:24
- Откуда: Perm
- Контактная информация:
Re: STM32 новичку в ARM что к чему
То есть танцы с бубном не обязательны?
Re: STM32 новичку в ARM что к чему
STM32F103 вопросик по таймеру TIM1
может кто объяснить такой момент с таймером TIM1 - RM0008 стр.328 Figure 95
сигнал на линиях OC1,OC2,OC3 показан пачками - откуда берется эта "нарезка", начало и завершение импульса(пачки) - вроде понятно от куда, но почему импульс "нарезан", почему не такой же как OC1N,OC2N,OC3N ?
поспешил с вопросом
прочитал свой же вопрос - и кажется сообразил: "нарезается" содержимым ARR и CCR1 таймера TIM1.
ну вот и зацепочка, голову ломаю - как выводить определенное кол-во импульсов (больше 255).
может кто объяснить такой момент с таймером TIM1 - RM0008 стр.328 Figure 95
сигнал на линиях OC1,OC2,OC3 показан пачками - откуда берется эта "нарезка", начало и завершение импульса(пачки) - вроде понятно от куда, но почему импульс "нарезан", почему не такой же как OC1N,OC2N,OC3N ?
поспешил с вопросом
прочитал свой же вопрос - и кажется сообразил: "нарезается" содержимым ARR и CCR1 таймера TIM1.
ну вот и зацепочка, голову ломаю - как выводить определенное кол-во импульсов (больше 255).
- Вложения
-
- F95.jpg
- (85.78 КБ) 193 скачивания
- Ярослав555
- Поставщик валерьянки для Кота
- Сообщения: 2081
- Зарегистрирован: Пт май 31, 2013 17:14:38
- Откуда: Украина, Винница
Re: STM32 новичку в ARM что к чему
Обьясните неопытному. Я до этого только в иаре работал, там с режимом все было проще - включаешь С или С++ и оно весь проект компилит в выбраном режиме.
Но в эклипсе все не так. Ситуация такова, что мейн у меня .с, а поскольку до этого проект в иаре писался с использованием с++ классов, то работу с ними, в часности инициализацию, пришлось вынести в отдельную функцию в отдельный .срр файл.
Так вот - программа из мейна переходит в с++ инит, а вот назад вернуться не может - после ретурна исполнение улетает черт знает куда.
Думал дело в коде - закоментил все, осталась пустая функция, и ситуация повторяется.
Но в эклипсе все не так. Ситуация такова, что мейн у меня .с, а поскольку до этого проект в иаре писался с использованием с++ классов, то работу с ними, в часности инициализацию, пришлось вынести в отдельную функцию в отдельный .срр файл.
Так вот - программа из мейна переходит в с++ инит, а вот назад вернуться не может - после ретурна исполнение улетает черт знает куда.
Думал дело в коде - закоментил все, осталась пустая функция, и ситуация повторяется.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
А в хидере с определением cpp-шного init-а, который подключается в main.c, есть extern "C" сотоварищи?
- Ярослав555
- Поставщик валерьянки для Кота
- Сообщения: 2081
- Зарегистрирован: Пт май 31, 2013 17:14:38
- Откуда: Украина, Винница
Re: STM32 новичку в ARM что к чему
у срр-шного файла есть hpp-шный файл, где объявления функций обрамлены extern "C". этот хидер уже подключен в .с файл.
я этот прием линковки и не применял никогда: видел, но иару было фиолетово - он не смотрит на расширение файла и компилит все в С++, а куб себе спокойно работает с .с файлами. А тут с эклипсом все по взрослому. Я в начале и не обрамлял ничего и у меня не хотело собираться. Потом вспомнил про эту штуку, по шаблону добавил - собралось, думал все ок, но не заработало. Вчера вечером уже начал изучать вопрос, но после командировки глаза слипались. Если дело определенно в этой стороне, ну ок тогда - подтяну теорию, глядишь разберусь.
я этот прием линковки и не применял никогда: видел, но иару было фиолетово - он не смотрит на расширение файла и компилит все в С++, а куб себе спокойно работает с .с файлами. А тут с эклипсом все по взрослому. Я в начале и не обрамлял ничего и у меня не хотело собираться. Потом вспомнил про эту штуку, по шаблону добавил - собралось, думал все ок, но не заработало. Вчера вечером уже начал изучать вопрос, но после командировки глаза слипались. Если дело определенно в этой стороне, ну ок тогда - подтяну теорию, глядишь разберусь.
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 новичку в ARM что к чему
Не страдай ерундой. Переводи весь проект в .сpp. С++ компилятор чисто С-ный код скомпилирует в лучшем виде. Стартап можешь в .с оставить, тогда перед обработчиками прерываний extern "C" поставишь да и всё..
ЗЫ: достаточно легко сделать, чтобы всё компилировалось и gcc, и iar, и даже keil.
ЗЫ: достаточно легко сделать, чтобы всё компилировалось и gcc, и iar, и даже keil.
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: STM32 новичку в ARM что к чему
А со стеком все в порядке? А некоторые системы под стек дефолтно дают мало места...
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
- Ярослав555
- Поставщик валерьянки для Кота
- Сообщения: 2081
- Зарегистрирован: Пт май 31, 2013 17:14:38
- Откуда: Украина, Винница
Re: STM32 новичку в ARM что к чему
та на стеке и не хранится ничего. все данные глобальные - либо буфферы, либо экземпляры класов. да и функция пустая. не должно переполняться. я к тому же пока не разбирался как здесь заполнение стека проверять (в иаре то попроще с этим - и граф шкала есть, да и предупреждение он выдает).
по совету знакомого, я сделал пустой проект с простенькой програмкой и смоделировал похожую ситуацию вызова внешней .срр функции - ничего не вывалилось. значит линковщик таки работает правильно и причина в чем-то другом.
проверял на дискавери, оригинальная железяка дома, к семи доберусь и буду ставить эксперименты.
Добавлено after 4 hours 41 minute 53 seconds:
ну я хз котаны - вместо того чтобы делать новый проект из кубовского файла, я создал чистый прямо в куб-идэе и руками перезабил всю инфу. сгенерил код, перенес все те же юзер файлы, скопипастил куски юзер кода и оно не падает.
пока что спортивного интереса копаться в чем же разница между проектами нет - может косяк в их коде, может у меня что-то было. Если повторяться не будет то и хрен с ним, а если будет то потрачу денек.
по совету знакомого, я сделал пустой проект с простенькой програмкой и смоделировал похожую ситуацию вызова внешней .срр функции - ничего не вывалилось. значит линковщик таки работает правильно и причина в чем-то другом.
проверял на дискавери, оригинальная железяка дома, к семи доберусь и буду ставить эксперименты.
Добавлено after 4 hours 41 minute 53 seconds:
ну я хз котаны - вместо того чтобы делать новый проект из кубовского файла, я создал чистый прямо в куб-идэе и руками перезабил всю инфу. сгенерил код, перенес все те же юзер файлы, скопипастил куски юзер кода и оно не падает.
пока что спортивного интереса копаться в чем же разница между проектами нет - может косяк в их коде, может у меня что-то было. Если повторяться не будет то и хрен с ним, а если будет то потрачу денек.
- afz
- Опытный кот
- Сообщения: 744
- Зарегистрирован: Сб дек 22, 2012 08:17:42
- Откуда: Караганда, Казахстан
Re: STM32 новичку в ARM что к чему
Я в кубическом main() держу ровно две строчки (чтобы меньше копипастить).Между /* USER CODE BEGIN Init */ и /* USER CODE END Init */ вписываю что-то вроде My_Init(); и, между /* USER CODE BEGIN 2 */ и /* USER CODE END 2 */ - My_main(); причем, не уведомляя кубики, что из этого My_main() я не вернусь.Ярослав555 писал(а):сгенерил код, перенес все те же юзер файлы, скопипастил куски юзер кода
А, нет, три: еще между /* USER CODE BEGIN Includes */ и /* USER CODE END Includes */ ставлю #include "My_Header.h", в котором, в частности, описаны и My_Init(); и My_main();
И все. сгенерив новый кубический проект, по-простому, добавляю эти три строчки, и моя разработка подключена. А кубики - они такие. Однажды, после очередного обновления, посыпались какие-то ошибки. Перегенерил проект - все ОК. Оказалось, новый CubeMX криво воспринимал проект из-под старого. Еще что-то было... Да и перенести проект на новый камень - это самое простое решение - генеришь его заново, добавляешь эти самые 3 строчки, и вперед! Да, пару раз понадобилось что-то дописать куда-то в прерывающие программы, тоже вызовы своих программ. Чаще всего у кубических программ обслуживания прерываний заявлен коллбэк и его хватает, но где-то его не оказалось.
Добавлено after 22 minutes 14 seconds:
Да, и где-нибудь на видном месте (например, в начале My_Header.h), надо указать комментарием, в какие кубические файлы надо вписывать свои вызовы.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
А вся инициализация периферии, обработчики прерываний - тоже свои, или сгенерированные?
P.S. А, сразу не увидел оговорку про прерывания. Точек связи сгенерированного кода со своим всё же больше трёх.
P.S. А, сразу не увидел оговорку про прерывания. Точек связи сгенерированного кода со своим всё же больше трёх.
- Ярослав555
- Поставщик валерьянки для Кота
- Сообщения: 2081
- Зарегистрирован: Пт май 31, 2013 17:14:38
- Откуда: Украина, Винница
Re: STM32 новичку в ARM что к чему
[uquote="WiseLord",url="/forum/viewtopic.php?p=3785755#p3785755"]Точек связи сгенерированного кода со своим всё же больше трёх.[/uquote]
Почему? Колбеки редефайнятся в своем файле и возможно даже править не приходится.
По поводу мейна - у меня как-то сложилось что в мейне только начальная инициализация и запуск системного таймера. Дальше все остальное происходит через вызовы этого системного таймера. Мои объекты имеют функцию poll - в ней находится большой свич с описанием действий и переходов, рискну назвать это машиной состояний. Иногда даже две таких функций - быстрая и легкая (например простое сравнение) и медленная (математически нагруженная). Такая архитектура позволяет асинхронную работу частей программы, никто никого не ждет - есть состояние значит переход на новое состояние, нет - ретурн. Разные обьекты ставятся на разные таски - кто-то на 1 мС, кто-то на 100 мС.
Максимум что попадает в цикл мейна - мигание светодиодом, причем в последнее время я туда пакую софтверный шим для этого светодиода. По плавности мигания можно увидеть насколько ровно идет программа. Главный цикл имеет наинизший приоритет и если ему совсем времени не остается, значит и какой-то таск может захлебнуться. Для моих задач хватает, не атомные реакторы строю.
Почему? Колбеки редефайнятся в своем файле и возможно даже править не приходится.
По поводу мейна - у меня как-то сложилось что в мейне только начальная инициализация и запуск системного таймера. Дальше все остальное происходит через вызовы этого системного таймера. Мои объекты имеют функцию poll - в ней находится большой свич с описанием действий и переходов, рискну назвать это машиной состояний. Иногда даже две таких функций - быстрая и легкая (например простое сравнение) и медленная (математически нагруженная). Такая архитектура позволяет асинхронную работу частей программы, никто никого не ждет - есть состояние значит переход на новое состояние, нет - ретурн. Разные обьекты ставятся на разные таски - кто-то на 1 мС, кто-то на 100 мС.
Максимум что попадает в цикл мейна - мигание светодиодом, причем в последнее время я туда пакую софтверный шим для этого светодиода. По плавности мигания можно увидеть насколько ровно идет программа. Главный цикл имеет наинизший приоритет и если ему совсем времени не остается, значит и какой-то таск может захлебнуться. Для моих задач хватает, не атомные реакторы строю.


