STM彙編程式設計

2021-10-13 14:56:26 字數 3835 閱讀 7908

一、stm32的三種boot模式

所謂啟動,一般來說就是指我們下好程式後,重啟晶元時,sysclk的第4個上公升沿,boot引腳的值將被鎖存。使用者可以通過設定boot1和boot0引腳的狀態,來選擇在復位後的啟動模式。

4、開發boot模式選擇。

1、通常使用程式**儲存在主快閃儲存器儲存器,配置方式:boot0=0,boot1=x;

2、flash鎖死解決辦法:

開發除錯過程中,由於某種原因導致內部flash鎖死,無法連線swd以及jtag除錯,無法讀到裝置,可以通過修改boot模式重新刷寫**。

修改為boot0=1,boot1=0即可從系統儲存器啟動,st出廠時自帶bootloader程式,swd以及jtag除錯介面都是專用的。重新燒寫程式後,可將boot模式重新更換到boot0=0,boot1=x即可正常使用。

二、2.基於mdk建立純組合語言的stm32工程

1、建立工程

2、配置環境

3、程式**

area mydata, data

area mycode, code

entry

export __main

__main

mov r0, #10

mov r1, #11

mov r2, #12

mov r3, #13

;ldr r0, =func01

bl func01

;ldr r1, =func02

bl func02

bl func03

ldr lr, =func01

ldr pc, =func03

b .func01

mov r5, #05

bx lr

func02

mov r6, #06

bx lr

func03

mov r7, #07

mov r8, #08

bx lr

4、設定**

5、設定埠

6、除錯**

area mydata, data

area mycode, code

entry

export __main

__main

mov r0, #10

mov r1, #11

mov r2, #12

mov r3, #13

;ldr r0, =func01

bl func01

;ldr r1, =func02

bl func02

bl func03

ldr lr, =func01

ldr pc, =func03

b .func01

mov r5, #05

bx lr

func02

mov r6, #06

bx lr

func03

mov r7, #07

mov r8, #08

bx lr

7、檢視hex檔案

三、閃爍led的程式

1、程式**

led0 equ 0x40010c00

rcc_apb2enr equ 0x40021018

gpioa_crh equ 0x40010804

stack_size equ 0x00000400

area stack, noinit, readwrite, align=3

stack_mem space stack_size

__initial_sp

area reset, data, readonly

__vectors dcd __initial_sp ; top of stack

dcd reset_handler ; reset handler

area |.text|, code, readonly

thumb

require8

preserve8

entry

reset_handler

bl led_init

mainloop bl led_on

bl delay

bl led_off

bl delay

b mainloop

led_init

push

ldr r0,=rcc_apb2enr

orr r0,r0,#0x04

ldr r1,=rcc_apb2enr

str r0,[r1]

ldr r0,=gpioa_crh

bic r0,r0,#0x0f

ldr r1,=gpioa_crh

str r0,[r1]

ldr r0,=gpioa_crh

orr r0,r0,#0x03

ldr r1,=gpioa_crh

str r0,[r1]

mov r0,#1

ldr r1,=led0

str r0,[r1]

pop

led_on

push

mov r0,#0

ldr r1,=led0

str r0,[r1]

pop

led_off

push

mov r0,#1

ldr r1,=led0

str r0,[r1]

pop

delay

push

movs r0,#0

movs r1,#0

movs r2,#0

delayloop0

adds r0,r0,#1

cmp r0,#330

bcc delayloop0

movs r0,#0

adds r1,r1,#1

cmp r1,#330

bcc delayloop0

movs r0,#0

movs r1,#0

adds r2,r2,#1

cmp r2,#15

bcc delayloop0

pop

; nop

end

2、燒錄程式,效果圖如下

STM彙編程式設計

所謂啟動,一般來說就是指我們下好程式後,重啟晶元時,sysclk的第4個上公升沿,boot引腳的值將被鎖存。使用者可以通過設定 boot1 和 boot0 引腳的狀態,來選擇在復位後的啟動模式。啟動模式 內建sram embedded memory flash system memory和sram的...

STM32彙編程式設計

1.實驗環境 1.野火stm32指南者 stm32f103vet6 2.keil5 2.環境搭建新建工程 新增原始檔 s 連線開發板,開始debug 生成的hex檔案 原始碼led0 equ 0x40010c00 rcc apb2enr equ 0x40021018 gpioa crh equ 0x...

幾個簡單的stm32匯程式設計序

例1,用組合語言完成1 10的加法 stack top equ 0x00002000 sp初始值,常數 area reset,code dcd stack top 棧頂 msp的 dcd start 復位向量 entry 指示程式從這裡開始執行start 初始化暫存器 mov r0,10 載入迴圈變...