汇编点灯
1.软硬件介绍
MCU:STM32F103xxx(72 MHz)
LED:PC13 管脚
编译器:Keil自带
功能: 对PC13外接的led进行控制闪烁
2.源码内容
;=================================================
; STM32F103 PC13 LED Blink (Pure Assembly)
;=================================================
AREA RESET, DATA, READONLY
EXPORT __Vectors
__Vectors
DCD StackTop ; MSP
DCD Reset_Handler ; Reset
AREA STACK, NOINIT, READWRITE, ALIGN=3
StackMem
SPACE 1024
StackTop
AREA FLASH, CODE, READONLY
THUMB
;------------------------------
; 寄存器地址定义
;------------------------------
RCC_APB2ENR EQU 0x40021018
GPIOC_CRH EQU 0x40011004
GPIOC_ODR EQU 0x4001100C
;------------------------------
; 复位入口
;------------------------------
Reset_Handler
; 1) 开启 GPIOC 时钟 (APB2ENR bit 4)
LDR R0, =RCC_APB2ENR
LDR R1, [R0] ;寄存器寻址读取寄存器里的数据到R1寄存器中
ORR R1, R1, #(1 << 4) ;对R1中的值bit4进行或运算后重新赋值给R1
STR R1, [R0] ;R1中的值写回R0指向的寄存器中
; 2) 配置 PC13 为输出 (CRH bits 20-23)
LDR R0, =GPIOC_CRH
LDR R1, [R0]
BIC R1, R1, #(0xF << 20) ; 清除 PC13
ORR R1, R1, #(0x3 << 20) ; 输出 50MHz
STR R1, [R0]
;------------------------------
; 主循环
;------------------------------
MainLoop
; LED ON (PC13 = 0)
LDR R0, =GPIOC_ODR
LDR R1, [R0]
BIC R1, R1, #(1 << 13) ;清除bit13的位
STR R1, [R0]
BL Delay
; LED OFF (PC13 = 1)
LDR R0, =GPIOC_ODR
LDR R1, [R0]
ORR R1, R1, #(1 << 13) ;bit13的位置为1
STR R1, [R0]
BL Delay
B MainLoop
;------------------------------
; 简单延时函数
;------------------------------
Delay
MOV R2, #500000
DelayLoop
SUBS R2, R2, #1
BNE DelayLoop
BX LR
END
3.环境部署和测试
将代码复制到keil中芯片的启动文件中;
在keil中编译生成执行文件;
连接板卡和pc;
设置keil中的对应烧录器的配置;
点击烧录并测试看现象;