用汇编语言实现STM32的LED和USART

来源:互联网 发布:java输出三角形 编辑:程序博客网 时间:2024/06/07 14:57
;;;;AREA RESET, DATA, READONLYDCD 0x20000000 + 1024 ;0DCDUserMain ;1DCD 0 ;NMI 2DCD 0 ;HardFault 3DCD 0 ;MemManage 4DCD 0 ; 5DCD 0 ; 6DCD 0 ; 7DCD 0 ; 8DCD 0 ; 9DCD 0 ; 10DCD 0 ; 11DCD 0 ; 12DCD 0 ; 13DCD 0 ; 14DCD SysTick_Handler ; 15HelloStringDCB "Hello Word\n"HelloEndHexTableDCB "0123456789ABCDEF"HexTableEndGPIOF_BASEEQU0x40021400GPIOF_MODEREQUGPIOF_BASE + 0x00GPIOF_OTYPEREQUGPIOF_BASE + 0x04GPIOF_OSPEEDREQUGPIOF_BASE + 0x08GPIOF_PUPDREQUGPIOF_BASE + 0x0CGPIOF_IDREQUGPIOF_BASE + 0x10GPIOF_ODR EQUGPIOF_BASE + 0x14GPIOF_BSRREQUGPIOF_BASE + 0x18GPIOF_AFRLEQUGPIOF_BASE + 0x20GPIOF_AFRHEQUGPIOF_BASE + 0x24GPIOA_BASE EQU0x40020000GPIOA_MODEREQUGPIOA_BASE + 0x00GPIOA_OTYPEREQUGPIOA_BASE + 0x04GPIOA_OSPEEDREQUGPIOA_BASE + 0x08GPIOA_PUPDREQUGPIOA_BASE + 0x0CGPIOA_IDREQUGPIOA_BASE + 0x10GPIOA_ODREQUGPIOA_BASE + 0x14GPIOA_BSRREQUGPIOA_BASE + 0x18GPIOA_AFRLEQUGPIOA_BASE + 0x20GPIOA_AFRHEQUGPIOA_BASE + 0x24USART1_BASEEQU0x40011000USART1_SREQUUSART1_BASE + 0x00USART1_DREQUUSART1_BASE + 0x04USART1_BRREQUUSART1_BASE + 0x08USART1_CR1EQUUSART1_BASE + 0x0CUSART1_CR2EQUUSART1_BASE + 0x10USART1_CR3EQUUSART1_BASE + 0x14USART1_GTPREQUUSART1_BASE + 0x18RCC_BASEEQU0x40023800RCC_CREQURCC_BASE + 0x00RCC_PLLCFGREQURCC_BASE + 0x04RCC_CFGREQURCC_BASE + 0x08RCC_CIREQURCC_BASE + 0x0CRCC_AHB1RSTREQURCC_BASE + 0x10RCC_AHB2RSTREQURCC_BASE + 0x14RCC_AHB3RSTREQURCC_BASE + 0x18RCC_APB1RSTREQURCC_BASE + 0x20RCC_APB2RRSTEQURCC_BASE + 0x24RCC_AHB1ENREQURCC_BASE + 0x30RCC_AHB2ENREQURCC_BASE + 0x34RCC_AHB3ENREQURCC_BASE + 0x38RCC_APB1ENREQURCC_BASE + 0x40RCC_APB2ENREQURCC_BASE + 0x44SYSTICK_CTRLEQU0xE000E010SYSTICK_LOADEQU0xE000E014SYSTICK_VALEQU0xE000E018THUMBPRESERVE8AREA _UserMain, CODE, READONLYENTRYUserMainPROCEXPORT UserMainLDR R0, =LedConfigBLX R0LDR R0, =SysTickConfigBLX R0MOV R10, #200LDR R0, =UartConfigBLX R0SendStringLDR R0, =HelloStringLDR R1, =HelloEnd - HelloStringBL UartSendStringMOV R0, #0xABBL UartSendHexB SendStringENDPUartSendHex; R0PUSH {R1 - R3,LR}LDR R3, =HexTableMOV R4, R0LDR R2, =28HexLoopLSR R1, R4, R2AND R1, #0x0FLDR R0, [R3, R1]PUSH {R1-R2}BL UartSendBytePOP {R1-R2}CMP R2, #0BEQ HexExitSUB R2, #4B HexLoopHexExitPOP {R1-R3, PC}UartConfigPUSH {LR}LDR R0, =RCC_AHB1ENRLDR R1, [R0]ORR R1, #0x01STR R1, [R0]LDR R0, =RCC_APB2ENRLDR R1, [R0]ORR R1, #0x10STR R1, [R0]LDR R0, =GPIOA_MODERLDR R1, [R0]BIC R1, #0x3C0000ORR R1, #0x280000STR R1, [R0]LDR R0, =GPIOA_OTYPERLDR R1, [R0]BIC R1, #0x600STR R1, [R0]LDR R0, =GPIOA_OSPEEDRLDR R1, [R0]ORR R1, #0x3C0000STR R1, [R0]LDR R0, =GPIOA_PUPDRLDR R1, [R0]BIC R1, #0x3C0000ORR R1, #0x140000STR R1, [R0]LDR R0, =GPIOA_AFRHLDR R1, [R0]BIC R1, #0xFF0ORR R1, #0x770STR R1, [R0]LDR R0, =USART1_CR1LDR R1, [R0]MOV R1, #0ORR R1, #0x08STR R1, [R0]LDR R0, =USART1_CR2MOV R1, #0STR R1, [R0]LDR R0, =USART1_CR3MOV R1, #0STR R1, [R0]LDR R0, =USART1_BRRLDR R1, =0x682STR R1, [R0]LDR R0, =USART1_CR1LDR R1, [R0]ORR R1, #0x2000STR R1, [R0]POP {PC}UartSendByte; R0PUSH {LR}SendWaitLDR R2, =USART1_SRLDR R1, [R2]TST R1, #0x80BEQ SendWaitLDR R2, =USART1_DRSTR R0, [R2]POP {PC}UartSendString; R0 R1PUSH {LR}MOV R2, R0StringLoopCMP R1, #0BEQ SendExitLDRB R0, [R2]PUSH {R1, R2}BL UartSendBytePOP {R1, R2}SUB R1, #1ADD R2, #1B StringLoopSendExitPOP {PC}SysTickConfigPUSH {LR}LDR R0, =SYSTICK_LOADLDR R1, =1999STR R1, [R0]LDR R0, =SYSTICK_VALLDR R1, =0STR R1, [R0]LDR R0, =SYSTICK_CTRLLDR R1, [R0]BIC R1, #0x04ORR R1, #0x03STR R1, [R0]POP {PC}LedConfigPUSH {LR}LDR R0, =RCC_AHB1ENRLDR R1, [R0]ORR R1, #0x20STR R1, [R0]LDR R0, =GPIOF_MODERLDR R1, [R0]BIC R1, #0x3C0000ORR R1, #0x140000STR R1, [R0]LDR R0, =GPIOF_OTYPERLDR R1, [R0]BIC R1, #0x600STR R1, [R0]LDR R0, =GPIOF_OSPEEDRLDR R1, [R0]ORR R1, #0x3C0000STR R1, [R0]LDR R0, =GPIOF_PUPDRLDR R1, [R0]BIC R1, #0x3C0000ORR R1, #0x140000STR R1, [R0]LDR R0, =GPIOF_BSRRLDR R1, [R0]ORR R1, #0x600STR R1, [R0]POP{PC}SysTick_Handler PROCEXPORT SysTick_HandlerPUSH {LR}CMP R10, #0BNE ExitLDR R0, =GPIOF_ODRLDR R1, [R0]EOR R1, #0x600STR R1, [R0]MOV R10, #200POP {PC}ExitSUB R10, #1POP{PC}ENDPEND

0 0