《STM32 汇编语言,LED闪烁+时钟配置.doc》由会员分享,可在线阅读,更多相关《STM32 汇编语言,LED闪烁+时钟配置.doc(6页珍藏版)》请在金锄头文库上搜索。
1、; LED闪烁+时钟配置;LED1闪烁频率1Hz,LED2闪烁频率2Hz,LED3闪烁频率4Hz;基于状态转换图,S1-S6六种状态 ;2011-5-4 by 追梦 ;BIT5 EQU 0X00000020BIT8 EQU 0X00000100BIT9 EQU 0X00000200BIT10 EQU 0X00000400LED1 EQU BIT8 ;LED1-PD.8LED2 EQU BIT9 ;LED2-PD.9LED3 EQU BIT10 ;LED3-PD.10GPIOD EQU 0X40011400 ;GPIOD 地址GPIOD_CRL EQU 0X40011400 ;低配置寄存器GPI
2、OD_CRH EQU 0X40011404 ;高配置寄存器GPIOD_ODR EQU 0X4001140C ;输出,偏移地址0ChGPIOD_BSRR EQU 0X40011410 ;低置位,高清除偏移地址10hGPIOD_BRR EQU 0X40011414 ;清除,偏移地址14hIOPDEN EQU BIT5 ;GPIOD使能位RCC_APB2ENR EQU 0X40021018STACK_TOP EQU 0X20002000 AREA RESET,CODE,READONLYDCD STACK_TOP ;MSP主堆栈指针DCD START ;复位,PC初始值ENTRY ;指示开始执行STA
3、RTBL.W RCC_CONFIG_72MHZLDR R1,=RCC_APB2ENRLDR R0,R1 ;读LDR R2,=IOPDENORR R0,R2;改STR R0,R1;写,使能GPIOD时钟;LED1-PD.8 推挽输出,50MHz;LED2-PD.9 推挽输出,50MHz;LED3-PD.10 推挽输出,50MHzMOV R0,#0x333LDR R1,=GPIOD_CRH ;PD.8910均在高寄存器STR R0,R1NOPNOPLDR R1,=GPIOD_ODRLDR R2,=0x00000F00MOV R3,#1LOOPSTR R2,R1MOV R0,#1125 ;1125/
4、9=125msBL.W DELAY_NMSEOR R2,#LED3 ;翻转LED3ADD R3,#1 ;计数加1CMP R3,#1BEQ STATE1CMP R3,#3BEQ STATE2CMP R3,#5BEQ STATE3CMP R3,#7BEQ STATE4CMP R3,#8BEQ STATE5B GOON STATE1 ;状态1EOR R2,#LED1EOR R2,#LED2B GOONSTATE2 ;状态2EOR R2,#LED2B GOONSTATE3 ;状态3EOR R2,#LED1EOR R2,#LED2B GOONSTATE4 ;状态4EOR R2,#LED2B GOONST
5、ATE5 ;状态5MOV R3,#0GOON B LOOP ;继续循环;RCC 时钟配置 HCLK=72MHz=HSE*9;PCLK2=HCLK PCLK1=HCLK/2;RCC_CONFIG_72MHZLDR R1,=0X40021000 ;RCC_CRLDR R0,R1LDR R2,=0X00010000 ;HSEONORR R0,R2STR R0,R1WAIT_HSE_RDYLDR R2,=0X00020000 ;HSERDYLDR R0,R1ANDS R0,R2CMP R0,#0BEQ WAIT_HSE_RDYLDR R1,=0X40022000 ;FLASH_ACRMOV R0,#0
6、X12STR R0,R1LDR R1,=0X40021004 ;RCC_CFGR时钟配置寄存器LDR R0,R1;PLL倍频系数,PCLK2,PCLK1分频设置;HSE 9倍频PCLK2=HCLK,PCLK1=HCLK/2;HCLK=72MHz 0x001D0400;HCLK=64MHz 0x00190400;HCLK=48MHz 0x00110400;HCLK=32MHz0x00090400;HCLK=24MHz0x00050400;HCLK=16MHz0x00010400LDR R2,=0x001D0400 ORR R0,R2STR R0,R1LDR R1,=0X40021000 ;RCC
7、_CR LDR R0,R1LDR R2,=0X01000000 ;PLLONORR R0,R2STR R0,R1WAIT_PLL_RDYLDR R2,=0X02000000 ;PLLRDYLDR R0,R1ANDS R0,R2CMP R0,#0BEQ WAIT_PLL_RDYLDR R1,=0X40021004 ;RCC_CFGRLDR R0,R1MOV R2,#0X02ORR R0,R2STR R0,R1WAIT_HCLK_USEPLLLDR R0,R1ANDS R0,#0X08CMP R0,#0X08BNE WAIT_HCLK_USEPLLBX LR ;RCC 时钟配置 HCLK=48MH
8、z=HSE*6;PCLK2=HCLK PCLK1=HCLK/2;RCC_CONFIG_48MHZLDR R1,=0X40021000 ;RCC_CRLDR R0,R1LDR R2,=0X00010000 ;HSEONORR R0,R2STR R0,R1WAIT_HSE_RDY1LDR R2,=0X00020000 ;HSERDYLDR R0,R1ANDS R0,R2CMP R0,#0BEQ WAIT_HSE_RDY1LDR R1,=0X40022000 ;FLASH_ACRMOV R0,#0X12STR R0,R1LDR R1,=0X40021004 ;RCC_CFGRLDR R0,R1;HS
9、E 6倍频 PCLK2=HCLK,PCLK1=HCLK/2LDR R2,=0X00110400 ORR R0,R2STR R0,R1LDR R1,=0X40021000 ;RCC_CR LDR R0,R1LDR R2,=0X01000000 ;PLLONORR R0,R2STR R0,R1WAIT_PLL_RDY1LDR R2,=0X02000000 ;PLLRDYLDR R0,R1ANDS R0,R2CMP R0,#0BEQ WAIT_PLL_RDY1LDR R1,=0X40021004 ;RCC_CFGRLDR R0,R1MOV R2,#0X02ORR R0,R2STR R0,R1WAIT
10、_HCLK_USEPLL1LDR R0,R1ANDS R0,#0X08CMP R0,#0X08BNE WAIT_HCLK_USEPLL1BX LR ;RCC 时钟配置 HCLK=24MHz=HSE*3;PCLK2=HCLK PCLK1=HCLK/2;RCC_CONFIG_24MHZLDR R1,=0X40021000 ;RCC_CRLDR R0,R1LDR R2,=0X00010000 ;HSEONORR R0,R2STR R0,R1WAIT_HSE_RDY2LDR R2,=0X00020000 ;HSERDYLDR R0,R1ANDS R0,R2CMP R0,#0BEQ WAIT_HSE_R
11、DY2LDR R1,=0X40022000 ;FLASH_ACRMOV R0,#0X12STR R0,R1LDR R1,=0X40021004 ;RCC_CFGRLDR R0,R1;HSE 3倍频PCLK2=HCLK,PCLK1=HCLK/2LDR R2,=0X00050400 ORR R0,R2STR R0,R1LDR R1,=0X40021000 ;RCC_CR LDR R0,R1LDR R2,=0X01000000 ;PLLONORR R0,R2STR R0,R1WAIT_PLL_RDY2LDR R2,=0X02000000 ;PLLRDYLDR R0,R1ANDS R0,R2CMP R0,#0BEQ WAIT_PLL_RDY2LDR R1,=0X4