Из комментариев ... это 10 строк (больше, например, 20 или больше, зависит от того, как вы считаете) программы сборки кода.
NUCLEO-F411RE, которая использует STM32F411RE.
.cpu cortex-m7
.syntax unified
.thumb
stacktop: .word 0x20001000
.word reset
.thumb_func
reset:
/*
Address offset: 0x30
Reset value: 0x0000 0000
*/
ldr r0,=0x40023830
ldr r1,=0x00000001
str r1,[r0]
/*
Address offset: 0x00
Reset value: 0xA800 0000 for port A
*/
ldr r0,=0x40020000
ldr r1,=0xA8000400
str r1,[r0]
add r0,#0x18
ldr r1,=0x00000020
ldr r2,=0x00200000
d0:
str r1,[r0]
mov r3,#0x00100000
d1:
subs r3,#1
bne d1
str r2,[r0]
mov r3,#0x00100000
d2:
subs r3,#1
bne d2
b d0
Я использовал значения сброса вместо чтения-изменения-записи, чтобы сохранить несколько инструкций / местоположений.
arm-none-eabi-as --warn --fatal-warnings -mcpu=cortex-m7 flash.s -o flash.o
arm-none-eabi-ld -Ttext=0x08000000 flash.o -o flash.elf
arm-none-eabi-ld: warning: cannot find entry symbol _start; defaulting to 0000000008000000
arm-none-eabi-objdump -d flash.elf > flash.list
arm-none-eabi-objcopy -O binary flash.elf flash.bin
_start не имеет значения, можно добавить две строки, чтобы убрать этот комментарий go.
flash.elf: file format elf32-littlearm
Disassembly of section .text:
08000000 <stacktop>:
8000000: 20001000 .word 0x20001000
8000004: 08000009 .word 0x08000009
08000008 <reset>:
8000008: 480b ldr r0, [pc, #44] ; (8000038 <d2+0x6>)
800000a: f04f 0101 mov.w r1, #1
800000e: 6001 str r1, [r0, #0]
8000010: 480a ldr r0, [pc, #40] ; (800003c <d2+0xa>)
8000012: 490b ldr r1, [pc, #44] ; (8000040 <d2+0xe>)
8000014: 6001 str r1, [r0, #0]
8000016: f100 0018 add.w r0, r0, #24
800001a: f04f 0120 mov.w r1, #32
800001e: f44f 1200 mov.w r2, #2097152 ; 0x200000
08000022 <d0>:
8000022: 6001 str r1, [r0, #0]
8000024: f44f 1380 mov.w r3, #1048576 ; 0x100000
08000028 <d1>:
8000028: 3b01 subs r3, #1
800002a: d1fd bne.n 8000028 <d1>
800002c: 6002 str r2, [r0, #0]
800002e: f44f 1380 mov.w r3, #1048576 ; 0x100000
08000032 <d2>:
8000032: 3b01 subs r3, #1
8000034: d1fd bne.n 8000032 <d2>
8000036: e7f4 b.n 8000022 <d0>
8000038: 40023830 .word 0x40023830
800003c: 40020000 .word 0x40020000
8000040: a8000400 .word 0xa8000400
скопируйте fla sh .bin на вашу карту, и светодиод должен мигать, как на моей.
В соответствии с документацией, которую вы должны были прочитать в первую очередь. Индикатор на Arduino D1, то есть PA5, где D13 подключен для плат F411RE и F401RE NUCLEO. (Это PB13 на других продуктах NUCLEO, которые используют эту печатную плату). Если вы прочитали только то, что в do c указано PB13 или PA5, то, по крайней мере, попробуйте одно, затем другое. И, как указано в комментариях или ответах, ваша задержка должна быть достаточно большой между изменениями состояния gpio, чтобы человеческий глаз мог ее видеть, поэтому поместите туда задержку хорошего размера.
mov r3,#0x00100000
Изменение этих строк r3 (если оно жалуется, измените его на ldr r3, # 0xwhwhat_you_want), чтобы увидеть изменение частоты миганий при следующей сборке, например
mov r3,#0x00400000