Попробуй это, совсем минимум, проверишь твои инструменты и умение копировать файл на доску. Я предполагаю, что это плата NUCLEO, да?
.cpu cortex-m0
.thumb
.thumb_func
.global _start
_start:
stacktop: .word 0x20000100
.word reset
.word reset
.word reset
.word reset
.thumb_func
reset:
b .
build
arm-none-eabi-as flash.s -o flash.o
arm-none-eabi-ld -Ttext=0x08000000 flash.o -o flash.elf
arm-none-eabi-objdump -D flash.elf > flash.list
arm-none-eabi-objcopy -O binary flash.elf flash.bin
check build
cat fla sh .list
Disassembly of section .text:
08000000 <_start>:
8000000: 20000100
8000004: 08000015
8000008: 08000015
800000c: 08000015
8000010: 08000015
08000014 <reset>:
8000014: e7fe b.n 8000014 <reset>
Хорошо выглядит именно то, что нам нужно.
Теперь скопируйте командную строку или перетащите флаг sh .bin на виртуальный диск, который монтируется при подключении платы NUCLEO. Это загрузит это в целевой MCU на плате. STM32F446, и должен сбросить его, и вы окажетесь в этом l oop, без мерцающего светодиодного индикатора.
Когда вы делаете более сложные проекты, вы просто расширяете эту bootstrap, программу, связанную (проверено) и скопировано на виртуальный диск fla sh.
Обычно я делаю обновление прошивки конца отладки (stlink плюс флэш-накопитель), когда я получаю новую плату NUCLEO. ST предоставляет основанный на java инструмент, который сам по себе не так часто обновляется, но проверяет доску и, как мне кажется, базу данных на их сайте и может обновить ваш флаг sh. В зависимости от вашей операционной системы у меня были NUCLEO, которые вы можете копировать только несколько раз или один раз, и вам необходимо отключить и снова подключить, для более новых версий прошивки для этих и более новых плат эта проблема практически исчезла. Было бы сказано, что на устройстве не осталось места, отключите / повторно подключите, и все будет в порядке.
Также предоставляя возможности stlink, вы можете использовать openocd или другие инструменты для остановки и проверки устройства, например, с помощью openocd, когда вы lnet на сервере openocd вы можете использовать mdw 0x08000000 20 и проверить запуск пользователя fla sh, чтобы увидеть, совпадает ли он с двоичным файлом, который, по вашему мнению, вы загрузили на устройство. В зависимости от части вы также можете написать / стереть этот fla sh через openocd, но не думайте, что поддержка всегда есть для всех ST или других фирменных частей. Напишите в ram и запустите оттуда (другой запуск, а не таблицу векторов), но для перепрошивки необходимо, чтобы кто-то добавил эту поддержку для каждой детали или семейства в openocd.
Как указано в комментариях, вы не создаете что вы думаете, или вы на самом деле не загружаете программу в FLA sh. Изучите двоичный файл, изучите fla sh, чтобы увидеть, что на самом деле произошло, если что-нибудь. Выше следует избегать всех барьеров на пути к успеху, CMSIS, инструментам IDE, STMCubeMX и т. Д. c. Как только вы сможете добиться успеха, продвигайтесь к середине с обоих концов (между этим тривиальным примером и вашим проектом) и найдите, где настоящая проблема / была. Вы должны иметь возможность, например, использовать ide и все такое для создания двоичного файла, использовать инструменты gnu для проверки этого двоичного файла, hexdump / что угодно, чтобы проверить файл .bin, а затем перетаскивать и удалять из среды IDE для программирования.