LoginSignup
1
1

More than 3 years have passed since last update.

[STM32メモ] スタックポインタの設定

Posted at

マイコン上でCプログラムを動かせるようにするためには色々な設定が必要だが、最近は自動生成コードに大体のことが書かれている。ただ、スタックポインタの設定が見当たらなかったのが気になったので調べてみた。

スタックポインタの設定

STM32では、起動後 CPUが0x0000 0000の値をスタックポインタ(R13レジスタ)に格納する。
0x0000 0000から始まる領域には、リセットまたはリセット解除後またはスタンバイからの復帰後のBOOT0,1ピンの設定でMain Flash, SRAM, システムメモリ(出荷時にブートローダが書かれている)のいずれかがマップされる。
image.png

スタックポインタのアドレスは、STM32Cubeで自動生成されるstartup_stm32*.s内のベクタテーブルの先頭__initial_spで設定されている。

stm32f072xb.s
; Amount of memory (in bytes) allocated for Stack
; Tailor this value to your application needs
Stack_Size      EQU     0x400

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp

; Vector Table Mapped to Address 0 at Reset
                AREA    RESET, DATA, READONLY
                EXPORT  __Vectors
                EXPORT  __Vectors_End
                EXPORT  __Vectors_Size

__Vectors       DCD     __initial_sp                   ; Top of Stack
                DCD     Reset_Handler                  ; Reset Handler
                DCD     NMI_Handler                    ; NMI Handler
                DCD     HardFault_Handler              ; Hard Fault Handler
                DCD     0                              ; Reserved
                DCD     0                              ; Reserved
                DCD     0                              ; Reserved

マイコンによっては明示的にSPを設定する必要があるが、STM32ではCPUが勝手にやってくれることが分かった。

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1