Nucleo F446REでLチカと+α
参考
環境
Nucleo F446RE
arm-none-eabi-gcc (Arch Repository) 9.1.0
コード
上の ARMアセンブリでLチカ さんからコピペしてちょこっと変えただけ
.text .global _start .code 16 .syntax unified .equ STACK_TOP, 0x20020000 .equ RCC_AHB1ENR, 0x40023830 .equ GPIOA_MODER, 0x40020000 .equ GPIOA_ODR, 0x40020014 _start: .org 0x00000000 .word STACK_TOP .word init .type init, function init: LDR r0, =RCC_AHB1ENR movw r1, #0x0001 str r1, [r0] LDR r0, =GPIOA_MODER movw r1, #0x0400 str r1, [r0] toggle_led: LDR r0, =GPIOA_ODR ldr r1, [r0] eor r1, #0x0020 str r1, [r0] LDR r0, =800000 wait_loop: subs r0, #1 bne wait_loop b toggle_led .end
コンパイル(普通こういうのはmakefileでやるんだと思うけど)
#!/bin/bash filename=$(echo $1 | sed -E 's/.[^.]*$//') arm-none-eabi-as -mcpu=cortex-m4 -mthumb -o ${filename}.o $1 arm-none-eabi-ld -Ttext 0x08000000 -o ${filename}.elf ${filename}.o #arm-none-eabi-objcopy -O binary ${filename}.elf ${filename}.hex #arm-none-eabi-objcopy -O binary ${filename}.elf ${filename}.bin
基板上のボタンを押してる間だけLEDがつくようにした
.text .global _start .code 16 .syntax unified .equ STACK_TOP, 0x20020000 .equ RCC_AHB1ENR, 0x40023830 .equ GPIOA_MODER, 0x40020000 .equ GPIOA_ODR, 0x40020014 .equ RCC_AHB1ENR, 0x40023830 .equ GPIOC_MODER, 0x40020800 .equ GPIOC_IDR, 0x40020810 _start: .org 0x00000000 .word STACK_TOP .word init .type init, function init: LDR r0, =RCC_AHB1ENR movw r1, #0x0005 // GPIOA(=0x0001) | GPIOC(=0x0004) str r1, [r0] LDR r0, =GPIOA_MODER movw r1, #0x0400 str r1, [r0] LDR r0, =GPIOC_MODER LDR r1, =#0x00000000 str r1, [r0] LDR r0, =GPIOA_ODR ldr r1, [r0] button: LDR r2, =GPIOC_IDR ldr r3, [r2] ands r3, #0x2000 bne led_off led_on: mov r1, #0x0020 str r1, [r0] b button led_off: mov r1, #0x0000 str r1, [r0] b button .end