;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; LED 闪烁+时钟配置 ;;LED1 闪烁频率1Hz,LED2 闪烁频率2Hz,LED3 闪烁频率4Hz ;;基于状态转换图,S1->S6 六种状态 ;;2011-5-4 by 追梦 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BIT5 EQU 0X00000020 BIT8 EQU 0X00000100 BIT9 EQU 0X00000200 BIT10 EQU 0X00000400 LED1 EQU BIT8 ;LED1--PD.8 LED2 EQU BIT9 ;LED2--PD.9 LED3 EQU BIT10 ;LED3--PD.10 GPIOD EQU 0X40011400 ;GPIOD 地址 GPIOD_CRL EQU 0X40011400 ;低配置寄存器 GPIOD_CRH EQU 0X40011404 ;高配置寄存器 GPIOD_ODR EQU 0X4001140C ;输出,偏移地址0Ch GPIOD_BSRR EQU 0X40011410 ;低置位,高清除偏移地址10h GPIOD_BRR EQU 0X40011414 ;清除,偏移地址14h IOPDEN EQU BIT5 ;GPIOD 使能位 RCC_APB2ENR EQU 0X40021018 STACK_TOP EQU 0X20002000 AREA RESET,CODE,READONLY DCD STACK_TOP ;MSP 主堆栈指针 DCD START ;复位,PC 初始值 ENTRY ;指示开始执行 START BL.W RCC_CONFIG_72MHZ LDR R1,=RCC_APB2ENR LDR R0,[R1] ;读 LDR R2,=IOPDEN ORR R0,R2 ;改 STR R0,[R1] ;写,使能GPIOD 时钟 ;LED1--PD.8 推挽输出,50MHz ;LED2--PD.9 推挽输出,50MHz ;LED3--PD.10 推挽输出,50MHz MOV R0,#0x333 LDR R1,=GPIOD_CRH ;PD.8\9\10 均在高寄存器 STR R0,[R1] NOP NOP LDR R1,=GPIOD_ODR LDR R2,=0x00000F00 MOV R3,#1 LOOP STR R2,[R1] MOV R0,#1125 ;1125/9=125ms BL.W DELAY_NMS EOR R2,#LED3 ;翻转LED3 ADD R3,#1 ;计数加 1 CMP R3,#1 BEQ STATE1 CMP R3,#3 BEQ STATE2 CMP R3,#5 BEQ STATE3 CMP R3,#7 BEQ STATE4 CMP R3,#8 BEQ STATE5 B GOON STATE1 ;状态 1 EOR R2,#LED1 EOR R2,#LED2 B GOON STATE2 ;状态 2 EOR R2,#LED2 B GOON STATE3 ;状态 3 EOR R2,#LED1 EOR R2,#LED2 B GOON STATE4 ;状态 4 EOR R2,#LED2 B GOON STATE5 ;状态 5 MOV R3,#0 GOON B LOOP ;继续循环 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;RCC 时钟配置 HCLK=72MHz=HSE*9 ;;;PCLK2=HCLK PCLK1=HCLK/2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RCC_CONFIG_72MHZ LDR R1,=0X40021000...