Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
не будет мигать лампочкой, но выставит скорость процессора
Сейчас можно писать сложнейшие программы, вообще не вникая в то, что фреймворк делает на низком уровне, в 99% случаев этого не потребуется. И только когда программа не работает как надо и в своем коде вы уверены — есть смысл поискать ошибку во фреймворке
Нельзя доверять коду, который вы не написали полностью сами.
Тому коду, который сам написал, тоже сильно доверять не стоит.
Ну или портируйте RTEMS на свою плату, что ли.Там уже есть порт для F4. Перенос на F7 займет день с перерывам на чай-печеньки-котиков. Только зачем? Ардуинщикам оно неинтересно, а те, кто ее использует, могут портануть и без статьи
Не очень удачное и очень сложное начало для новичка (стеки, ассемблер, линкеры).
Не раскрыта тема потребностей в таком мощном и дорогом МК (Cortex-M7, а тут вы его собрались использовать для включения лампы?) Есть куда более дешевые и популярные варианты, та же Blue Pill.
-mthumb компилируем для armv7
У STM32F746NG архитектура Cortex-M7.
Ну и, с чистого лица, когда рисуешь схему и разводишь плату — сам.В этом ключе моя статья оказывается комплементарной к этой :)
1. Виртуальная машина Ubuntu
2. arm компилятор — скачать по ссылке
указатель на адрес памяти который используется для инструкций PUSH и POP. Настоятельно рекомендую досконально изучить эти две инструкции, так как я не буду в деталях объяснять все инструкции.Согласен, что рассказывать в данной статье про устройство стека неуместно. Но не лишним было бы привести ссылку на другие источники информации. Справедливости ради, мне бы самому стоило привести эту ссылку здесь, но искать лень
Ардуина, хоть и привлекательна в своей простоте, как платформа мне не понравилась. Выбор пал на компанию ST и их популярную продукцию.Не самое удачное решение. Лучше было начать с той же AVR (не Ардуины!), просто потому что само ядро куда проще. А уже зная особенности работы с контроллерами, адаптировать эти знания под ARM. Впрочем, и так результат весьма неплохой!
init.c:А чего не воспользовались готовыми startup.s и заголовочными файлами? Все равно их содержимое — перечисление периферии и возможностей камня, собственно кода там считай нет. Не прописывать же адреса регистров и флагов вручную!
Загружать такое в мк конечно толку нет. Зато есть толк в просмотре и изучении бинарника.Ну вот, на самом интересном месте! Мигание лампочкой как раз стоило бы добавить. Хотя бы чтобы показать, что все описанные трудности были не напрасны, вот он готовый HelloWorld. Тут можно даже оставить тактирвоание по умолчанию, не рассматривать тонкости настройки портов и т.д. Просто:
RCC->AHBENR |= RCC_AHBENR_GPIOBEN;
GPIOB->MODER = (0b01 << 2*8);
//GPIOB->OSPEEDR - на единицах герц можно оставить дефолтное значение
while(1){
GPIOB->ODR ^= (1<<8); //в рабочем коде так делать не стоит, но для тестов сойдет.
volatile uint32_t i; //чтобы компилятор не "оптимизировал" пустой цикл
for(i=0; i<100000; i++){} //точное число итераций подобрать экспериментально - для тестов сойдет
}Если у вас уже есть система с человеческой системой управления программами — зачем качать что-то по странным ссылкам? apt install gcc-arm-none-eabi binutils-arm-none-eabi
Это не странная ссылка, а сайт производителя.
В пакетах могут быть старые версии
gdb-multiarch, который вы, кстати, забыли
Любая ссылка для скачивания софта, кроме репозитория — странная ссылка.Там https, с чего бы ей быть странной? Ну и не весь софт есть в репозиториях. Какой-то нужно патчить и собирать самому.
А есть ли смысл гоняться за забагованными нестабильными версиями? Чего конкретно не хватает в обычных?Arm делает забагованный софт, а Canonical правит баги в GCC и выкладывает кошерные версии? Я вас правильно понял? Release Notes можете сами посмотреть, что там меняется от версии к версии.
Потому что на первых порах он и не нужен. Для отладки более чем достаточно вывода на UART.Не вижу ни одной причины, почему нельзя стразу пользоваться отладчиком вместо печати в консоль. Это стокгольмский синдром от Ардуино?
Black Magic Probe работает через UARTОн работает через JTAG\SWD. Соединение до хостовой машины действительно через UART, но это не то, когда пишут «отладка через UART»
Ну и не весь софт есть в репозиториях.Про тот, которого нет, понятно. Тут без вариантов.
Arm делает забагованный софт, а Canonical правит баги в GCC и выкладывает кошерные версии? Я вас правильно понял?Нет, неправильно. Я говорю про деление на testing / stable ветки. На свежей обкатывают новый функционал и там всегда куча багов, а стабильную шлифуют для устойчивой работы.
Не вижу ни одной причины, почему нельзя стразу пользоваться отладчиком вместо печати в консоль.Потому что это отдельная консольная программа с неочевидным интерфейсом.
Я говорю про деление на testing / stable ветки.Вы бы все-таки посмотрели что там по ссылке лежит.
Потому что это отдельная консольная программа с неочевидным интерфейсом.Какая религия не позволяет пользоваться современной IDE типа Эклипса, где все настраивается в пару кликов?
Вы бы все-таки посмотрели что там по ссылке лежит.Можете вкратце пересказать, на что обратить там внимание? Надеюсь, не на то, что там есть готовые сборки?
Какая религия не позволяет пользоваться современной IDE типа Эклипса, где все настраивается в пару кликов?А зачем, если консоль + редактор перекрывают все потребности? Плюс прозрачность всего, что происходит.
Можете вкратце пересказать, на что обратить там внимание? Надеюсь, не на то, что там есть готовые сборки?Могу повторить, мне не жалко — Release Notes.
program prog.elf Залили прошивку.program prog.elf reset Залили прошивку и ресетнули чип.reset halt ресетнули чип и остановили ядро.resume Продолжили выполнение кодаstep Тут все очевидно же.то что вы скачаете из репозитория уже слишком старое.Какая разница насколько оно старое, если оно выполняет свою работу?
так как даже openocd лежит в виде исходникаТот же самый вопрос: зачем он у вас в виде исходника, когда есть уже собранная и упакованная версия?
Теперь про неочевидный интерфейс отладчика. Он очень очевиден. к примеруЕсли его знать — конечно. Тут примерно та же история, что с консолью в целом. Это крайне эффективный и удобный инструмент — но только когда освоишь.
а ну еще что то типа можно прочитать любой участок памяти или регистр и статус процессораУгу. А учитывая, что gdb-сервер это все-таки сервер, можно даже по удаленке отлаживаться. Я ж не спорю, что штука полезная. Просто не надо все учить одновременно.
Поправили баги, увеличили производительность, добавили предупреждений.Это общие слова. Реально-то разница заметна? Или она в пределах пяти процентов объема генерируемого бинарника?
Ссылка («Официалка») дана людям которые решат собрать свой компилятор если надо. там как раз исходники а не только бинарник
apt-get source gcc-arm-none-eabiПочему не использовать уже готовый startup.s?По-моему, логичнее было бы подробно его разобрать, а потом использовать. Просто основная часть там — таблицы прерываний и тому подобное, которое гвоздями прибито к конкретному контроллеру. Не переписывать же с нуля то, что уже есть.
Ну и с примером мигания, это еще долеко. мы ведь еще даже не включили самую главную периферию и системные блоки зачем же лезть мигать.А в F7 нужно еще что-то включать? Я просто только с F103 и L151 работал, там достаточно того кода, что я написал. Ну да, тактирование будет от RC-генератора на какой-то небольшой частоте. Ну да, тайминги подобрали на глазок. Зато хотя бы видно, что камень живой и реагирует на команды. Это потом можно менять системную частоту (и смотреть как меняется частота мигания!).
Для отладки более чем достаточно вывода на UART, Ну а как отлаживать UART?Ну не знаю, у меня такой проблемы не было. Но тут не уверен, возможно подсматривал чужие решения, а в рамках вашего подхода это все же читерство :) С другой стороны, не менее познавательно сделать программный UART. Правда, без логического анализатора или осциллографа это будет непросто.
Опять компилятор, наоборот в каждой версии правят баги. и очень скрупулезно.Я пользуюсь Линуксом как основной системой и как-то привык к простым решениям. Зачем лазить по интеренетам в поисках программ и кряков к ним, если можно вбить название всех нужных программ в менеджер пакетов, и он сам быстренько все поставит. Зачем компилировать чужие исходники, когда мейнтейнеры дистрибутива это уже сделали. Более того, они эти исходники адаптировали под свою среду (хотя бы пути прописали).
STM32 Часть 1: Основы