stm32 汇编点灯原子mini板

先贴上源码





/*RCC */
.equ        RCC_BASE,                 0x40021000
.equ        RCC_CR,                         (RCC_BASE + 0x00)
.equ        RCC_CFGR,        (RCC_BASE + 0x04)
.equ        RCC_APB2ENR,     (RCC_BASE + 0x18)

/*GPIOA */
.equ        GPIOA_BASE,      0x40010800
.equ        GPIOA_CRL,       (GPIOA_BASE + 0x00)
.equ        GPIOA_CRH,       (GPIOA_BASE + 0x04)
.equ        GPIOA_ODR,       (GPIOA_BASE + 0x0C)

/*GPIOB */
.equ        GPIOB_BASE,      0x40010C00
.equ        GPIOB_CRL,       (GPIOB_BASE + 0x00)
.equ        GPIOB_ODR,       (GPIOB_BASE + 0x0C)


/*GPIOD */
.equ        GPIOD_BASE,      0x40011400
.equ        GPIOD_CRL,       (GPIOD_BASE + 0x00)
.equ        GPIOD_CRH,       (GPIOD_BASE + 0x04)
.equ        GPIOD_ODR,       (GPIOD_BASE + 0x0C)


/*FLASH*/
.equ        FLASH_ACR,             0x40022000

.equ        Bit0,            0x00000001
.equ        Bit1,            0x00000002
.equ        Bit2,            0x00000004
.equ        Bit3,            0x00000008
.equ        Bit4,            0x00000010
.equ        Bit5,            0x00000020
.equ        Bit6,            0x00000040
.equ        Bit7,            0x00000080
.equ        Bit8,            0x00000100
.equ        Bit9,            0x00000200
.equ        Bit10,           0x00000400
.equ        Bit11,           0x00000800
.equ        Bit12,           0x00001000
.equ        Bit13,           0x00002000
.equ        Bit14,           0x00004000
.equ        Bit15,           0x00008000
.equ        Bit16,           0x00010000
.equ        Bit17,           0x00020000
.equ        Bit18,           0x00040000
.equ        Bit19,           0x00080000
.equ        Bit20,           0x00100000
.equ        Bit21,           0x00200000
.equ        Bit22,           0x00400000
.equ        Bit23,           0x00800000
.equ        Bit24,           0x01000000
.equ        Bit25,           0x02000000
.equ        Bit26,           0x04000000
.equ        Bit27,           0x08000000
.equ        Bit28,           0x10000000
.equ        Bit29,           0x20000000
.equ        Bit30,           0x40000000
.equ        Bit31,           0x80000000

.equ STACK_TOP,    0x20000400
.set resettt, 0x50
.syntax unified
.cpu cortex-m3
.fpu softvfp
.thumb
.global _start
.text


_start:
  .word  resettt
  .word  Reset_Handler
  .word  NMI_Handler
  .word  HardFault_Handler
  .word  MemManage_Handler
  .word  BusFault_Handler
  .word  UsageFault_Handler
  .word  0
  .word  0
  .word  0
  .word  0
  .word  SVC_Handler
  .word  DebugMon_Handler
  .word  0
  .word  PendSV_Handler
  .word  SysTick_Handler
  .word  WWDG_IRQHandler
  .word  PVD_IRQHandler
  .word  TAMPER_IRQHandler
  .word  RTC_IRQHandler
  .word  FLASH_IRQHandler
  .word  RCC_IRQHandler
  .word  EXTI0_IRQHandler
  .word  EXTI1_IRQHandler
  .word  EXTI2_IRQHandler
  .word  EXTI3_IRQHandler
  .word  EXTI4_IRQHandler
  .word  DMA1_Channel1_IRQHandler
  .word  DMA1_Channel2_IRQHandler
  .word  DMA1_Channel3_IRQHandler
  .word  DMA1_Channel4_IRQHandler
  .word  DMA1_Channel5_IRQHandler
  .word  DMA1_Channel6_IRQHandler
  .word  DMA1_Channel7_IRQHandler
  .word  ADC1_2_IRQHandler
  .word  USB_HP_CAN1_TX_IRQHandler
  .word  USB_LP_CAN1_RX0_IRQHandler
  .word  CAN1_RX1_IRQHandler
  .word  CAN1_SCE_IRQHandler
  .word  EXTI9_5_IRQHandler
  .word  TIM1_BRK_IRQHandler
  .word  TIM1_UP_IRQHandler
  .word  TIM1_TRG_COM_IRQHandler
  .word  TIM1_CC_IRQHandler
  .word  TIM2_IRQHandler
  .word  TIM3_IRQHandler
  .word  TIM4_IRQHandler
  .word  I2C1_EV_IRQHandler
  .word  I2C1_ER_IRQHandler
  .word  I2C2_EV_IRQHandler
  .word  I2C2_ER_IRQHandler
  .word  SPI1_IRQHandler
  .word  SPI2_IRQHandler
  .word  USART1_IRQHandler
  .word  USART2_IRQHandler
  .word  USART3_IRQHandler
  .word  EXTI15_10_IRQHandler
  .word  RTCAlarm_IRQHandler
  .word  USBWakeUp_IRQHandler
  .word  TIM8_BRK_IRQHandler
  .word  TIM8_UP_IRQHandler
  .word  TIM8_TRG_COM_IRQHandler
  .word  TIM8_CC_IRQHandler
  .word  ADC3_IRQHandler
  .word  FSMC_IRQHandler
  .word  SDIO_IRQHandler
  .word  TIM5_IRQHandler
  .word  SPI3_IRQHandler
  .word  UART4_IRQHandler
  .word  UART5_IRQHandler
  .word  TIM6_IRQHandler
  .word  TIM7_IRQHandler
  .word  DMA2_Channel1_IRQHandler
  .word  DMA2_Channel2_IRQHandler
  .word  DMA2_Channel3_IRQHandler
  .word  DMA2_Channel4_5_IRQHandler
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0
  .word  0

	.globl	Reset_Handler
	.type	Reset_Handler, %function
	
Reset_Handler: 
		b reset
 
reset:
		/*External clk RCC->CR |= Bit16*/
        LDR                R0, =RCC_CR
        LDR                R1, [R0]
        ORR                R1, #Bit16
        STR                R1, [R0]
        /*check CLK ready*/
RCC_CLK_NOTOK: 
        LDR                R1, [R0]
        ANDS        R1, #Bit17
        BEQ                RCC_CLK_NOTOK
        LDR                R1, [R0]
        ORR                R1, #Bit17
        STR                R1, [R0]
        
        /*FLASH access speed*/
        LDR                R0, =FLASH_ACR
        MOV                R1, #0X00000032
        STR                R1, [R0]
        
		/*clk pll*/
        LDR                R0, =RCC_CFGR
        LDR                R1, [R0]
        
        /*HCLK 2 div*/
        ORR                R1, #Bit10
        
        /*9 bei [21:18]-->0111*/
        ORR                R1, #Bit18
        ORR                R1, #Bit19
        ORR                R1, #Bit20

        /* HSE PLL source*/
        ORR                R1, #Bit16
        STR                R1, [R0]
        
        /*start pll*/
        LDR                R0, =RCC_CR
        LDR                R1, [R0]
        ORR                R1, #Bit24
        STR                R1, [R0]
        
        /*wait pll ok*/
RCC_PLL_NOTOK:        
        LDR                R1, [R0]
        ANDS        R1, #Bit25
        BEQ                RCC_PLL_NOTOK
        
        /*Set PLL as system clk*/
        LDR                R0, =RCC_CFGR
        LDR                R1, [R0]
        ORR                R1, #Bit1
        STR                R1, [R0]

        /*is use PLL*/
        MOV                R2, #0X02
RCC_PLL_NOTRDY:        
        LDR                R1, [R0]
        LSR                R1, R1, #2
        AND                R1, #0X03
        CMP                R1, R2
        BNE                RCC_PLL_NOTRDY
        

        /*start APB2 clk*/
        LDR                R0, =RCC_APB2ENR
        LDR                R1, [R0]
        ORR                R1, #Bit2  /*GPIOA*/
		ORR                R1, #Bit4  /*GPIOD*/
        STR                R1, [R0]
        
        /*config PA ,PA8*/
        LDR                R0, =GPIOA_CRH
        LDR                R1, [R0]
        LDR                R2, =0XFFFFFFF0
        AND                R1, R2
        MOV                R2, #0X03
        ORR                R1, R1, R2, LSL #0
        STR                R1, [R0]
		

		
LED0_start:        
        /*led set*/      
        LDR                R0, =GPIOA_ODR
        LDR                R1, [R0]
        ORR                R1, #0
        STR                R1, [R0]


        /*xunhuan*/
deadloop:	
		
        b deadloop        
  
Default_Handler:
Infinite_Loop:
  b  Infinite_Loop
  
  
  .weak Reset_Handler 
  .thumb_set NMI_Handler,Default_Handler
  
  .weak  NMI_Handler
  .thumb_set NMI_Handler,Default_Handler
  
  .weak  HardFault_Handler
  .thumb_set HardFault_Handler,Default_Handler
  
  .weak  MemManage_Handler
  .thumb_set MemManage_Handler,Default_Handler
  
  .weak  BusFault_Handler
  .thumb_set BusFault_Handler,Default_Handler

  .weak  UsageFault_Handler
  .thumb_set UsageFault_Handler,Default_Handler

  .weak  SVC_Handler
  .thumb_set SVC_Handler,Default_Handler

  .weak  DebugMon_Handler
  .thumb_set DebugMon_Handler,Default_Handler

  .weak  PendSV_Handler
  .thumb_set PendSV_Handler,Default_Handler

  .weak  SysTick_Handler
  .thumb_set SysTick_Handler,Default_Handler

  .weak  WWDG_IRQHandler
  .thumb_set WWDG_IRQHandler,Default_Handler

  .weak  PVD_IRQHandler
  .thumb_set PVD_IRQHandler,Default_Handler

  .weak  TAMPER_IRQHandler
  .thumb_set TAMPER_IRQHandler,Default_Handler

  .weak  RTC_IRQHandler
  .thumb_set RTC_IRQHandler,Default_Handler

  .weak  FLASH_IRQHandler
  .thumb_set FLASH_IRQHandler,Default_Handler

  .weak  RCC_IRQHandler
  .thumb_set RCC_IRQHandler,Default_Handler

  .weak  EXTI0_IRQHandler
  .thumb_set EXTI0_IRQHandler,Default_Handler

  .weak  EXTI1_IRQHandler
  .thumb_set EXTI1_IRQHandler,Default_Handler

  .weak  EXTI2_IRQHandler
  .thumb_set EXTI2_IRQHandler,Default_Handler

  .weak  EXTI3_IRQHandler
  .thumb_set EXTI3_IRQHandler,Default_Handler

  .weak  EXTI4_IRQHandler
  .thumb_set EXTI4_IRQHandler,Default_Handler

  .weak  DMA1_Channel1_IRQHandler
  .thumb_set DMA1_Channel1_IRQHandler,Default_Handler

  .weak  DMA1_Channel2_IRQHandler
  .thumb_set DMA1_Channel2_IRQHandler,Default_Handler

  .weak  DMA1_Channel3_IRQHandler
  .thumb_set DMA1_Channel3_IRQHandler,Default_Handler

  .weak  DMA1_Channel4_IRQHandler
  .thumb_set DMA1_Channel4_IRQHandler,Default_Handler

  .weak  DMA1_Channel5_IRQHandler
  .thumb_set DMA1_Channel5_IRQHandler,Default_Handler

  .weak  DMA1_Channel6_IRQHandler
  .thumb_set DMA1_Channel6_IRQHandler,Default_Handler

  .weak  DMA1_Channel7_IRQHandler
  .thumb_set DMA1_Channel7_IRQHandler,Default_Handler

  .weak  ADC1_2_IRQHandler
  .thumb_set ADC1_2_IRQHandler,Default_Handler

  .weak  USB_HP_CAN1_TX_IRQHandler
  .thumb_set USB_HP_CAN1_TX_IRQHandler,Default_Handler

  .weak  USB_LP_CAN1_RX0_IRQHandler
  .thumb_set USB_LP_CAN1_RX0_IRQHandler,Default_Handler

  .weak  CAN1_RX1_IRQHandler
  .thumb_set CAN1_RX1_IRQHandler,Default_Handler

  .weak  CAN1_SCE_IRQHandler
  .thumb_set CAN1_SCE_IRQHandler,Default_Handler

  .weak  EXTI9_5_IRQHandler
  .thumb_set EXTI9_5_IRQHandler,Default_Handler

  .weak  TIM1_BRK_IRQHandler
  .thumb_set TIM1_BRK_IRQHandler,Default_Handler

  .weak  TIM1_UP_IRQHandler
  .thumb_set TIM1_UP_IRQHandler,Default_Handler

  .weak  TIM1_TRG_COM_IRQHandler
  .thumb_set TIM1_TRG_COM_IRQHandler,Default_Handler

  .weak  TIM1_CC_IRQHandler
  .thumb_set TIM1_CC_IRQHandler,Default_Handler

  .weak  TIM2_IRQHandler
  .thumb_set TIM2_IRQHandler,Default_Handler

  .weak  TIM3_IRQHandler
  .thumb_set TIM3_IRQHandler,Default_Handler

  .weak  TIM4_IRQHandler
  .thumb_set TIM4_IRQHandler,Default_Handler

  .weak  I2C1_EV_IRQHandler
  .thumb_set I2C1_EV_IRQHandler,Default_Handler

  .weak  I2C1_ER_IRQHandler
  .thumb_set I2C1_ER_IRQHandler,Default_Handler

  .weak  I2C2_EV_IRQHandler
  .thumb_set I2C2_EV_IRQHandler,Default_Handler

  .weak  I2C2_ER_IRQHandler
  .thumb_set I2C2_ER_IRQHandler,Default_Handler

  .weak  SPI1_IRQHandler
  .thumb_set SPI1_IRQHandler,Default_Handler

  .weak  SPI2_IRQHandler
  .thumb_set SPI2_IRQHandler,Default_Handler

  .weak  USART1_IRQHandler
  .thumb_set USART1_IRQHandler,Default_Handler

  .weak  USART2_IRQHandler
  .thumb_set USART2_IRQHandler,Default_Handler

  .weak  USART3_IRQHandler
  .thumb_set USART3_IRQHandler,Default_Handler

  .weak  EXTI15_10_IRQHandler
  .thumb_set EXTI15_10_IRQHandler,Default_Handler

  .weak  RTCAlarm_IRQHandler
  .thumb_set RTCAlarm_IRQHandler,Default_Handler

  .weak  USBWakeUp_IRQHandler
  .thumb_set USBWakeUp_IRQHandler,Default_Handler

  .weak  TIM8_BRK_IRQHandler
  .thumb_set TIM8_BRK_IRQHandler,Default_Handler

  .weak  TIM8_UP_IRQHandler
  .thumb_set TIM8_UP_IRQHandler,Default_Handler

  .weak  TIM8_TRG_COM_IRQHandler
  .thumb_set TIM8_TRG_COM_IRQHandler,Default_Handler

  .weak  TIM8_CC_IRQHandler
  .thumb_set TIM8_CC_IRQHandler,Default_Handler

  .weak  ADC3_IRQHandler
  .thumb_set ADC3_IRQHandler,Default_Handler

  .weak  FSMC_IRQHandler
  .thumb_set FSMC_IRQHandler,Default_Handler

  .weak  SDIO_IRQHandler
  .thumb_set SDIO_IRQHandler,Default_Handler

  .weak  TIM5_IRQHandler
  .thumb_set TIM5_IRQHandler,Default_Handler

  .weak  SPI3_IRQHandler
  .thumb_set SPI3_IRQHandler,Default_Handler

  .weak  UART4_IRQHandler
  .thumb_set UART4_IRQHandler,Default_Handler

  .weak  UART5_IRQHandler
  .thumb_set UART5_IRQHandler,Default_Handler

  .weak  TIM6_IRQHandler
  .thumb_set TIM6_IRQHandler,Default_Handler

  .weak  TIM7_IRQHandler
  .thumb_set TIM7_IRQHandler,Default_Handler

  .weak  DMA2_Channel1_IRQHandler
  .thumb_set DMA2_Channel1_IRQHandler,Default_Handler

  .weak  DMA2_Channel2_IRQHandler
  .thumb_set DMA2_Channel2_IRQHandler,Default_Handler

  .weak  DMA2_Channel3_IRQHandler
  .thumb_set DMA2_Channel3_IRQHandler,Default_Handler

  .weak  DMA2_Channel4_5_IRQHandler
  .thumb_set DMA2_Channel4_5_IRQHandler,Default_Handler
  
  .end

对源文件进行编译的shell脚本

echo "start work"

arm-none-eabi-gcc -mthumb -mcpu=cortex-m3 -c -o start.o start.S

arm-none-eabi-ld -Ttext 0x8000000 -o start.out start.o

arm-none-eabi-objcopy -Oihex start.out start.hex

echo "everything ok"

主要分三步,第一根据编译器说明,加上必要的两个选项。第二没有连接脚本,直接连接。第三使用objcopy工具将.out文件转换为可执行的二进制hex文件。

使用stlink将HEX文件下载到单片机运行。

你可能感兴趣的:(stm32)