mirror of https://github.com/ARMmbed/mbed-os.git
				
				
				
			[NUCLEO_L152RE] Move cmsis files in STM32L1 folder
							parent
							
								
									0780a16b8d
								
							
						
					
					
						commit
						1874247540
					
				| 
						 | 
				
			
			@ -0,0 +1,325 @@
 | 
			
		|||
; STM32L152RE Ultra Low Power High-density Devices vector table for MDK ARM_MICRO toolchain
 | 
			
		||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
			
		||||
; Copyright (c) 2014, STMicroelectronics
 | 
			
		||||
; All rights reserved.
 | 
			
		||||
;
 | 
			
		||||
; Redistribution and use in source and binary forms, with or without
 | 
			
		||||
; modification, are permitted provided that the following conditions are met:
 | 
			
		||||
;
 | 
			
		||||
; 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
;     this list of conditions and the following disclaimer.
 | 
			
		||||
; 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
;    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
;    and/or other materials provided with the distribution.
 | 
			
		||||
; 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
;    may be used to endorse or promote products derived from this software
 | 
			
		||||
;    without specific prior written permission.
 | 
			
		||||
;
 | 
			
		||||
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
			
		||||
 | 
			
		||||
; Amount of memory (in bytes) allocated for Stack
 | 
			
		||||
; Tailor this value to your application needs
 | 
			
		||||
; <h> Stack Configuration
 | 
			
		||||
;   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
 | 
			
		||||
; </h>
 | 
			
		||||
 | 
			
		||||
Stack_Size      EQU     0x00000400
 | 
			
		||||
 | 
			
		||||
                AREA    STACK, NOINIT, READWRITE, ALIGN=3
 | 
			
		||||
                EXPORT  __initial_sp
 | 
			
		||||
                
 | 
			
		||||
Stack_Mem       SPACE   Stack_Size
 | 
			
		||||
__initial_sp    EQU     0x20014000 ; Top of RAM (80 KB)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; <h> Heap Configuration
 | 
			
		||||
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
 | 
			
		||||
; </h>
 | 
			
		||||
 | 
			
		||||
Heap_Size       EQU     0x00000400
 | 
			
		||||
 | 
			
		||||
                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
 | 
			
		||||
                EXPORT  __heap_base
 | 
			
		||||
                EXPORT  __heap_limit
 | 
			
		||||
                
 | 
			
		||||
__heap_base
 | 
			
		||||
Heap_Mem        SPACE   Heap_Size
 | 
			
		||||
__heap_limit    EQU (__initial_sp - Stack_Size)
 | 
			
		||||
 | 
			
		||||
                PRESERVE8
 | 
			
		||||
                THUMB
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; Vector Table Mapped to Address 0 at Reset
 | 
			
		||||
                AREA    RESET, DATA, READONLY
 | 
			
		||||
                EXPORT  __Vectors
 | 
			
		||||
                EXPORT  __Vectors_End
 | 
			
		||||
                EXPORT  __Vectors_Size
 | 
			
		||||
 | 
			
		||||
__Vectors       DCD     __initial_sp              ; Top of Stack
 | 
			
		||||
                DCD     Reset_Handler             ; Reset Handler
 | 
			
		||||
                DCD     NMI_Handler               ; NMI Handler
 | 
			
		||||
                DCD     HardFault_Handler         ; Hard Fault Handler
 | 
			
		||||
                DCD     MemManage_Handler         ; MPU Fault Handler
 | 
			
		||||
                DCD     BusFault_Handler          ; Bus Fault Handler
 | 
			
		||||
                DCD     UsageFault_Handler        ; Usage Fault Handler
 | 
			
		||||
                DCD     0                         ; Reserved
 | 
			
		||||
                DCD     0                         ; Reserved
 | 
			
		||||
                DCD     0                         ; Reserved
 | 
			
		||||
                DCD     0                         ; Reserved
 | 
			
		||||
                DCD     SVC_Handler               ; SVCall Handler
 | 
			
		||||
                DCD     DebugMon_Handler          ; Debug Monitor Handler
 | 
			
		||||
                DCD     0                         ; Reserved
 | 
			
		||||
                DCD     PendSV_Handler            ; PendSV Handler
 | 
			
		||||
                DCD     SysTick_Handler           ; SysTick Handler
 | 
			
		||||
 | 
			
		||||
                ; External Interrupts
 | 
			
		||||
                DCD     WWDG_IRQHandler           ; Window Watchdog
 | 
			
		||||
                DCD     PVD_IRQHandler            ; PVD through EXTI Line detect
 | 
			
		||||
                DCD     TAMPER_STAMP_IRQHandler   ; Tamper and Time Stamp
 | 
			
		||||
                DCD     RTC_WKUP_IRQHandler       ; RTC Wakeup
 | 
			
		||||
                DCD     FLASH_IRQHandler          ; FLASH
 | 
			
		||||
                DCD     RCC_IRQHandler            ; RCC
 | 
			
		||||
                DCD     EXTI0_IRQHandler          ; EXTI Line 0
 | 
			
		||||
                DCD     EXTI1_IRQHandler          ; EXTI Line 1
 | 
			
		||||
                DCD     EXTI2_IRQHandler          ; EXTI Line 2
 | 
			
		||||
                DCD     EXTI3_IRQHandler          ; EXTI Line 3
 | 
			
		||||
                DCD     EXTI4_IRQHandler          ; EXTI Line 4
 | 
			
		||||
                DCD     DMA1_Channel1_IRQHandler  ; DMA1 Channel 1
 | 
			
		||||
                DCD     DMA1_Channel2_IRQHandler  ; DMA1 Channel 2
 | 
			
		||||
                DCD     DMA1_Channel3_IRQHandler  ; DMA1 Channel 3
 | 
			
		||||
                DCD     DMA1_Channel4_IRQHandler  ; DMA1 Channel 4
 | 
			
		||||
                DCD     DMA1_Channel5_IRQHandler  ; DMA1 Channel 5
 | 
			
		||||
                DCD     DMA1_Channel6_IRQHandler  ; DMA1 Channel 6
 | 
			
		||||
                DCD     DMA1_Channel7_IRQHandler  ; DMA1 Channel 7
 | 
			
		||||
                DCD     ADC1_IRQHandler           ; ADC1
 | 
			
		||||
                DCD     USB_HP_IRQHandler         ; USB High Priority
 | 
			
		||||
                DCD     USB_LP_IRQHandler         ; USB Low  Priority
 | 
			
		||||
                DCD     DAC_IRQHandler            ; DAC
 | 
			
		||||
                DCD     COMP_IRQHandler           ; COMP through EXTI Line
 | 
			
		||||
                DCD     EXTI9_5_IRQHandler        ; EXTI Line 9..5
 | 
			
		||||
                DCD     LCD_IRQHandler            ; LCD
 | 
			
		||||
                DCD     TIM9_IRQHandler           ; TIM9
 | 
			
		||||
                DCD     TIM10_IRQHandler          ; TIM10
 | 
			
		||||
                DCD     TIM11_IRQHandler          ; TIM11
 | 
			
		||||
                DCD     TIM2_IRQHandler           ; TIM2
 | 
			
		||||
                DCD     TIM3_IRQHandler           ; TIM3
 | 
			
		||||
                DCD     TIM4_IRQHandler           ; TIM4
 | 
			
		||||
                DCD     I2C1_EV_IRQHandler        ; I2C1 Event
 | 
			
		||||
                DCD     I2C1_ER_IRQHandler        ; I2C1 Error
 | 
			
		||||
                DCD     I2C2_EV_IRQHandler        ; I2C2 Event
 | 
			
		||||
                DCD     I2C2_ER_IRQHandler        ; I2C2 Error
 | 
			
		||||
                DCD     SPI1_IRQHandler           ; SPI1
 | 
			
		||||
                DCD     SPI2_IRQHandler           ; SPI2
 | 
			
		||||
                DCD     USART1_IRQHandler         ; USART1
 | 
			
		||||
                DCD     USART2_IRQHandler         ; USART2
 | 
			
		||||
                DCD     USART3_IRQHandler         ; USART3
 | 
			
		||||
                DCD     EXTI15_10_IRQHandler      ; EXTI Line 15..10
 | 
			
		||||
                DCD     RTC_Alarm_IRQHandler      ; RTC Alarm through EXTI Line
 | 
			
		||||
                DCD     USB_FS_WKUP_IRQHandler    ; USB FS Wakeup from suspend
 | 
			
		||||
                DCD     TIM6_IRQHandler           ; TIM6
 | 
			
		||||
                DCD     TIM7_IRQHandler           ; TIM7
 | 
			
		||||
                DCD     0                         ; Reserved
 | 
			
		||||
                DCD     TIM5_IRQHandler           ; TIM5
 | 
			
		||||
                DCD     SPI3_IRQHandler           ; SPI3
 | 
			
		||||
                DCD     UART4_IRQHandler          ; UART4
 | 
			
		||||
                DCD     UART5_IRQHandler          ; UART5
 | 
			
		||||
                DCD     DMA2_Channel1_IRQHandler  ; DMA2 Channel 1
 | 
			
		||||
                DCD     DMA2_Channel2_IRQHandler  ; DMA2 Channel 2
 | 
			
		||||
                DCD     DMA2_Channel3_IRQHandler  ; DMA2 Channel 3
 | 
			
		||||
                DCD     DMA2_Channel4_IRQHandler  ; DMA2 Channel 4
 | 
			
		||||
                DCD     DMA2_Channel5_IRQHandler  ; DMA2 Channel 5
 | 
			
		||||
                DCD     0                         ; Reserved
 | 
			
		||||
                DCD     COMP_ACQ_IRQHandler       ; Comparator Channel Acquisition
 | 
			
		||||
                
 | 
			
		||||
__Vectors_End
 | 
			
		||||
 | 
			
		||||
__Vectors_Size  EQU  __Vectors_End - __Vectors
 | 
			
		||||
 | 
			
		||||
                AREA    |.text|, CODE, READONLY
 | 
			
		||||
 | 
			
		||||
; Reset handler
 | 
			
		||||
Reset_Handler    PROC
 | 
			
		||||
                 EXPORT  Reset_Handler             [WEAK]
 | 
			
		||||
     IMPORT  __main
 | 
			
		||||
     IMPORT  SystemInit
 | 
			
		||||
                 LDR     R0, =SystemInit
 | 
			
		||||
                 BLX     R0
 | 
			
		||||
                 LDR     R0, =__main
 | 
			
		||||
                 BX      R0
 | 
			
		||||
                 ENDP
 | 
			
		||||
 | 
			
		||||
; Dummy Exception Handlers (infinite loops which can be modified)
 | 
			
		||||
 | 
			
		||||
NMI_Handler     PROC
 | 
			
		||||
                EXPORT  NMI_Handler                [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
HardFault_Handler\
 | 
			
		||||
                PROC
 | 
			
		||||
                EXPORT  HardFault_Handler          [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
MemManage_Handler\
 | 
			
		||||
                PROC
 | 
			
		||||
                EXPORT  MemManage_Handler          [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
BusFault_Handler\
 | 
			
		||||
                PROC
 | 
			
		||||
                EXPORT  BusFault_Handler           [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
UsageFault_Handler\
 | 
			
		||||
                PROC
 | 
			
		||||
                EXPORT  UsageFault_Handler         [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
SVC_Handler     PROC
 | 
			
		||||
                EXPORT  SVC_Handler                [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
DebugMon_Handler\
 | 
			
		||||
                PROC
 | 
			
		||||
                EXPORT  DebugMon_Handler           [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
PendSV_Handler  PROC
 | 
			
		||||
                EXPORT  PendSV_Handler             [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
SysTick_Handler PROC
 | 
			
		||||
                EXPORT  SysTick_Handler            [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
 | 
			
		||||
Default_Handler PROC
 | 
			
		||||
 | 
			
		||||
                EXPORT  WWDG_IRQHandler            [WEAK]
 | 
			
		||||
                EXPORT  PVD_IRQHandler             [WEAK]
 | 
			
		||||
                EXPORT  TAMPER_STAMP_IRQHandler    [WEAK]
 | 
			
		||||
                EXPORT  RTC_WKUP_IRQHandler        [WEAK]
 | 
			
		||||
                EXPORT  FLASH_IRQHandler           [WEAK]
 | 
			
		||||
                EXPORT  RCC_IRQHandler             [WEAK]
 | 
			
		||||
                EXPORT  EXTI0_IRQHandler           [WEAK]
 | 
			
		||||
                EXPORT  EXTI1_IRQHandler           [WEAK]
 | 
			
		||||
                EXPORT  EXTI2_IRQHandler           [WEAK]
 | 
			
		||||
                EXPORT  EXTI3_IRQHandler           [WEAK]
 | 
			
		||||
                EXPORT  EXTI4_IRQHandler           [WEAK]
 | 
			
		||||
                EXPORT  DMA1_Channel1_IRQHandler   [WEAK]
 | 
			
		||||
                EXPORT  DMA1_Channel2_IRQHandler   [WEAK]
 | 
			
		||||
                EXPORT  DMA1_Channel3_IRQHandler   [WEAK]
 | 
			
		||||
                EXPORT  DMA1_Channel4_IRQHandler   [WEAK]
 | 
			
		||||
                EXPORT  DMA1_Channel5_IRQHandler   [WEAK]
 | 
			
		||||
                EXPORT  DMA1_Channel6_IRQHandler   [WEAK]
 | 
			
		||||
                EXPORT  DMA1_Channel7_IRQHandler   [WEAK]
 | 
			
		||||
                EXPORT  ADC1_IRQHandler            [WEAK]
 | 
			
		||||
                EXPORT  USB_HP_IRQHandler          [WEAK]
 | 
			
		||||
                EXPORT  USB_LP_IRQHandler          [WEAK]
 | 
			
		||||
                EXPORT  DAC_IRQHandler             [WEAK]
 | 
			
		||||
                EXPORT  COMP_IRQHandler            [WEAK]
 | 
			
		||||
                EXPORT  EXTI9_5_IRQHandler         [WEAK]
 | 
			
		||||
                EXPORT  LCD_IRQHandler             [WEAK]
 | 
			
		||||
                EXPORT  TIM9_IRQHandler            [WEAK]
 | 
			
		||||
                EXPORT  TIM10_IRQHandler           [WEAK]
 | 
			
		||||
                EXPORT  TIM11_IRQHandler           [WEAK]
 | 
			
		||||
                EXPORT  TIM2_IRQHandler            [WEAK]
 | 
			
		||||
                EXPORT  TIM3_IRQHandler            [WEAK]
 | 
			
		||||
                EXPORT  TIM4_IRQHandler            [WEAK]
 | 
			
		||||
                EXPORT  I2C1_EV_IRQHandler         [WEAK]
 | 
			
		||||
                EXPORT  I2C1_ER_IRQHandler         [WEAK]
 | 
			
		||||
                EXPORT  I2C2_EV_IRQHandler         [WEAK]
 | 
			
		||||
                EXPORT  I2C2_ER_IRQHandler         [WEAK]
 | 
			
		||||
                EXPORT  SPI1_IRQHandler            [WEAK]
 | 
			
		||||
                EXPORT  SPI2_IRQHandler            [WEAK]
 | 
			
		||||
                EXPORT  USART1_IRQHandler          [WEAK]
 | 
			
		||||
                EXPORT  USART2_IRQHandler          [WEAK]
 | 
			
		||||
                EXPORT  USART3_IRQHandler          [WEAK]
 | 
			
		||||
                EXPORT  EXTI15_10_IRQHandler       [WEAK]
 | 
			
		||||
                EXPORT  RTC_Alarm_IRQHandler       [WEAK]
 | 
			
		||||
                EXPORT  USB_FS_WKUP_IRQHandler     [WEAK]
 | 
			
		||||
                EXPORT  TIM6_IRQHandler            [WEAK]
 | 
			
		||||
                EXPORT  TIM7_IRQHandler            [WEAK]
 | 
			
		||||
                EXPORT  TIM5_IRQHandler            [WEAK]                                
 | 
			
		||||
                EXPORT  SPI3_IRQHandler            [WEAK]
 | 
			
		||||
                EXPORT  UART4_IRQHandler           [WEAK]
 | 
			
		||||
                EXPORT  UART5_IRQHandler           [WEAK]
 | 
			
		||||
                EXPORT  DMA2_Channel1_IRQHandler   [WEAK]
 | 
			
		||||
                EXPORT  DMA2_Channel2_IRQHandler   [WEAK]
 | 
			
		||||
                EXPORT  DMA2_Channel3_IRQHandler   [WEAK]
 | 
			
		||||
                EXPORT  DMA2_Channel4_IRQHandler   [WEAK]
 | 
			
		||||
                EXPORT  DMA2_Channel5_IRQHandler   [WEAK]
 | 
			
		||||
                EXPORT  COMP_ACQ_IRQHandler        [WEAK]
 | 
			
		||||
 | 
			
		||||
WWDG_IRQHandler
 | 
			
		||||
PVD_IRQHandler
 | 
			
		||||
TAMPER_STAMP_IRQHandler
 | 
			
		||||
RTC_WKUP_IRQHandler
 | 
			
		||||
FLASH_IRQHandler
 | 
			
		||||
RCC_IRQHandler
 | 
			
		||||
EXTI0_IRQHandler
 | 
			
		||||
EXTI1_IRQHandler
 | 
			
		||||
EXTI2_IRQHandler
 | 
			
		||||
EXTI3_IRQHandler
 | 
			
		||||
EXTI4_IRQHandler
 | 
			
		||||
DMA1_Channel1_IRQHandler
 | 
			
		||||
DMA1_Channel2_IRQHandler
 | 
			
		||||
DMA1_Channel3_IRQHandler
 | 
			
		||||
DMA1_Channel4_IRQHandler
 | 
			
		||||
DMA1_Channel5_IRQHandler
 | 
			
		||||
DMA1_Channel6_IRQHandler
 | 
			
		||||
DMA1_Channel7_IRQHandler
 | 
			
		||||
ADC1_IRQHandler
 | 
			
		||||
USB_HP_IRQHandler
 | 
			
		||||
USB_LP_IRQHandler
 | 
			
		||||
DAC_IRQHandler
 | 
			
		||||
COMP_IRQHandler
 | 
			
		||||
EXTI9_5_IRQHandler
 | 
			
		||||
LCD_IRQHandler
 | 
			
		||||
TIM9_IRQHandler
 | 
			
		||||
TIM10_IRQHandler
 | 
			
		||||
TIM11_IRQHandler
 | 
			
		||||
TIM2_IRQHandler
 | 
			
		||||
TIM3_IRQHandler
 | 
			
		||||
TIM4_IRQHandler
 | 
			
		||||
I2C1_EV_IRQHandler
 | 
			
		||||
I2C1_ER_IRQHandler
 | 
			
		||||
I2C2_EV_IRQHandler
 | 
			
		||||
I2C2_ER_IRQHandler
 | 
			
		||||
SPI1_IRQHandler
 | 
			
		||||
SPI2_IRQHandler
 | 
			
		||||
USART1_IRQHandler
 | 
			
		||||
USART2_IRQHandler
 | 
			
		||||
USART3_IRQHandler
 | 
			
		||||
EXTI15_10_IRQHandler
 | 
			
		||||
RTC_Alarm_IRQHandler
 | 
			
		||||
USB_FS_WKUP_IRQHandler
 | 
			
		||||
TIM6_IRQHandler
 | 
			
		||||
TIM7_IRQHandler
 | 
			
		||||
TIM5_IRQHandler
 | 
			
		||||
SPI3_IRQHandler
 | 
			
		||||
UART4_IRQHandler
 | 
			
		||||
UART5_IRQHandler
 | 
			
		||||
DMA2_Channel1_IRQHandler
 | 
			
		||||
DMA2_Channel2_IRQHandler
 | 
			
		||||
DMA2_Channel3_IRQHandler
 | 
			
		||||
DMA2_Channel4_IRQHandler
 | 
			
		||||
DMA2_Channel5_IRQHandler
 | 
			
		||||
COMP_ACQ_IRQHandler
 | 
			
		||||
 | 
			
		||||
                B       .
 | 
			
		||||
 | 
			
		||||
                ENDP
 | 
			
		||||
 | 
			
		||||
                ALIGN
 | 
			
		||||
                END
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,45 @@
 | 
			
		|||
; Scatter-Loading Description File
 | 
			
		||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
			
		||||
; Copyright (c) 2014, STMicroelectronics
 | 
			
		||||
; All rights reserved.
 | 
			
		||||
;
 | 
			
		||||
; Redistribution and use in source and binary forms, with or without
 | 
			
		||||
; modification, are permitted provided that the following conditions are met:
 | 
			
		||||
;
 | 
			
		||||
; 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
;     this list of conditions and the following disclaimer.
 | 
			
		||||
; 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
;    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
;    and/or other materials provided with the distribution.
 | 
			
		||||
; 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
;    may be used to endorse or promote products derived from this software
 | 
			
		||||
;    without specific prior written permission.
 | 
			
		||||
;
 | 
			
		||||
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
			
		||||
 | 
			
		||||
; STM32L152RE: 512KB FLASH + 80KB SRAM
 | 
			
		||||
LR_IROM1 0x08000000 0x80000  {    ; load region size_region
 | 
			
		||||
 | 
			
		||||
  ER_IROM1 0x08000000 0x80000  {  ; load address = execution address
 | 
			
		||||
   *.o (RESET, +First)
 | 
			
		||||
   *(InRoot$$Sections)
 | 
			
		||||
   .ANY (+RO)
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ; 73 vectors = 292 bytes (0x124) to be reserved in RAM
 | 
			
		||||
  RW_IRAM1 (0x20000000+0x124) (0x14000-0x124)  {  ; RW data
 | 
			
		||||
   .ANY (+RW +ZI)
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,56 @@
 | 
			
		|||
/* mbed Microcontroller Library - stackheap
 | 
			
		||||
 * Setup a fixed single stack/heap memory model, 
 | 
			
		||||
 * between the top of the RW/ZI region and the stackpointer
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 * Copyright (c) 2014, STMicroelectronics
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif 
 | 
			
		||||
 | 
			
		||||
#include <rt_misc.h>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
extern char Image$$RW_IRAM1$$ZI$$Limit[];
 | 
			
		||||
 | 
			
		||||
extern __value_in_regs struct __initial_stackheap __user_setup_stackheap(uint32_t R0, uint32_t R1, uint32_t R2, uint32_t R3) {
 | 
			
		||||
    uint32_t zi_limit = (uint32_t)Image$$RW_IRAM1$$ZI$$Limit;
 | 
			
		||||
    uint32_t sp_limit = __current_sp();
 | 
			
		||||
 | 
			
		||||
    zi_limit = (zi_limit + 7) & ~0x7;    // ensure zi_limit is 8-byte aligned
 | 
			
		||||
 | 
			
		||||
    struct __initial_stackheap r;
 | 
			
		||||
    r.heap_base = zi_limit;
 | 
			
		||||
    r.heap_limit = sp_limit;
 | 
			
		||||
    return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif 
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,298 @@
 | 
			
		|||
; STM32L152RE Ultra Low Power High-density Devices vector table for MDK ARM_STD toolchain
 | 
			
		||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
			
		||||
; Copyright (c) 2014, STMicroelectronics
 | 
			
		||||
; All rights reserved.
 | 
			
		||||
;
 | 
			
		||||
; Redistribution and use in source and binary forms, with or without
 | 
			
		||||
; modification, are permitted provided that the following conditions are met:
 | 
			
		||||
;
 | 
			
		||||
; 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
;     this list of conditions and the following disclaimer.
 | 
			
		||||
; 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
;    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
;    and/or other materials provided with the distribution.
 | 
			
		||||
; 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
;    may be used to endorse or promote products derived from this software
 | 
			
		||||
;    without specific prior written permission.
 | 
			
		||||
;
 | 
			
		||||
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
			
		||||
 | 
			
		||||
__initial_sp    EQU     0x20014000 ; Top of RAM (80 KB)
 | 
			
		||||
 | 
			
		||||
                PRESERVE8
 | 
			
		||||
                THUMB
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
; Vector Table Mapped to Address 0 at Reset
 | 
			
		||||
                AREA    RESET, DATA, READONLY
 | 
			
		||||
                EXPORT  __Vectors
 | 
			
		||||
                EXPORT  __Vectors_End
 | 
			
		||||
                EXPORT  __Vectors_Size
 | 
			
		||||
 | 
			
		||||
__Vectors       DCD     __initial_sp              ; Top of Stack
 | 
			
		||||
                DCD     Reset_Handler             ; Reset Handler
 | 
			
		||||
                DCD     NMI_Handler               ; NMI Handler
 | 
			
		||||
                DCD     HardFault_Handler         ; Hard Fault Handler
 | 
			
		||||
                DCD     MemManage_Handler         ; MPU Fault Handler
 | 
			
		||||
                DCD     BusFault_Handler          ; Bus Fault Handler
 | 
			
		||||
                DCD     UsageFault_Handler        ; Usage Fault Handler
 | 
			
		||||
                DCD     0                         ; Reserved
 | 
			
		||||
                DCD     0                         ; Reserved
 | 
			
		||||
                DCD     0                         ; Reserved
 | 
			
		||||
                DCD     0                         ; Reserved
 | 
			
		||||
                DCD     SVC_Handler               ; SVCall Handler
 | 
			
		||||
                DCD     DebugMon_Handler          ; Debug Monitor Handler
 | 
			
		||||
                DCD     0                         ; Reserved
 | 
			
		||||
                DCD     PendSV_Handler            ; PendSV Handler
 | 
			
		||||
                DCD     SysTick_Handler           ; SysTick Handler
 | 
			
		||||
 | 
			
		||||
                ; External Interrupts
 | 
			
		||||
                DCD     WWDG_IRQHandler           ; Window Watchdog
 | 
			
		||||
                DCD     PVD_IRQHandler            ; PVD through EXTI Line detect
 | 
			
		||||
                DCD     TAMPER_STAMP_IRQHandler   ; Tamper and Time Stamp
 | 
			
		||||
                DCD     RTC_WKUP_IRQHandler       ; RTC Wakeup
 | 
			
		||||
                DCD     FLASH_IRQHandler          ; FLASH
 | 
			
		||||
                DCD     RCC_IRQHandler            ; RCC
 | 
			
		||||
                DCD     EXTI0_IRQHandler          ; EXTI Line 0
 | 
			
		||||
                DCD     EXTI1_IRQHandler          ; EXTI Line 1
 | 
			
		||||
                DCD     EXTI2_IRQHandler          ; EXTI Line 2
 | 
			
		||||
                DCD     EXTI3_IRQHandler          ; EXTI Line 3
 | 
			
		||||
                DCD     EXTI4_IRQHandler          ; EXTI Line 4
 | 
			
		||||
                DCD     DMA1_Channel1_IRQHandler  ; DMA1 Channel 1
 | 
			
		||||
                DCD     DMA1_Channel2_IRQHandler  ; DMA1 Channel 2
 | 
			
		||||
                DCD     DMA1_Channel3_IRQHandler  ; DMA1 Channel 3
 | 
			
		||||
                DCD     DMA1_Channel4_IRQHandler  ; DMA1 Channel 4
 | 
			
		||||
                DCD     DMA1_Channel5_IRQHandler  ; DMA1 Channel 5
 | 
			
		||||
                DCD     DMA1_Channel6_IRQHandler  ; DMA1 Channel 6
 | 
			
		||||
                DCD     DMA1_Channel7_IRQHandler  ; DMA1 Channel 7
 | 
			
		||||
                DCD     ADC1_IRQHandler           ; ADC1
 | 
			
		||||
                DCD     USB_HP_IRQHandler         ; USB High Priority
 | 
			
		||||
                DCD     USB_LP_IRQHandler         ; USB Low  Priority
 | 
			
		||||
                DCD     DAC_IRQHandler            ; DAC
 | 
			
		||||
                DCD     COMP_IRQHandler           ; COMP through EXTI Line
 | 
			
		||||
                DCD     EXTI9_5_IRQHandler        ; EXTI Line 9..5
 | 
			
		||||
                DCD     LCD_IRQHandler            ; LCD
 | 
			
		||||
                DCD     TIM9_IRQHandler           ; TIM9
 | 
			
		||||
                DCD     TIM10_IRQHandler          ; TIM10
 | 
			
		||||
                DCD     TIM11_IRQHandler          ; TIM11
 | 
			
		||||
                DCD     TIM2_IRQHandler           ; TIM2
 | 
			
		||||
                DCD     TIM3_IRQHandler           ; TIM3
 | 
			
		||||
                DCD     TIM4_IRQHandler           ; TIM4
 | 
			
		||||
                DCD     I2C1_EV_IRQHandler        ; I2C1 Event
 | 
			
		||||
                DCD     I2C1_ER_IRQHandler        ; I2C1 Error
 | 
			
		||||
                DCD     I2C2_EV_IRQHandler        ; I2C2 Event
 | 
			
		||||
                DCD     I2C2_ER_IRQHandler        ; I2C2 Error
 | 
			
		||||
                DCD     SPI1_IRQHandler           ; SPI1
 | 
			
		||||
                DCD     SPI2_IRQHandler           ; SPI2
 | 
			
		||||
                DCD     USART1_IRQHandler         ; USART1
 | 
			
		||||
                DCD     USART2_IRQHandler         ; USART2
 | 
			
		||||
                DCD     USART3_IRQHandler         ; USART3
 | 
			
		||||
                DCD     EXTI15_10_IRQHandler      ; EXTI Line 15..10
 | 
			
		||||
                DCD     RTC_Alarm_IRQHandler      ; RTC Alarm through EXTI Line
 | 
			
		||||
                DCD     USB_FS_WKUP_IRQHandler    ; USB FS Wakeup from suspend
 | 
			
		||||
                DCD     TIM6_IRQHandler           ; TIM6
 | 
			
		||||
                DCD     TIM7_IRQHandler           ; TIM7
 | 
			
		||||
                DCD     0                         ; Reserved
 | 
			
		||||
                DCD     TIM5_IRQHandler           ; TIM5
 | 
			
		||||
                DCD     SPI3_IRQHandler           ; SPI3
 | 
			
		||||
                DCD     UART4_IRQHandler          ; UART4
 | 
			
		||||
                DCD     UART5_IRQHandler          ; UART5
 | 
			
		||||
                DCD     DMA2_Channel1_IRQHandler  ; DMA2 Channel 1
 | 
			
		||||
                DCD     DMA2_Channel2_IRQHandler  ; DMA2 Channel 2
 | 
			
		||||
                DCD     DMA2_Channel3_IRQHandler  ; DMA2 Channel 3
 | 
			
		||||
                DCD     DMA2_Channel4_IRQHandler  ; DMA2 Channel 4
 | 
			
		||||
                DCD     DMA2_Channel5_IRQHandler  ; DMA2 Channel 5
 | 
			
		||||
                DCD     0                         ; Reserved
 | 
			
		||||
                DCD     COMP_ACQ_IRQHandler       ; Comparator Channel Acquisition
 | 
			
		||||
                
 | 
			
		||||
__Vectors_End
 | 
			
		||||
 | 
			
		||||
__Vectors_Size  EQU  __Vectors_End - __Vectors
 | 
			
		||||
 | 
			
		||||
                AREA    |.text|, CODE, READONLY
 | 
			
		||||
 | 
			
		||||
; Reset handler
 | 
			
		||||
Reset_Handler    PROC
 | 
			
		||||
                 EXPORT  Reset_Handler             [WEAK]
 | 
			
		||||
     IMPORT  __main
 | 
			
		||||
     IMPORT  SystemInit
 | 
			
		||||
                 LDR     R0, =SystemInit
 | 
			
		||||
                 BLX     R0
 | 
			
		||||
                 LDR     R0, =__main
 | 
			
		||||
                 BX      R0
 | 
			
		||||
                 ENDP
 | 
			
		||||
 | 
			
		||||
; Dummy Exception Handlers (infinite loops which can be modified)
 | 
			
		||||
 | 
			
		||||
NMI_Handler     PROC
 | 
			
		||||
                EXPORT  NMI_Handler                [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
HardFault_Handler\
 | 
			
		||||
                PROC
 | 
			
		||||
                EXPORT  HardFault_Handler          [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
MemManage_Handler\
 | 
			
		||||
                PROC
 | 
			
		||||
                EXPORT  MemManage_Handler          [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
BusFault_Handler\
 | 
			
		||||
                PROC
 | 
			
		||||
                EXPORT  BusFault_Handler           [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
UsageFault_Handler\
 | 
			
		||||
                PROC
 | 
			
		||||
                EXPORT  UsageFault_Handler         [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
SVC_Handler     PROC
 | 
			
		||||
                EXPORT  SVC_Handler                [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
DebugMon_Handler\
 | 
			
		||||
                PROC
 | 
			
		||||
                EXPORT  DebugMon_Handler           [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
PendSV_Handler  PROC
 | 
			
		||||
                EXPORT  PendSV_Handler             [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
SysTick_Handler PROC
 | 
			
		||||
                EXPORT  SysTick_Handler            [WEAK]
 | 
			
		||||
                B       .
 | 
			
		||||
                ENDP
 | 
			
		||||
 | 
			
		||||
Default_Handler PROC
 | 
			
		||||
 | 
			
		||||
                EXPORT  WWDG_IRQHandler            [WEAK]
 | 
			
		||||
                EXPORT  PVD_IRQHandler             [WEAK]
 | 
			
		||||
                EXPORT  TAMPER_STAMP_IRQHandler    [WEAK]
 | 
			
		||||
                EXPORT  RTC_WKUP_IRQHandler        [WEAK]
 | 
			
		||||
                EXPORT  FLASH_IRQHandler           [WEAK]
 | 
			
		||||
                EXPORT  RCC_IRQHandler             [WEAK]
 | 
			
		||||
                EXPORT  EXTI0_IRQHandler           [WEAK]
 | 
			
		||||
                EXPORT  EXTI1_IRQHandler           [WEAK]
 | 
			
		||||
                EXPORT  EXTI2_IRQHandler           [WEAK]
 | 
			
		||||
                EXPORT  EXTI3_IRQHandler           [WEAK]
 | 
			
		||||
                EXPORT  EXTI4_IRQHandler           [WEAK]
 | 
			
		||||
                EXPORT  DMA1_Channel1_IRQHandler   [WEAK]
 | 
			
		||||
                EXPORT  DMA1_Channel2_IRQHandler   [WEAK]
 | 
			
		||||
                EXPORT  DMA1_Channel3_IRQHandler   [WEAK]
 | 
			
		||||
                EXPORT  DMA1_Channel4_IRQHandler   [WEAK]
 | 
			
		||||
                EXPORT  DMA1_Channel5_IRQHandler   [WEAK]
 | 
			
		||||
                EXPORT  DMA1_Channel6_IRQHandler   [WEAK]
 | 
			
		||||
                EXPORT  DMA1_Channel7_IRQHandler   [WEAK]
 | 
			
		||||
                EXPORT  ADC1_IRQHandler            [WEAK]
 | 
			
		||||
                EXPORT  USB_HP_IRQHandler          [WEAK]
 | 
			
		||||
                EXPORT  USB_LP_IRQHandler          [WEAK]
 | 
			
		||||
                EXPORT  DAC_IRQHandler             [WEAK]
 | 
			
		||||
                EXPORT  COMP_IRQHandler            [WEAK]
 | 
			
		||||
                EXPORT  EXTI9_5_IRQHandler         [WEAK]
 | 
			
		||||
                EXPORT  LCD_IRQHandler             [WEAK]
 | 
			
		||||
                EXPORT  TIM9_IRQHandler            [WEAK]
 | 
			
		||||
                EXPORT  TIM10_IRQHandler           [WEAK]
 | 
			
		||||
                EXPORT  TIM11_IRQHandler           [WEAK]
 | 
			
		||||
                EXPORT  TIM2_IRQHandler            [WEAK]
 | 
			
		||||
                EXPORT  TIM3_IRQHandler            [WEAK]
 | 
			
		||||
                EXPORT  TIM4_IRQHandler            [WEAK]
 | 
			
		||||
                EXPORT  I2C1_EV_IRQHandler         [WEAK]
 | 
			
		||||
                EXPORT  I2C1_ER_IRQHandler         [WEAK]
 | 
			
		||||
                EXPORT  I2C2_EV_IRQHandler         [WEAK]
 | 
			
		||||
                EXPORT  I2C2_ER_IRQHandler         [WEAK]
 | 
			
		||||
                EXPORT  SPI1_IRQHandler            [WEAK]
 | 
			
		||||
                EXPORT  SPI2_IRQHandler            [WEAK]
 | 
			
		||||
                EXPORT  USART1_IRQHandler          [WEAK]
 | 
			
		||||
                EXPORT  USART2_IRQHandler          [WEAK]
 | 
			
		||||
                EXPORT  USART3_IRQHandler          [WEAK]
 | 
			
		||||
                EXPORT  EXTI15_10_IRQHandler       [WEAK]
 | 
			
		||||
                EXPORT  RTC_Alarm_IRQHandler       [WEAK]
 | 
			
		||||
                EXPORT  USB_FS_WKUP_IRQHandler     [WEAK]
 | 
			
		||||
                EXPORT  TIM6_IRQHandler            [WEAK]
 | 
			
		||||
                EXPORT  TIM7_IRQHandler            [WEAK]
 | 
			
		||||
                EXPORT  TIM5_IRQHandler            [WEAK]                                
 | 
			
		||||
                EXPORT  SPI3_IRQHandler            [WEAK]
 | 
			
		||||
                EXPORT  UART4_IRQHandler           [WEAK]
 | 
			
		||||
                EXPORT  UART5_IRQHandler           [WEAK]
 | 
			
		||||
                EXPORT  DMA2_Channel1_IRQHandler   [WEAK]
 | 
			
		||||
                EXPORT  DMA2_Channel2_IRQHandler   [WEAK]
 | 
			
		||||
                EXPORT  DMA2_Channel3_IRQHandler   [WEAK]
 | 
			
		||||
                EXPORT  DMA2_Channel4_IRQHandler   [WEAK]
 | 
			
		||||
                EXPORT  DMA2_Channel5_IRQHandler   [WEAK]
 | 
			
		||||
                EXPORT  COMP_ACQ_IRQHandler        [WEAK]
 | 
			
		||||
 | 
			
		||||
WWDG_IRQHandler
 | 
			
		||||
PVD_IRQHandler
 | 
			
		||||
TAMPER_STAMP_IRQHandler
 | 
			
		||||
RTC_WKUP_IRQHandler
 | 
			
		||||
FLASH_IRQHandler
 | 
			
		||||
RCC_IRQHandler
 | 
			
		||||
EXTI0_IRQHandler
 | 
			
		||||
EXTI1_IRQHandler
 | 
			
		||||
EXTI2_IRQHandler
 | 
			
		||||
EXTI3_IRQHandler
 | 
			
		||||
EXTI4_IRQHandler
 | 
			
		||||
DMA1_Channel1_IRQHandler
 | 
			
		||||
DMA1_Channel2_IRQHandler
 | 
			
		||||
DMA1_Channel3_IRQHandler
 | 
			
		||||
DMA1_Channel4_IRQHandler
 | 
			
		||||
DMA1_Channel5_IRQHandler
 | 
			
		||||
DMA1_Channel6_IRQHandler
 | 
			
		||||
DMA1_Channel7_IRQHandler
 | 
			
		||||
ADC1_IRQHandler
 | 
			
		||||
USB_HP_IRQHandler
 | 
			
		||||
USB_LP_IRQHandler
 | 
			
		||||
DAC_IRQHandler
 | 
			
		||||
COMP_IRQHandler
 | 
			
		||||
EXTI9_5_IRQHandler
 | 
			
		||||
LCD_IRQHandler
 | 
			
		||||
TIM9_IRQHandler
 | 
			
		||||
TIM10_IRQHandler
 | 
			
		||||
TIM11_IRQHandler
 | 
			
		||||
TIM2_IRQHandler
 | 
			
		||||
TIM3_IRQHandler
 | 
			
		||||
TIM4_IRQHandler
 | 
			
		||||
I2C1_EV_IRQHandler
 | 
			
		||||
I2C1_ER_IRQHandler
 | 
			
		||||
I2C2_EV_IRQHandler
 | 
			
		||||
I2C2_ER_IRQHandler
 | 
			
		||||
SPI1_IRQHandler
 | 
			
		||||
SPI2_IRQHandler
 | 
			
		||||
USART1_IRQHandler
 | 
			
		||||
USART2_IRQHandler
 | 
			
		||||
USART3_IRQHandler
 | 
			
		||||
EXTI15_10_IRQHandler
 | 
			
		||||
RTC_Alarm_IRQHandler
 | 
			
		||||
USB_FS_WKUP_IRQHandler
 | 
			
		||||
TIM6_IRQHandler
 | 
			
		||||
TIM7_IRQHandler
 | 
			
		||||
TIM5_IRQHandler
 | 
			
		||||
SPI3_IRQHandler
 | 
			
		||||
UART4_IRQHandler
 | 
			
		||||
UART5_IRQHandler
 | 
			
		||||
DMA2_Channel1_IRQHandler
 | 
			
		||||
DMA2_Channel2_IRQHandler
 | 
			
		||||
DMA2_Channel3_IRQHandler
 | 
			
		||||
DMA2_Channel4_IRQHandler
 | 
			
		||||
DMA2_Channel5_IRQHandler
 | 
			
		||||
COMP_ACQ_IRQHandler
 | 
			
		||||
 | 
			
		||||
                B       .
 | 
			
		||||
 | 
			
		||||
                ENDP
 | 
			
		||||
 | 
			
		||||
                ALIGN
 | 
			
		||||
                END
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,45 @@
 | 
			
		|||
; Scatter-Loading Description File
 | 
			
		||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
			
		||||
; Copyright (c) 2014, STMicroelectronics
 | 
			
		||||
; All rights reserved.
 | 
			
		||||
;
 | 
			
		||||
; Redistribution and use in source and binary forms, with or without
 | 
			
		||||
; modification, are permitted provided that the following conditions are met:
 | 
			
		||||
;
 | 
			
		||||
; 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
;     this list of conditions and the following disclaimer.
 | 
			
		||||
; 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
;    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
;    and/or other materials provided with the distribution.
 | 
			
		||||
; 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
;    may be used to endorse or promote products derived from this software
 | 
			
		||||
;    without specific prior written permission.
 | 
			
		||||
;
 | 
			
		||||
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
			
		||||
 | 
			
		||||
; STM32L152RE: 512KB FLASH + 80KB SRAM
 | 
			
		||||
LR_IROM1 0x08000000 0x80000  {    ; load region size_region
 | 
			
		||||
 | 
			
		||||
  ER_IROM1 0x08000000 0x80000  {  ; load address = execution address
 | 
			
		||||
   *.o (RESET, +First)
 | 
			
		||||
   *(InRoot$$Sections)
 | 
			
		||||
   .ANY (+RO)
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ; 73 vectors = 292 bytes (0x124) to be reserved in RAM
 | 
			
		||||
  RW_IRAM1 (0x20000000+0x124) (0x14000-0x124)  {  ; RW data
 | 
			
		||||
   .ANY (+RW +ZI)
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,56 @@
 | 
			
		|||
/* mbed Microcontroller Library - stackheap
 | 
			
		||||
 * Setup a fixed single stack/heap memory model, 
 | 
			
		||||
 * between the top of the RW/ZI region and the stackpointer
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 * Copyright (c) 2014, STMicroelectronics
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif 
 | 
			
		||||
 | 
			
		||||
#include <rt_misc.h>
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
 | 
			
		||||
extern char Image$$RW_IRAM1$$ZI$$Limit[];
 | 
			
		||||
 | 
			
		||||
extern __value_in_regs struct __initial_stackheap __user_setup_stackheap(uint32_t R0, uint32_t R1, uint32_t R2, uint32_t R3) {
 | 
			
		||||
    uint32_t zi_limit = (uint32_t)Image$$RW_IRAM1$$ZI$$Limit;
 | 
			
		||||
    uint32_t sp_limit = __current_sp();
 | 
			
		||||
 | 
			
		||||
    zi_limit = (zi_limit + 7) & ~0x7;    // ensure zi_limit is 8-byte aligned
 | 
			
		||||
 | 
			
		||||
    struct __initial_stackheap r;
 | 
			
		||||
    r.heap_base = zi_limit;
 | 
			
		||||
    r.heap_limit = sp_limit;
 | 
			
		||||
    return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif 
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,546 @@
 | 
			
		|||
;/******************** (C) COPYRIGHT 2014 STMicroelectronics ********************
 | 
			
		||||
;* File Name          : startup_stm32l152xe.s
 | 
			
		||||
;* Author             : MCD Application Team
 | 
			
		||||
;* Version            : V2.0.0
 | 
			
		||||
;* Date               : 5-September-2014
 | 
			
		||||
;* Description        : STM32L152XE Devices vector for EWARM toolchain.
 | 
			
		||||
;*                      This module performs:
 | 
			
		||||
;*                      - Set the initial SP
 | 
			
		||||
;*                      - Set the initial PC == __iar_program_start,
 | 
			
		||||
;*                      - Set the vector table entries with the exceptions ISR 
 | 
			
		||||
;*                        address.
 | 
			
		||||
;*                      - Configure the system clock
 | 
			
		||||
;*                      - Branches to main in the C library (which eventually
 | 
			
		||||
;*                        calls main()).
 | 
			
		||||
;*                      After Reset the Cortex-M3 processor is in Thread mode,
 | 
			
		||||
;*                      priority is Privileged, and the Stack is set to Main.
 | 
			
		||||
;********************************************************************************
 | 
			
		||||
;*
 | 
			
		||||
;* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
 | 
			
		||||
;*
 | 
			
		||||
;* Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
;* are permitted provided that the following conditions are met:
 | 
			
		||||
;*   1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
;*      this list of conditions and the following disclaimer.
 | 
			
		||||
;*   2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
;*      this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
;*      and/or other materials provided with the distribution.
 | 
			
		||||
;*   3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
;*      may be used to endorse or promote products derived from this software
 | 
			
		||||
;*      without specific prior written permission.
 | 
			
		||||
;*
 | 
			
		||||
;* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
;* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
;* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
;* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
;* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
;* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
;* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
;* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
;* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
;* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
;*
 | 
			
		||||
;*******************************************************************************
 | 
			
		||||
;
 | 
			
		||||
;
 | 
			
		||||
; The modules in this file are included in the libraries, and may be replaced
 | 
			
		||||
; by any user-defined modules that define the PUBLIC symbol _program_start or
 | 
			
		||||
; a user defined start symbol.
 | 
			
		||||
; To override the cstartup defined in the library, simply add your modified
 | 
			
		||||
; version to the workbench project.
 | 
			
		||||
;
 | 
			
		||||
; The vector table is normally located at address 0.
 | 
			
		||||
; When debugging in RAM, it can be located in RAM, aligned to at least 2^6.
 | 
			
		||||
; The name "__vector_table" has special meaning for C-SPY:
 | 
			
		||||
; it is where the SP start value is found, and the NVIC vector
 | 
			
		||||
; table register (VTOR) is initialized to this address if != 0.
 | 
			
		||||
;
 | 
			
		||||
; Cortex-M version
 | 
			
		||||
;
 | 
			
		||||
 | 
			
		||||
        MODULE  ?cstartup
 | 
			
		||||
 | 
			
		||||
        ;; Forward declaration of sections.
 | 
			
		||||
        SECTION CSTACK:DATA:NOROOT(3)
 | 
			
		||||
 | 
			
		||||
        SECTION .intvec:CODE:NOROOT(2)
 | 
			
		||||
 | 
			
		||||
        EXTERN  __iar_program_start
 | 
			
		||||
        EXTERN  SystemInit        
 | 
			
		||||
        PUBLIC  __vector_table
 | 
			
		||||
 | 
			
		||||
        DATA
 | 
			
		||||
__vector_table
 | 
			
		||||
        DCD     sfe(CSTACK)
 | 
			
		||||
        DCD     Reset_Handler             ; Reset Handler
 | 
			
		||||
 | 
			
		||||
        DCD     NMI_Handler               ; NMI Handler
 | 
			
		||||
        DCD     HardFault_Handler         ; Hard Fault Handler
 | 
			
		||||
        DCD     MemManage_Handler         ; MPU Fault Handler
 | 
			
		||||
        DCD     BusFault_Handler          ; Bus Fault Handler
 | 
			
		||||
        DCD     UsageFault_Handler        ; Usage Fault Handler
 | 
			
		||||
        DCD     0                         ; Reserved
 | 
			
		||||
        DCD     0                         ; Reserved
 | 
			
		||||
        DCD     0                         ; Reserved
 | 
			
		||||
        DCD     0                         ; Reserved
 | 
			
		||||
        DCD     SVC_Handler               ; SVCall Handler
 | 
			
		||||
        DCD     DebugMon_Handler          ; Debug Monitor Handler
 | 
			
		||||
        DCD     0                         ; Reserved
 | 
			
		||||
        DCD     PendSV_Handler            ; PendSV Handler
 | 
			
		||||
        DCD     SysTick_Handler           ; SysTick Handler
 | 
			
		||||
 | 
			
		||||
         ; External Interrupts
 | 
			
		||||
        DCD     WWDG_IRQHandler           ; Window Watchdog
 | 
			
		||||
        DCD     PVD_IRQHandler            ; PVD through EXTI Line detect
 | 
			
		||||
        DCD     TAMPER_STAMP_IRQHandler   ; Tamper and Time Stamp
 | 
			
		||||
        DCD     RTC_WKUP_IRQHandler       ; RTC Wakeup
 | 
			
		||||
        DCD     FLASH_IRQHandler          ; FLASH
 | 
			
		||||
        DCD     RCC_IRQHandler            ; RCC
 | 
			
		||||
        DCD     EXTI0_IRQHandler          ; EXTI Line 0
 | 
			
		||||
        DCD     EXTI1_IRQHandler          ; EXTI Line 1
 | 
			
		||||
        DCD     EXTI2_IRQHandler          ; EXTI Line 2
 | 
			
		||||
        DCD     EXTI3_IRQHandler          ; EXTI Line 3
 | 
			
		||||
        DCD     EXTI4_IRQHandler          ; EXTI Line 4
 | 
			
		||||
        DCD     DMA1_Channel1_IRQHandler  ; DMA1 Channel 1
 | 
			
		||||
        DCD     DMA1_Channel2_IRQHandler  ; DMA1 Channel 2
 | 
			
		||||
        DCD     DMA1_Channel3_IRQHandler  ; DMA1 Channel 3
 | 
			
		||||
        DCD     DMA1_Channel4_IRQHandler  ; DMA1 Channel 4
 | 
			
		||||
        DCD     DMA1_Channel5_IRQHandler  ; DMA1 Channel 5
 | 
			
		||||
        DCD     DMA1_Channel6_IRQHandler  ; DMA1 Channel 6
 | 
			
		||||
        DCD     DMA1_Channel7_IRQHandler  ; DMA1 Channel 7
 | 
			
		||||
        DCD     ADC1_IRQHandler           ; ADC1
 | 
			
		||||
        DCD     USB_HP_IRQHandler         ; USB High Priority
 | 
			
		||||
        DCD     USB_LP_IRQHandler         ; USB Low  Priority
 | 
			
		||||
        DCD     DAC_IRQHandler            ; DAC
 | 
			
		||||
        DCD     COMP_IRQHandler           ; COMP through EXTI Line
 | 
			
		||||
        DCD     EXTI9_5_IRQHandler        ; EXTI Line 9..5
 | 
			
		||||
        DCD     LCD_IRQHandler            ; LCD
 | 
			
		||||
        DCD     TIM9_IRQHandler           ; TIM9
 | 
			
		||||
        DCD     TIM10_IRQHandler          ; TIM10
 | 
			
		||||
        DCD     TIM11_IRQHandler          ; TIM11
 | 
			
		||||
        DCD     TIM2_IRQHandler           ; TIM2
 | 
			
		||||
        DCD     TIM3_IRQHandler           ; TIM3
 | 
			
		||||
        DCD     TIM4_IRQHandler           ; TIM4
 | 
			
		||||
        DCD     I2C1_EV_IRQHandler        ; I2C1 Event
 | 
			
		||||
        DCD     I2C1_ER_IRQHandler        ; I2C1 Error
 | 
			
		||||
        DCD     I2C2_EV_IRQHandler        ; I2C2 Event
 | 
			
		||||
        DCD     I2C2_ER_IRQHandler        ; I2C2 Error
 | 
			
		||||
        DCD     SPI1_IRQHandler           ; SPI1
 | 
			
		||||
        DCD     SPI2_IRQHandler           ; SPI2
 | 
			
		||||
        DCD     USART1_IRQHandler         ; USART1
 | 
			
		||||
        DCD     USART2_IRQHandler         ; USART2
 | 
			
		||||
        DCD     USART3_IRQHandler         ; USART3
 | 
			
		||||
        DCD     EXTI15_10_IRQHandler      ; EXTI Line 15..10
 | 
			
		||||
        DCD     RTC_Alarm_IRQHandler      ; RTC Alarm through EXTI Line
 | 
			
		||||
        DCD     USB_FS_WKUP_IRQHandler    ; USB FS Wakeup from suspend
 | 
			
		||||
        DCD     TIM6_IRQHandler           ; TIM6
 | 
			
		||||
        DCD     TIM7_IRQHandler           ; TIM7
 | 
			
		||||
        DCD     0                         ; Reserved
 | 
			
		||||
        DCD     TIM5_IRQHandler           ; TIM5                
 | 
			
		||||
        DCD     SPI3_IRQHandler           ; SPI3
 | 
			
		||||
        DCD     UART4_IRQHandler          ; UART4
 | 
			
		||||
        DCD     UART5_IRQHandler          ; UART5
 | 
			
		||||
        DCD     DMA2_Channel1_IRQHandler  ; DMA2 Channel 1
 | 
			
		||||
        DCD     DMA2_Channel2_IRQHandler  ; DMA2 Channel 2
 | 
			
		||||
        DCD     DMA2_Channel3_IRQHandler  ; DMA2 Channel 3
 | 
			
		||||
        DCD     DMA2_Channel4_IRQHandler  ; DMA2 Channel 4
 | 
			
		||||
        DCD     DMA2_Channel5_IRQHandler  ; DMA2 Channel 5
 | 
			
		||||
        DCD     0                         ; Reserved
 | 
			
		||||
        DCD     COMP_ACQ_IRQHandler       ; Comparator Channel Acquisition 
 | 
			
		||||
        
 | 
			
		||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
			
		||||
;;
 | 
			
		||||
;; Default interrupt handlers.
 | 
			
		||||
;;
 | 
			
		||||
        THUMB
 | 
			
		||||
 | 
			
		||||
        PUBWEAK Reset_Handler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(2)
 | 
			
		||||
Reset_Handler
 | 
			
		||||
        LDR     R0, =SystemInit
 | 
			
		||||
        BLX     R0
 | 
			
		||||
        LDR     R0, =__iar_program_start
 | 
			
		||||
        BX      R0
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK NMI_Handler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
NMI_Handler
 | 
			
		||||
        B NMI_Handler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK HardFault_Handler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
HardFault_Handler
 | 
			
		||||
        B HardFault_Handler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK MemManage_Handler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
MemManage_Handler
 | 
			
		||||
        B MemManage_Handler
 | 
			
		||||
        
 | 
			
		||||
                
 | 
			
		||||
        PUBWEAK BusFault_Handler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
BusFault_Handler
 | 
			
		||||
        B BusFault_Handler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK UsageFault_Handler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
UsageFault_Handler
 | 
			
		||||
        B UsageFault_Handler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK SVC_Handler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
SVC_Handler
 | 
			
		||||
        B SVC_Handler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK DebugMon_Handler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
DebugMon_Handler
 | 
			
		||||
        B DebugMon_Handler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK PendSV_Handler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
PendSV_Handler
 | 
			
		||||
        B PendSV_Handler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK SysTick_Handler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
SysTick_Handler
 | 
			
		||||
        B SysTick_Handler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK WWDG_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
WWDG_IRQHandler
 | 
			
		||||
        B WWDG_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK PVD_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
PVD_IRQHandler
 | 
			
		||||
        B PVD_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK TAMPER_STAMP_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
TAMPER_STAMP_IRQHandler
 | 
			
		||||
        B TAMPER_STAMP_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK RTC_WKUP_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
RTC_WKUP_IRQHandler
 | 
			
		||||
        B RTC_WKUP_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK FLASH_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
FLASH_IRQHandler
 | 
			
		||||
        B FLASH_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK RCC_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
RCC_IRQHandler
 | 
			
		||||
        B RCC_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK EXTI0_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
EXTI0_IRQHandler
 | 
			
		||||
        B EXTI0_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK EXTI1_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
EXTI1_IRQHandler
 | 
			
		||||
        B EXTI1_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK EXTI2_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
EXTI2_IRQHandler
 | 
			
		||||
        B EXTI2_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK EXTI3_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
EXTI3_IRQHandler
 | 
			
		||||
        B EXTI3_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK EXTI4_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
EXTI4_IRQHandler
 | 
			
		||||
        B EXTI4_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK DMA1_Channel1_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
DMA1_Channel1_IRQHandler
 | 
			
		||||
        B DMA1_Channel1_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK DMA1_Channel2_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
DMA1_Channel2_IRQHandler
 | 
			
		||||
        B DMA1_Channel2_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK DMA1_Channel3_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
DMA1_Channel3_IRQHandler
 | 
			
		||||
        B DMA1_Channel3_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK DMA1_Channel4_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
DMA1_Channel4_IRQHandler
 | 
			
		||||
        B DMA1_Channel4_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK DMA1_Channel5_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
DMA1_Channel5_IRQHandler
 | 
			
		||||
        B DMA1_Channel5_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK DMA1_Channel6_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
DMA1_Channel6_IRQHandler
 | 
			
		||||
        B DMA1_Channel6_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK DMA1_Channel7_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
DMA1_Channel7_IRQHandler
 | 
			
		||||
        B DMA1_Channel7_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK ADC1_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
ADC1_IRQHandler
 | 
			
		||||
        B ADC1_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK USB_HP_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
USB_HP_IRQHandler
 | 
			
		||||
        B USB_HP_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK USB_LP_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
USB_LP_IRQHandler
 | 
			
		||||
        B USB_LP_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK DAC_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
DAC_IRQHandler
 | 
			
		||||
        B DAC_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK COMP_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
COMP_IRQHandler
 | 
			
		||||
        B COMP_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK EXTI9_5_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
EXTI9_5_IRQHandler
 | 
			
		||||
        B EXTI9_5_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK LCD_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
LCD_IRQHandler
 | 
			
		||||
        B LCD_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK TIM9_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
TIM9_IRQHandler
 | 
			
		||||
        B TIM9_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK TIM10_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
TIM10_IRQHandler
 | 
			
		||||
        B TIM10_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK TIM11_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
TIM11_IRQHandler
 | 
			
		||||
        B TIM11_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK TIM2_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
TIM2_IRQHandler
 | 
			
		||||
        B TIM2_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK TIM3_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
TIM3_IRQHandler
 | 
			
		||||
        B TIM3_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK TIM4_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
TIM4_IRQHandler
 | 
			
		||||
        B TIM4_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK I2C1_EV_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
I2C1_EV_IRQHandler
 | 
			
		||||
        B I2C1_EV_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK I2C1_ER_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
I2C1_ER_IRQHandler
 | 
			
		||||
        B I2C1_ER_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK I2C2_EV_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
I2C2_EV_IRQHandler
 | 
			
		||||
        B I2C2_EV_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK I2C2_ER_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
I2C2_ER_IRQHandler
 | 
			
		||||
        B I2C2_ER_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK SPI1_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
SPI1_IRQHandler
 | 
			
		||||
        B SPI1_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK SPI2_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
SPI2_IRQHandler
 | 
			
		||||
        B SPI2_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK USART1_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
USART1_IRQHandler
 | 
			
		||||
        B USART1_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK USART2_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
USART2_IRQHandler
 | 
			
		||||
        B USART2_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK USART3_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
USART3_IRQHandler
 | 
			
		||||
        B USART3_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK EXTI15_10_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
EXTI15_10_IRQHandler
 | 
			
		||||
        B EXTI15_10_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK RTC_Alarm_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
RTC_Alarm_IRQHandler
 | 
			
		||||
        B RTC_Alarm_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK USB_FS_WKUP_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
USB_FS_WKUP_IRQHandler
 | 
			
		||||
        B USB_FS_WKUP_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        PUBWEAK TIM6_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
TIM6_IRQHandler
 | 
			
		||||
        B TIM6_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        PUBWEAK TIM7_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
TIM7_IRQHandler
 | 
			
		||||
        B TIM7_IRQHandler
 | 
			
		||||
 | 
			
		||||
        PUBWEAK TIM5_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
TIM5_IRQHandler
 | 
			
		||||
        B TIM5_IRQHandler
 | 
			
		||||
 | 
			
		||||
        PUBWEAK SPI3_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
SPI3_IRQHandler
 | 
			
		||||
        B SPI3_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK UART4_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
UART4_IRQHandler
 | 
			
		||||
        B UART4_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK UART5_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
UART5_IRQHandler
 | 
			
		||||
        B UART5_IRQHandler
 | 
			
		||||
 | 
			
		||||
        PUBWEAK DMA2_Channel1_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
DMA2_Channel1_IRQHandler
 | 
			
		||||
        B DMA2_Channel1_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK DMA2_Channel2_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
DMA2_Channel2_IRQHandler
 | 
			
		||||
        B DMA2_Channel2_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK DMA2_Channel3_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
DMA2_Channel3_IRQHandler
 | 
			
		||||
        B DMA2_Channel3_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK DMA2_Channel4_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
DMA2_Channel4_IRQHandler
 | 
			
		||||
        B DMA2_Channel4_IRQHandler
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
        PUBWEAK DMA2_Channel5_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
DMA2_Channel5_IRQHandler
 | 
			
		||||
        B DMA2_Channel5_IRQHandler
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        PUBWEAK COMP_ACQ_IRQHandler
 | 
			
		||||
        SECTION .text:CODE:REORDER:NOROOT(1)
 | 
			
		||||
COMP_ACQ_IRQHandler
 | 
			
		||||
        B COMP_ACQ_IRQHandler                
 | 
			
		||||
                
 | 
			
		||||
        END
 | 
			
		||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
/* [ROM = 64kb = 0x10000] */
 | 
			
		||||
define symbol __intvec_start__     = 0x08000000;
 | 
			
		||||
define symbol __region_ROM_start__ = 0x08000000;
 | 
			
		||||
define symbol __region_ROM_end__   = 0x0807FFFF;
 | 
			
		||||
 | 
			
		||||
/* [RAM = 80kb = 0x14000] Vector table dynamic copy: 73 vectors = 292 bytes (0x124) to be reserved in RAM */
 | 
			
		||||
define symbol __NVIC_start__          = 0x20000000;
 | 
			
		||||
define symbol __NVIC_end__            = 0x20000127; /* Add 4 more bytes to be aligned on 8 bytes */
 | 
			
		||||
define symbol __region_RAM_start__    = 0x20000128;
 | 
			
		||||
define symbol __region_RAM_end__      = 0x20013FFF;
 | 
			
		||||
 | 
			
		||||
/* Memory regions */
 | 
			
		||||
define memory mem with size = 4G;
 | 
			
		||||
define region ROM_region = mem:[from __region_ROM_start__ to __region_ROM_end__];
 | 
			
		||||
define region RAM_region = mem:[from __region_RAM_start__ to __region_RAM_end__];
 | 
			
		||||
 | 
			
		||||
/* Stack and Heap */
 | 
			
		||||
define symbol __size_cstack__ = 0x400;
 | 
			
		||||
define symbol __size_heap__   = 0x400;
 | 
			
		||||
define block CSTACK    with alignment = 8, size = __size_cstack__   { };
 | 
			
		||||
define block HEAP      with alignment = 8, size = __size_heap__     { };
 | 
			
		||||
define block STACKHEAP with fixed order { block HEAP, block CSTACK };
 | 
			
		||||
 | 
			
		||||
initialize by copy with packing = zeros { readwrite };
 | 
			
		||||
do not initialize  { section .noinit };
 | 
			
		||||
 | 
			
		||||
place at address mem:__intvec_start__ { readonly section .intvec };
 | 
			
		||||
 | 
			
		||||
place in ROM_region   { readonly };
 | 
			
		||||
place in RAM_region   { readwrite, block STACKHEAP };
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,38 @@
 | 
			
		|||
/* mbed Microcontroller Library
 | 
			
		||||
 * A generic CMSIS include header
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 * Copyright (c) 2014, STMicroelectronics
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef MBED_CMSIS_H
 | 
			
		||||
#define MBED_CMSIS_H
 | 
			
		||||
 | 
			
		||||
#include "stm32l1xx.h"
 | 
			
		||||
#include "cmsis_nvic.h"
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,55 @@
 | 
			
		|||
/* mbed Microcontroller Library
 | 
			
		||||
 * CMSIS-style functionality to support dynamic vectors
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 * Copyright (c) 2014, STMicroelectronics
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 */ 
 | 
			
		||||
#include "cmsis_nvic.h"
 | 
			
		||||
 | 
			
		||||
#define NVIC_RAM_VECTOR_ADDRESS   (0x20000000)  // Vectors positioned at start of RAM
 | 
			
		||||
#define NVIC_FLASH_VECTOR_ADDRESS (0x08000000)  // Initial vector position in flash
 | 
			
		||||
 | 
			
		||||
void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) {
 | 
			
		||||
    uint32_t *vectors = (uint32_t *)SCB->VTOR;
 | 
			
		||||
    uint32_t i;
 | 
			
		||||
 | 
			
		||||
    // Copy and switch to dynamic vectors if the first time called
 | 
			
		||||
    if (SCB->VTOR == NVIC_FLASH_VECTOR_ADDRESS) {
 | 
			
		||||
        uint32_t *old_vectors = vectors;
 | 
			
		||||
        vectors = (uint32_t*)NVIC_RAM_VECTOR_ADDRESS;
 | 
			
		||||
        for (i=0; i<NVIC_NUM_VECTORS; i++) {
 | 
			
		||||
            vectors[i] = old_vectors[i];
 | 
			
		||||
        }
 | 
			
		||||
        SCB->VTOR = (uint32_t)NVIC_RAM_VECTOR_ADDRESS;
 | 
			
		||||
    }
 | 
			
		||||
    vectors[IRQn + NVIC_USER_IRQ_OFFSET] = vector;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint32_t NVIC_GetVector(IRQn_Type IRQn) {
 | 
			
		||||
    uint32_t *vectors = (uint32_t*)SCB->VTOR;
 | 
			
		||||
    return vectors[IRQn + NVIC_USER_IRQ_OFFSET];
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,55 @@
 | 
			
		|||
/* mbed Microcontroller Library
 | 
			
		||||
 * CMSIS-style functionality to support dynamic vectors
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 * Copyright (c) 2014, STMicroelectronics
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 */ 
 | 
			
		||||
 | 
			
		||||
#ifndef MBED_CMSIS_NVIC_H
 | 
			
		||||
#define MBED_CMSIS_NVIC_H
 | 
			
		||||
 | 
			
		||||
// STM32L152RE
 | 
			
		||||
// CORE: 16 vectors = 64 bytes from 0x00 to 0x3F
 | 
			
		||||
// MCU Peripherals: 57 vectors = 228 bytes from 0x40 to 0x123
 | 
			
		||||
// Total: 73 vectors = 292 bytes (0x124) to be reserved in RAM
 | 
			
		||||
#define NVIC_NUM_VECTORS      73
 | 
			
		||||
#define NVIC_USER_IRQ_OFFSET  16
 | 
			
		||||
 | 
			
		||||
#include "cmsis.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector);
 | 
			
		||||
uint32_t NVIC_GetVector(IRQn_Type IRQn);
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,121 @@
 | 
			
		|||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    hal_tick.c
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Initialization of HAL tick
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * <h2><center>© COPYRIGHT 2014 STMicroelectronics</center></h2>
 | 
			
		||||
  *
 | 
			
		||||
  * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
  * are permitted provided that the following conditions are met:
 | 
			
		||||
  *   1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
  *      this list of conditions and the following disclaimer.
 | 
			
		||||
  *   2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
  *      this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
  *      and/or other materials provided with the distribution.
 | 
			
		||||
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
  *      may be used to endorse or promote products derived from this software
 | 
			
		||||
  *      without specific prior written permission.
 | 
			
		||||
  *
 | 
			
		||||
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
#include "hal_tick.h"
 | 
			
		||||
 | 
			
		||||
TIM_HandleTypeDef TimMasterHandle;
 | 
			
		||||
uint32_t PreviousVal = 0;
 | 
			
		||||
 | 
			
		||||
void us_ticker_irq_handler(void);
 | 
			
		||||
 | 
			
		||||
void timer_irq_handler(void) {
 | 
			
		||||
    // Channel 1 for mbed timeout
 | 
			
		||||
    if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC1) == SET) {
 | 
			
		||||
        us_ticker_irq_handler();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Channel 2 for HAL tick
 | 
			
		||||
    if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC2) == SET) {
 | 
			
		||||
        __HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
 | 
			
		||||
        uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
 | 
			
		||||
        if ((val - PreviousVal) >= HAL_TICK_DELAY) {
 | 
			
		||||
            // Increment HAL variable
 | 
			
		||||
            HAL_IncTick();
 | 
			
		||||
            // Prepare next interrupt
 | 
			
		||||
            __HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
 | 
			
		||||
            PreviousVal = val;
 | 
			
		||||
#if 0 // For DEBUG only
 | 
			
		||||
            HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
 | 
			
		||||
#endif
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Reconfigure the HAL tick using a standard timer instead of systick.
 | 
			
		||||
HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) {
 | 
			
		||||
    // Enable timer clock
 | 
			
		||||
    TIM_MST_RCC;
 | 
			
		||||
 | 
			
		||||
    // Reset timer
 | 
			
		||||
    TIM_MST_RESET_ON;
 | 
			
		||||
    TIM_MST_RESET_OFF;
 | 
			
		||||
 | 
			
		||||
    // Update the SystemCoreClock variable
 | 
			
		||||
    SystemCoreClockUpdate();
 | 
			
		||||
 | 
			
		||||
    // Configure time base
 | 
			
		||||
    TimMasterHandle.Instance = TIM_MST;
 | 
			
		||||
    TimMasterHandle.Init.Period            = 0xFFFFFFFF;
 | 
			
		||||
    TimMasterHandle.Init.Prescaler         = (uint32_t)(SystemCoreClock / 1000000) - 1; // 1 us tick
 | 
			
		||||
    TimMasterHandle.Init.ClockDivision     = 0;
 | 
			
		||||
    TimMasterHandle.Init.CounterMode       = TIM_COUNTERMODE_UP;
 | 
			
		||||
    HAL_TIM_OC_Init(&TimMasterHandle);
 | 
			
		||||
 | 
			
		||||
    NVIC_SetVector(TIM_MST_IRQ, (uint32_t)timer_irq_handler);
 | 
			
		||||
    NVIC_EnableIRQ(TIM_MST_IRQ);
 | 
			
		||||
 | 
			
		||||
    // Channel 1 for mbed timeout
 | 
			
		||||
    HAL_TIM_OC_Start(&TimMasterHandle, TIM_CHANNEL_1);
 | 
			
		||||
 | 
			
		||||
    // Channel 2 for HAL tick
 | 
			
		||||
    HAL_TIM_OC_Start(&TimMasterHandle, TIM_CHANNEL_2);
 | 
			
		||||
    PreviousVal = __HAL_TIM_GetCounter(&TimMasterHandle);
 | 
			
		||||
    __HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, PreviousVal + HAL_TICK_DELAY);
 | 
			
		||||
    __HAL_TIM_ENABLE_IT(&TimMasterHandle, TIM_IT_CC2);
 | 
			
		||||
 | 
			
		||||
#if 0 // For DEBUG only
 | 
			
		||||
    __GPIOB_CLK_ENABLE();
 | 
			
		||||
    GPIO_InitTypeDef GPIO_InitStruct;
 | 
			
		||||
    GPIO_InitStruct.Pin = GPIO_PIN_6;
 | 
			
		||||
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
 | 
			
		||||
    GPIO_InitStruct.Pull = GPIO_PULLUP;
 | 
			
		||||
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
 | 
			
		||||
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    return HAL_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
  
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */    
 | 
			
		||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,60 @@
 | 
			
		|||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    hal_tick.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @brief   Initialization of HAL tick
 | 
			
		||||
  ******************************************************************************  
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
 | 
			
		||||
  *
 | 
			
		||||
  * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
  * are permitted provided that the following conditions are met:
 | 
			
		||||
  *   1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
  *      this list of conditions and the following disclaimer.
 | 
			
		||||
  *   2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
  *      this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
  *      and/or other materials provided with the distribution.
 | 
			
		||||
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
  *      may be used to endorse or promote products derived from this software
 | 
			
		||||
  *      without specific prior written permission.
 | 
			
		||||
  *
 | 
			
		||||
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************  
 | 
			
		||||
  */ 
 | 
			
		||||
#ifndef __HAL_TICK_H
 | 
			
		||||
#define __HAL_TICK_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "stm32l1xx.h"
 | 
			
		||||
#include "cmsis_nvic.h"
 | 
			
		||||
   
 | 
			
		||||
#define TIM_MST      TIM5
 | 
			
		||||
#define TIM_MST_IRQ  TIM5_IRQn
 | 
			
		||||
#define TIM_MST_RCC  __TIM5_CLK_ENABLE()
 | 
			
		||||
 | 
			
		||||
#define TIM_MST_RESET_ON   __TIM5_FORCE_RESET()
 | 
			
		||||
#define TIM_MST_RESET_OFF  __TIM5_RELEASE_RESET()
 | 
			
		||||
 | 
			
		||||
#define HAL_TICK_DELAY (1000) // 1 ms
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif // __HAL_TICK_H
 | 
			
		||||
 | 
			
		||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
				
			
			@ -0,0 +1,247 @@
 | 
			
		|||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    stm32l1xx.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @version V2.0.0
 | 
			
		||||
  * @date    5-September-2014
 | 
			
		||||
  * @brief   CMSIS STM32L1xx Device Peripheral Access Layer Header File. 
 | 
			
		||||
  *
 | 
			
		||||
  *          The file is the unique include file that the application programmer
 | 
			
		||||
  *          is using in the C source code, usually in main.c. This file contains:
 | 
			
		||||
  *            - Configuration section that allows to select:
 | 
			
		||||
  *              - The STM32L1xx device used in the target application
 | 
			
		||||
  *              - To use or not the peripheral’s drivers in application code(i.e. 
 | 
			
		||||
  *                code will be based on direct access to peripheral’s registers 
 | 
			
		||||
  *                rather than drivers API), this option is controlled by 
 | 
			
		||||
  *                "#define USE_HAL_DRIVER"
 | 
			
		||||
  *  
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
 | 
			
		||||
  *
 | 
			
		||||
  * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
  * are permitted provided that the following conditions are met:
 | 
			
		||||
  *   1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
  *      this list of conditions and the following disclaimer.
 | 
			
		||||
  *   2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
  *      this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
  *      and/or other materials provided with the distribution.
 | 
			
		||||
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
  *      may be used to endorse or promote products derived from this software
 | 
			
		||||
  *      without specific prior written permission.
 | 
			
		||||
  *
 | 
			
		||||
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup CMSIS
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup stm32l1xx
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
    
 | 
			
		||||
#ifndef __STM32L1XX_H
 | 
			
		||||
#define __STM32L1XX_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif /* __cplusplus */
 | 
			
		||||
  
 | 
			
		||||
/** @addtogroup Library_configuration_section
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Uncomment the line below according to the target STM32L device used in your 
 | 
			
		||||
   application 
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if !defined (STM32L100xB) && !defined (STM32L100xBA) && !defined (STM32L100xC) && \
 | 
			
		||||
    !defined (STM32L151xB) && !defined (STM32L151xBA) && !defined (STM32L151xC) && !defined (STM32L151xCA) && !defined (STM32L151xD) && !defined (STM32L151xE) && \
 | 
			
		||||
    !defined (STM32L152xB) && !defined (STM32L152xBA) && !defined (STM32L152xC) && !defined (STM32L152xCA) && !defined (STM32L152xD) && !defined (STM32L152xE) && \
 | 
			
		||||
    !defined (STM32L162xC) && !defined (STM32L162xCA) && !defined (STM32L162xD) && !defined (STM32L162xE)
 | 
			
		||||
  /* #define STM32L100xB  */   /*!< STM32L100C6, STM32L100R and STM32L100RB Devices */
 | 
			
		||||
  /* #define STM32L100xBA */   /*!< STM32L100C6-A, STM32L100R8-A and STM32L100RB-A Devices */
 | 
			
		||||
  /* #define STM32L100xC  */   /*!< STM32L100RC Devices */
 | 
			
		||||
  /* #define STM32L151xB  */   /*!< STM32L151C6, STM32L151R6, STM32L151C8, STM32L151R8, STM32L151V8, STM32L151CB, STM32L151RB and STM32L151VB */
 | 
			
		||||
  /* #define STM32L151xBA */   /*!< STM32L151C6-A, STM32L151R6-A, STM32L151C8-A, STM32L151R8-A, STM32L151V8-A, STM32L151CB-A, STM32L151RB-A and STM32L151VB-A */ 
 | 
			
		||||
  /* #define STM32L151xC  */   /*!< STM32L151CC, STM32L151UC, STM32L151RC and STM32L151VC */
 | 
			
		||||
  /* #define STM32L151xCA */   /*!< STM32L151RC-A, STM32L151VC-A, STM32L151QC and STM32L151ZC */
 | 
			
		||||
  /* #define STM32L151xD  */   /*!< STM32L151QD, STM32L151RD, STM32L151VD & STM32L151ZD */
 | 
			
		||||
  /* #define STM32L151xE  */   /*!< STM32L151QE, STM32L151RE, STM32L151VE and STM32L151ZE */
 | 
			
		||||
  /* #define STM32L152xB  */   /*!< STM32L152C6, STM32L152R6, STM32L152C8, STM32L152R8, STM32L152V8, STM32L152CB, STM32L152RB and STM32L152VB */
 | 
			
		||||
  /* #define STM32L152xBA */   /*!< STM32L152C6-A, STM32L152R6-A, STM32L152C8-A, STM32L152R8-A, STM32L152V8-A, STM32L152CB-A, STM32L152RB-A and STM32L152VB-A */
 | 
			
		||||
  /* #define STM32L152xC  */   /*!< STM32L152CC, STM32L152UC, STM32L152RC and STM32L152VC */
 | 
			
		||||
  /* #define STM32L152xCA */   /*!< STM32L152RC-A, STM32L152VC-A, STM32L152QC and STM32L152ZC */
 | 
			
		||||
  /* #define STM32L152xD  */   /*!< STM32L152QD, STM32L152RD, STM32L152VD and STM32L152ZD */  
 | 
			
		||||
#define STM32L152xE            /*!< STM32L152QE, STM32L152RE, STM32L152VE and STM32L152ZE */
 | 
			
		||||
  /* #define STM32L162xC  */   /*!< STM32L162RC and STM32L162VC */
 | 
			
		||||
  /* #define STM32L162xCA */   /*!< STM32L162RC-A, STM32L162VC-A, STM32L162QC and STM32L162ZC */
 | 
			
		||||
  /* #define STM32L162xD  */   /*!< STM32L162QD, STM32L162RD, STM32L162VD and STM32L162ZD */
 | 
			
		||||
  /* #define STM32L162xE  */   /*!< STM32L162RE, STM32L162VE and STM32L162ZE */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*  Tip: To avoid modifying this file each time you need to switch between these
 | 
			
		||||
        devices, you can define the device in your toolchain compiler preprocessor.
 | 
			
		||||
  */
 | 
			
		||||
  
 | 
			
		||||
#if !defined  (USE_HAL_DRIVER)
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Comment the line below if you will not use the peripherals drivers.
 | 
			
		||||
   In this case, these drivers will not be included and the application code will 
 | 
			
		||||
   be based on direct access to peripherals registers 
 | 
			
		||||
   */
 | 
			
		||||
#define USE_HAL_DRIVER
 | 
			
		||||
#endif /* USE_HAL_DRIVER */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief CMSIS Device version number V2.0.0
 | 
			
		||||
  */
 | 
			
		||||
#define __STM32L1xx_CMSIS_DEVICE_VERSION_MAIN   (0x02) /*!< [31:24] main version */                                  
 | 
			
		||||
#define __STM32L1xx_CMSIS_DEVICE_VERSION_SUB1   (0x00) /*!< [23:16] sub1 version */
 | 
			
		||||
#define __STM32L1xx_CMSIS_DEVICE_VERSION_SUB2   (0x00) /*!< [15:8]  sub2 version */
 | 
			
		||||
#define __STM32L1xx_CMSIS_DEVICE_VERSION_RC     (0x00) /*!< [7:0]  release candidate */ 
 | 
			
		||||
#define __STM32L1xx_CMSIS_DEVICE_VERSION        ((__CMSIS_DEVICE_VERSION_MAIN     << 24)\
 | 
			
		||||
                                      |(__CMSIS_DEVICE_HAL_VERSION_SUB1 << 16)\
 | 
			
		||||
                                      |(__CMSIS_DEVICE_HAL_VERSION_SUB2 << 8 )\
 | 
			
		||||
                                      |(__CMSIS_DEVICE_HAL_VERSION_RC))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup Device_Included
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if defined(STM32L100xB)
 | 
			
		||||
  #include "stm32l100xb.h"
 | 
			
		||||
#elif defined(STM32L100xBA)
 | 
			
		||||
  #include "stm32l100xba.h"
 | 
			
		||||
#elif defined(STM32L100xC)
 | 
			
		||||
  #include "stm32l100xc.h"
 | 
			
		||||
#elif defined(STM32L151xB)
 | 
			
		||||
  #include "stm32l151xb.h"
 | 
			
		||||
#elif defined(STM32L151xBA)
 | 
			
		||||
  #include "stm32l151xba.h"
 | 
			
		||||
#elif defined(STM32L151xC)
 | 
			
		||||
  #include "stm32l151xc.h"
 | 
			
		||||
#elif defined(STM32L151xCA)
 | 
			
		||||
  #include "stm32l151xca.h"
 | 
			
		||||
#elif defined(STM32L151xD)
 | 
			
		||||
  #include "stm32l151xd.h"
 | 
			
		||||
#elif defined(STM32L151xE)
 | 
			
		||||
  #include "stm32l151xe.h"
 | 
			
		||||
#elif defined(STM32L152xB)
 | 
			
		||||
  #include "stm32l152xb.h"
 | 
			
		||||
#elif defined(STM32L152xBA)
 | 
			
		||||
  #include "stm32l152xba.h"
 | 
			
		||||
#elif defined(STM32L152xC)
 | 
			
		||||
  #include "stm32l152xc.h"
 | 
			
		||||
#elif defined(STM32L152xCA)
 | 
			
		||||
  #include "stm32l152xca.h"
 | 
			
		||||
#elif defined(STM32L152xD)
 | 
			
		||||
  #include "stm32l152xd.h"
 | 
			
		||||
#elif defined(STM32L152xE)
 | 
			
		||||
  #include "stm32l152xe.h"
 | 
			
		||||
#elif defined(STM32L162xC)
 | 
			
		||||
  #include "stm32l162xc.h"
 | 
			
		||||
#elif defined(STM32L162xCA)
 | 
			
		||||
  #include "stm32l162xca.h"
 | 
			
		||||
#elif defined(STM32L162xD)
 | 
			
		||||
  #include "stm32l162xd.h"
 | 
			
		||||
#elif defined(STM32L162xE)
 | 
			
		||||
  #include "stm32l162xe.h"
 | 
			
		||||
#else
 | 
			
		||||
 #error "Please select first the target STM32L1xx device used in your application (in stm32l1xx.h file)"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup Exported_types
 | 
			
		||||
  * @{
 | 
			
		||||
  */  
 | 
			
		||||
typedef enum 
 | 
			
		||||
{
 | 
			
		||||
  RESET = 0, 
 | 
			
		||||
  SET = !RESET
 | 
			
		||||
} FlagStatus, ITStatus;
 | 
			
		||||
 | 
			
		||||
typedef enum 
 | 
			
		||||
{
 | 
			
		||||
  DISABLE = 0, 
 | 
			
		||||
  ENABLE = !DISABLE
 | 
			
		||||
} FunctionalState;
 | 
			
		||||
#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))
 | 
			
		||||
 | 
			
		||||
typedef enum 
 | 
			
		||||
{
 | 
			
		||||
  ERROR = 0, 
 | 
			
		||||
  SUCCESS = !ERROR
 | 
			
		||||
} ErrorStatus;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** @addtogroup Exported_macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#define SET_BIT(REG, BIT)     ((REG) |= (BIT))
 | 
			
		||||
 | 
			
		||||
#define CLEAR_BIT(REG, BIT)   ((REG) &= ~(BIT))
 | 
			
		||||
 | 
			
		||||
#define READ_BIT(REG, BIT)    ((REG) & (BIT))
 | 
			
		||||
 | 
			
		||||
#define CLEAR_REG(REG)        ((REG) = (0x0))
 | 
			
		||||
 | 
			
		||||
#define WRITE_REG(REG, VAL)   ((REG) = (VAL))
 | 
			
		||||
 | 
			
		||||
#define READ_REG(REG)         ((REG))
 | 
			
		||||
 | 
			
		||||
#define MODIFY_REG(REG, CLEARMASK, SETMASK)  WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK)))
 | 
			
		||||
 | 
			
		||||
#define POSITION_VAL(VAL)     (__CLZ(__RBIT(VAL))) 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if defined (USE_HAL_DRIVER)
 | 
			
		||||
 #include "stm32l1xx_hal.h"
 | 
			
		||||
#endif /* USE_HAL_DRIVER */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif /* __cplusplus */
 | 
			
		||||
 | 
			
		||||
#endif /* __STM32L1xx_H */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,604 @@
 | 
			
		|||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    system_stm32l1xx.c
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @version V2.0.0
 | 
			
		||||
  * @date    5-September-2014
 | 
			
		||||
  * @brief   CMSIS Cortex-M3 Device Peripheral Access Layer System Source File.
 | 
			
		||||
  *
 | 
			
		||||
  *   This file provides two functions and one global variable to be called from 
 | 
			
		||||
  *   user application:
 | 
			
		||||
  *      - SystemInit(): This function is called at startup just after reset and 
 | 
			
		||||
  *                      before branch to main program. This call is made inside
 | 
			
		||||
  *                      the "startup_stm32l1xx.s" file.
 | 
			
		||||
  *
 | 
			
		||||
  *      - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
 | 
			
		||||
  *                                  by the user application to setup the SysTick 
 | 
			
		||||
  *                                  timer or configure other parameters.
 | 
			
		||||
  *                                     
 | 
			
		||||
  *      - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
 | 
			
		||||
  *                                 be called whenever the core clock is changed
 | 
			
		||||
  *                                 during program execution.
 | 
			
		||||
  *
 | 
			
		||||
  * This file configures the system clock as follows:
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  * System clock source                | 1- PLL_HSE_EXTC        | 3- PLL_HSI
 | 
			
		||||
  *                                    | (external 8 MHz clock) | (internal 16 MHz)
 | 
			
		||||
  *                                    | 2- PLL_HSE_XTAL        |
 | 
			
		||||
  *                                    | (external 8 MHz xtal)  |
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  * SYSCLK(MHz)                        | 24                     | 32
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  * AHBCLK (MHz)                       | 24                     | 32
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  * APB1CLK (MHz)                      | 24                     | 32
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  * APB2CLK (MHz)                      | 24                     | 32
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  * USB capable (48 MHz precise clock) | YES                    | NO
 | 
			
		||||
  *-----------------------------------------------------------------------------
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
 | 
			
		||||
  *
 | 
			
		||||
  * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
  * are permitted provided that the following conditions are met:
 | 
			
		||||
  *   1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
  *      this list of conditions and the following disclaimer.
 | 
			
		||||
  *   2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
  *      this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
  *      and/or other materials provided with the distribution.
 | 
			
		||||
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
  *      may be used to endorse or promote products derived from this software
 | 
			
		||||
  *      without specific prior written permission.
 | 
			
		||||
  *
 | 
			
		||||
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup CMSIS
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup stm32l1xx_system
 | 
			
		||||
  * @{
 | 
			
		||||
  */  
 | 
			
		||||
  
 | 
			
		||||
/** @addtogroup STM32L1xx_System_Private_Includes
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#include "stm32l1xx.h"
 | 
			
		||||
#include "hal_tick.h"
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32L1xx_System_Private_TypesDefinitions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32L1xx_System_Private_Defines
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
#if !defined  (HSE_VALUE) 
 | 
			
		||||
  #define HSE_VALUE    ((uint32_t)8000000) /*!< Default value of the External oscillator in Hz.
 | 
			
		||||
                                                This value can be provided and adapted by the user application. */
 | 
			
		||||
#endif /* HSE_VALUE */
 | 
			
		||||
 | 
			
		||||
#if !defined  (HSI_VALUE)
 | 
			
		||||
  #define HSI_VALUE    ((uint32_t)16000000) /*!< Default value of the Internal oscillator in Hz.
 | 
			
		||||
                                                This value can be provided and adapted by the user application. */
 | 
			
		||||
#endif /* HSI_VALUE */
 | 
			
		||||
 | 
			
		||||
/*!< Uncomment the following line if you need to use external SRAM mounted
 | 
			
		||||
     on STM32L152D_EVAL board as data memory  */
 | 
			
		||||
/* #define DATA_IN_ExtSRAM */
 | 
			
		||||
  
 | 
			
		||||
/*!< Uncomment the following line if you need to relocate your vector Table in
 | 
			
		||||
     Internal SRAM. */ 
 | 
			
		||||
/* #define VECT_TAB_SRAM */
 | 
			
		||||
#define VECT_TAB_OFFSET  0x0 /*!< Vector Table base offset field. 
 | 
			
		||||
                                  This value must be a multiple of 0x200. */
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32L1xx_System_Private_Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/* Select the clock sources (other than HSI) to start with (0=OFF, 1=ON) */
 | 
			
		||||
#define USE_PLL_HSE_EXTC (1) /* Use external clock */
 | 
			
		||||
#define USE_PLL_HSE_XTAL (1) /* Use external xtal */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32L1xx_System_Private_Variables
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
  /* This variable is updated in three ways:
 | 
			
		||||
      1) by calling CMSIS function SystemCoreClockUpdate()
 | 
			
		||||
      2) by calling HAL API function HAL_RCC_GetHCLKFreq()
 | 
			
		||||
      3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
 | 
			
		||||
         Note: If you use this function to configure the system clock; then there
 | 
			
		||||
               is no need to call the 2 first functions listed above, since SystemCoreClock
 | 
			
		||||
               variable is updated automatically.
 | 
			
		||||
  */
 | 
			
		||||
uint32_t SystemCoreClock = 32000000; /* Default with HSI. Will be updated if HSE is used */
 | 
			
		||||
const uint8_t PLLMulTable[9] = {3, 4, 6, 8, 12, 16, 24, 32, 48};
 | 
			
		||||
const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32L1xx_System_Private_FunctionPrototypes
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD)
 | 
			
		||||
#ifdef DATA_IN_ExtSRAM
 | 
			
		||||
  static void SystemInit_ExtMemCtl(void); 
 | 
			
		||||
#endif /* DATA_IN_ExtSRAM */
 | 
			
		||||
#endif /* STM32L151xD || STM32L152xD || STM32L162xD */
 | 
			
		||||
 | 
			
		||||
#if (USE_PLL_HSE_XTAL != 0) || (USE_PLL_HSE_EXTC != 0)
 | 
			
		||||
uint8_t SetSysClock_PLL_HSE(uint8_t bypass);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
uint8_t SetSysClock_PLL_HSI(void);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32L1xx_System_Private_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Setup the microcontroller system.
 | 
			
		||||
  *         Initialize the Embedded Flash Interface, the PLL and update the 
 | 
			
		||||
  *         SystemCoreClock variable.
 | 
			
		||||
  * @param  None
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void SystemInit (void)
 | 
			
		||||
{
 | 
			
		||||
  /*!< Set MSION bit */
 | 
			
		||||
  RCC->CR |= (uint32_t)0x00000100;
 | 
			
		||||
 | 
			
		||||
  /*!< Reset SW[1:0], HPRE[3:0], PPRE1[2:0], PPRE2[2:0], MCOSEL[2:0] and MCOPRE[2:0] bits */
 | 
			
		||||
  RCC->CFGR &= (uint32_t)0x88FFC00C;
 | 
			
		||||
  
 | 
			
		||||
  /*!< Reset HSION, HSEON, CSSON and PLLON bits */
 | 
			
		||||
  RCC->CR &= (uint32_t)0xEEFEFFFE;
 | 
			
		||||
 | 
			
		||||
  /*!< Reset HSEBYP bit */
 | 
			
		||||
  RCC->CR &= (uint32_t)0xFFFBFFFF;
 | 
			
		||||
 | 
			
		||||
  /*!< Reset PLLSRC, PLLMUL[3:0] and PLLDIV[1:0] bits */
 | 
			
		||||
  RCC->CFGR &= (uint32_t)0xFF02FFFF;
 | 
			
		||||
 | 
			
		||||
  /*!< Disable all interrupts */
 | 
			
		||||
  RCC->CIR = 0x00000000;
 | 
			
		||||
 | 
			
		||||
#ifdef DATA_IN_ExtSRAM
 | 
			
		||||
  SystemInit_ExtMemCtl(); 
 | 
			
		||||
#endif /* DATA_IN_ExtSRAM */
 | 
			
		||||
    
 | 
			
		||||
#ifdef VECT_TAB_SRAM
 | 
			
		||||
  SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
 | 
			
		||||
#else
 | 
			
		||||
  SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  /* Configure the Cube driver */
 | 
			
		||||
  SystemCoreClock = 16000000; // At this stage the HSI is used as system clock
 | 
			
		||||
  HAL_Init();
 | 
			
		||||
 | 
			
		||||
  /* Configure the System clock source, PLL Multiplier and Divider factors,
 | 
			
		||||
     AHB/APBx prescalers and Flash settings */
 | 
			
		||||
  SetSysClock();
 | 
			
		||||
  
 | 
			
		||||
  /* Reset the timer to avoid issues after the RAM initialization */
 | 
			
		||||
  TIM_MST_RESET_ON;
 | 
			
		||||
  TIM_MST_RESET_OFF;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Update SystemCoreClock according to Clock Register Values
 | 
			
		||||
  *         The SystemCoreClock variable contains the core clock (HCLK), it can
 | 
			
		||||
  *         be used by the user application to setup the SysTick timer or configure
 | 
			
		||||
  *         other parameters.
 | 
			
		||||
  *           
 | 
			
		||||
  * @note   Each time the core clock (HCLK) changes, this function must be called
 | 
			
		||||
  *         to update SystemCoreClock variable value. Otherwise, any configuration
 | 
			
		||||
  *         based on this variable will be incorrect.         
 | 
			
		||||
  *     
 | 
			
		||||
  * @note   - The system frequency computed by this function is not the real 
 | 
			
		||||
  *           frequency in the chip. It is calculated based on the predefined 
 | 
			
		||||
  *           constant and the selected clock source:
 | 
			
		||||
  *             
 | 
			
		||||
  *           - If SYSCLK source is MSI, SystemCoreClock will contain the MSI 
 | 
			
		||||
  *             value as defined by the MSI range.
 | 
			
		||||
  *                                   
 | 
			
		||||
  *           - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
 | 
			
		||||
  *                                              
 | 
			
		||||
  *           - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
 | 
			
		||||
  *                          
 | 
			
		||||
  *           - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
 | 
			
		||||
  *             or HSI_VALUE(*) multiplied/divided by the PLL factors.
 | 
			
		||||
  *         
 | 
			
		||||
  *         (*) HSI_VALUE is a constant defined in stm32l1xx.h file (default value
 | 
			
		||||
  *             16 MHz) but the real value may vary depending on the variations
 | 
			
		||||
  *             in voltage and temperature.   
 | 
			
		||||
  *    
 | 
			
		||||
  *         (**) HSE_VALUE is a constant defined in stm32l1xx.h file (default value
 | 
			
		||||
  *              8 MHz), user has to ensure that HSE_VALUE is same as the real
 | 
			
		||||
  *              frequency of the crystal used. Otherwise, this function may
 | 
			
		||||
  *              have wrong result.
 | 
			
		||||
  *                
 | 
			
		||||
  *         - The result of this function could be not correct when using fractional
 | 
			
		||||
  *           value for HSE crystal.
 | 
			
		||||
  * @param  None
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void SystemCoreClockUpdate (void)
 | 
			
		||||
{
 | 
			
		||||
  uint32_t tmp = 0, pllmul = 0, plldiv = 0, pllsource = 0, msirange = 0;
 | 
			
		||||
 | 
			
		||||
  /* Get SYSCLK source -------------------------------------------------------*/
 | 
			
		||||
  tmp = RCC->CFGR & RCC_CFGR_SWS;
 | 
			
		||||
  
 | 
			
		||||
  switch (tmp)
 | 
			
		||||
  {
 | 
			
		||||
    case 0x00:  /* MSI used as system clock */
 | 
			
		||||
      msirange = (RCC->ICSCR & RCC_ICSCR_MSIRANGE) >> 13;
 | 
			
		||||
      SystemCoreClock = (32768 * (1 << (msirange + 1)));
 | 
			
		||||
      break;
 | 
			
		||||
    case 0x04:  /* HSI used as system clock */
 | 
			
		||||
      SystemCoreClock = HSI_VALUE;
 | 
			
		||||
      break;
 | 
			
		||||
    case 0x08:  /* HSE used as system clock */
 | 
			
		||||
      SystemCoreClock = HSE_VALUE;
 | 
			
		||||
      break;
 | 
			
		||||
    case 0x0C:  /* PLL used as system clock */
 | 
			
		||||
      /* Get PLL clock source and multiplication factor ----------------------*/
 | 
			
		||||
      pllmul = RCC->CFGR & RCC_CFGR_PLLMUL;
 | 
			
		||||
      plldiv = RCC->CFGR & RCC_CFGR_PLLDIV;
 | 
			
		||||
      pllmul = PLLMulTable[(pllmul >> 18)];
 | 
			
		||||
      plldiv = (plldiv >> 22) + 1;
 | 
			
		||||
      
 | 
			
		||||
      pllsource = RCC->CFGR & RCC_CFGR_PLLSRC;
 | 
			
		||||
 | 
			
		||||
      if (pllsource == 0x00)
 | 
			
		||||
      {
 | 
			
		||||
        /* HSI oscillator clock selected as PLL clock entry */
 | 
			
		||||
        SystemCoreClock = (((HSI_VALUE) * pllmul) / plldiv);
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
      {
 | 
			
		||||
        /* HSE selected as PLL clock entry */
 | 
			
		||||
        SystemCoreClock = (((HSE_VALUE) * pllmul) / plldiv);
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    default: /* MSI used as system clock */
 | 
			
		||||
      msirange = (RCC->ICSCR & RCC_ICSCR_MSIRANGE) >> 13;
 | 
			
		||||
      SystemCoreClock = (32768 * (1 << (msirange + 1)));
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
  /* Compute HCLK clock frequency --------------------------------------------*/
 | 
			
		||||
  /* Get HCLK prescaler */
 | 
			
		||||
  tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
 | 
			
		||||
  /* HCLK clock frequency */
 | 
			
		||||
  SystemCoreClock >>= tmp;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined (STM32L151xD) || defined (STM32L152xD) || defined (STM32L162xD)
 | 
			
		||||
#ifdef DATA_IN_ExtSRAM
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Setup the external memory controller.
 | 
			
		||||
  *         Called in SystemInit() function before jump to main.
 | 
			
		||||
  *         This function configures the external SRAM mounted on STM32L152D_EVAL board
 | 
			
		||||
  *         This SRAM will be used as program data memory (including heap and stack).
 | 
			
		||||
  * @param  None
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void SystemInit_ExtMemCtl(void)
 | 
			
		||||
{
 | 
			
		||||
/*-- GPIOs Configuration -----------------------------------------------------*/
 | 
			
		||||
/*
 | 
			
		||||
 +-------------------+--------------------+------------------+------------------+
 | 
			
		||||
 +                       SRAM pins assignment                                   +
 | 
			
		||||
 +-------------------+--------------------+------------------+------------------+
 | 
			
		||||
 | PD0  <-> FSMC_D2  | PE0  <-> FSMC_NBL0 | PF0  <-> FSMC_A0 | PG0 <-> FSMC_A10 |
 | 
			
		||||
 | PD1  <-> FSMC_D3  | PE1  <-> FSMC_NBL1 | PF1  <-> FSMC_A1 | PG1 <-> FSMC_A11 |
 | 
			
		||||
 | PD4  <-> FSMC_NOE | PE7  <-> FSMC_D4   | PF2  <-> FSMC_A2 | PG2 <-> FSMC_A12 |
 | 
			
		||||
 | PD5  <-> FSMC_NWE | PE8  <-> FSMC_D5   | PF3  <-> FSMC_A3 | PG3 <-> FSMC_A13 |
 | 
			
		||||
 | PD8  <-> FSMC_D13 | PE9  <-> FSMC_D6   | PF4  <-> FSMC_A4 | PG4 <-> FSMC_A14 |
 | 
			
		||||
 | PD9  <-> FSMC_D14 | PE10 <-> FSMC_D7   | PF5  <-> FSMC_A5 | PG5 <-> FSMC_A15 |
 | 
			
		||||
 | PD10 <-> FSMC_D15 | PE11 <-> FSMC_D8   | PF12 <-> FSMC_A6 | PG10<-> FSMC_NE2 |
 | 
			
		||||
 | PD11 <-> FSMC_A16 | PE12 <-> FSMC_D9   | PF13 <-> FSMC_A7 |------------------+
 | 
			
		||||
 | PD12 <-> FSMC_A17 | PE13 <-> FSMC_D10  | PF14 <-> FSMC_A8 | 
 | 
			
		||||
 | PD13 <-> FSMC_A18 | PE14 <-> FSMC_D11  | PF15 <-> FSMC_A9 | 
 | 
			
		||||
 | PD14 <-> FSMC_D0  | PE15 <-> FSMC_D12  |------------------+
 | 
			
		||||
 | PD15 <-> FSMC_D1  |--------------------+ 
 | 
			
		||||
 +-------------------+
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
  /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */
 | 
			
		||||
  RCC->AHBENR   = 0x000080D8;
 | 
			
		||||
  
 | 
			
		||||
  /* Connect PDx pins to FSMC Alternate function */
 | 
			
		||||
  GPIOD->AFR[0]  = 0x00CC00CC;
 | 
			
		||||
  GPIOD->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PDx pins in Alternate function mode */  
 | 
			
		||||
  GPIOD->MODER   = 0xAAAA0A0A;
 | 
			
		||||
  /* Configure PDx pins speed to 40 MHz */  
 | 
			
		||||
  GPIOD->OSPEEDR = 0xFFFF0F0F;
 | 
			
		||||
  /* Configure PDx pins Output type to push-pull */  
 | 
			
		||||
  GPIOD->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PDx pins */ 
 | 
			
		||||
  GPIOD->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PEx pins to FSMC Alternate function */
 | 
			
		||||
  GPIOE->AFR[0]  = 0xC00000CC;
 | 
			
		||||
  GPIOE->AFR[1]  = 0xCCCCCCCC;
 | 
			
		||||
  /* Configure PEx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOE->MODER   = 0xAAAA800A;
 | 
			
		||||
  /* Configure PEx pins speed to 40 MHz */ 
 | 
			
		||||
  GPIOE->OSPEEDR = 0xFFFFC00F;
 | 
			
		||||
  /* Configure PEx pins Output type to push-pull */  
 | 
			
		||||
  GPIOE->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PEx pins */ 
 | 
			
		||||
  GPIOE->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PFx pins to FSMC Alternate function */
 | 
			
		||||
  GPIOF->AFR[0]  = 0x00CCCCCC;
 | 
			
		||||
  GPIOF->AFR[1]  = 0xCCCC0000;
 | 
			
		||||
  /* Configure PFx pins in Alternate function mode */   
 | 
			
		||||
  GPIOF->MODER   = 0xAA000AAA;
 | 
			
		||||
  /* Configure PFx pins speed to 40 MHz */ 
 | 
			
		||||
  GPIOF->OSPEEDR = 0xFF000FFF;
 | 
			
		||||
  /* Configure PFx pins Output type to push-pull */  
 | 
			
		||||
  GPIOF->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PFx pins */ 
 | 
			
		||||
  GPIOF->PUPDR   = 0x00000000;
 | 
			
		||||
 | 
			
		||||
  /* Connect PGx pins to FSMC Alternate function */
 | 
			
		||||
  GPIOG->AFR[0]  = 0x00CCCCCC;
 | 
			
		||||
  GPIOG->AFR[1]  = 0x00000C00;
 | 
			
		||||
  /* Configure PGx pins in Alternate function mode */ 
 | 
			
		||||
  GPIOG->MODER   = 0x00200AAA;
 | 
			
		||||
  /* Configure PGx pins speed to 40 MHz */ 
 | 
			
		||||
  GPIOG->OSPEEDR = 0x00300FFF;
 | 
			
		||||
  /* Configure PGx pins Output type to push-pull */  
 | 
			
		||||
  GPIOG->OTYPER  = 0x00000000;
 | 
			
		||||
  /* No pull-up, pull-down for PGx pins */ 
 | 
			
		||||
  GPIOG->PUPDR   = 0x00000000;
 | 
			
		||||
  
 | 
			
		||||
/*-- FSMC Configuration ------------------------------------------------------*/
 | 
			
		||||
  /* Enable the FSMC interface clock */
 | 
			
		||||
  RCC->AHBENR    = 0x400080D8;
 | 
			
		||||
 | 
			
		||||
  /* Configure and enable Bank1_SRAM3 */
 | 
			
		||||
  FSMC_Bank1->BTCR[4]  = 0x00001011;
 | 
			
		||||
  FSMC_Bank1->BTCR[5]  = 0x00000300;
 | 
			
		||||
  FSMC_Bank1E->BWTR[4] = 0x0FFFFFFF;
 | 
			
		||||
/*
 | 
			
		||||
  Bank1_SRAM3 is configured as follow:
 | 
			
		||||
 | 
			
		||||
  p.FSMC_AddressSetupTime = 0;
 | 
			
		||||
  p.FSMC_AddressHoldTime = 0;
 | 
			
		||||
  p.FSMC_DataSetupTime = 3;
 | 
			
		||||
  p.FSMC_BusTurnAroundDuration = 0;
 | 
			
		||||
  p.FSMC_CLKDivision = 0;
 | 
			
		||||
  p.FSMC_DataLatency = 0;
 | 
			
		||||
  p.FSMC_AccessMode = FSMC_AccessMode_A;
 | 
			
		||||
 | 
			
		||||
  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM3;
 | 
			
		||||
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
 | 
			
		||||
  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
 | 
			
		||||
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
 | 
			
		||||
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
 | 
			
		||||
  FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
 | 
			
		||||
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
 | 
			
		||||
  FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
 | 
			
		||||
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
 | 
			
		||||
  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
 | 
			
		||||
  FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
 | 
			
		||||
  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
 | 
			
		||||
  FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
 | 
			
		||||
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
 | 
			
		||||
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
 | 
			
		||||
 | 
			
		||||
  FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure); 
 | 
			
		||||
 | 
			
		||||
  FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM3, ENABLE);
 | 
			
		||||
*/
 | 
			
		||||
  
 | 
			
		||||
}
 | 
			
		||||
#endif /* DATA_IN_ExtSRAM */
 | 
			
		||||
#endif /* STM32L151xD || STM32L152xD || STM32L162xD */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @brief  Configures the System clock source, PLL Multiplier and Divider factors,
 | 
			
		||||
  *               AHB/APBx prescalers and Flash settings
 | 
			
		||||
  * @note   This function should be called only once the RCC clock configuration  
 | 
			
		||||
  *         is reset to the default reset state (done in SystemInit() function).             
 | 
			
		||||
  * @param  None
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
void SetSysClock(void)
 | 
			
		||||
{
 | 
			
		||||
  /* 1- Try to start with HSE and external clock */
 | 
			
		||||
#if USE_PLL_HSE_EXTC != 0
 | 
			
		||||
  if (SetSysClock_PLL_HSE(1) == 0)
 | 
			
		||||
#endif
 | 
			
		||||
  {
 | 
			
		||||
    /* 2- If fail try to start with HSE and external xtal */
 | 
			
		||||
    #if USE_PLL_HSE_XTAL != 0
 | 
			
		||||
    if (SetSysClock_PLL_HSE(0) == 0)
 | 
			
		||||
    #endif
 | 
			
		||||
    {
 | 
			
		||||
      /* 3- If fail start with HSI clock */
 | 
			
		||||
      if (SetSysClock_PLL_HSI() == 0)
 | 
			
		||||
      {
 | 
			
		||||
        while(1)
 | 
			
		||||
        {
 | 
			
		||||
          // [TODO] Put something here to tell the user that a problem occured...
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  /* Output clock on MCO1 pin(PA8) for debugging purpose */
 | 
			
		||||
  //HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_SYSCLK, RCC_MCODIV_1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if (USE_PLL_HSE_XTAL != 0) || (USE_PLL_HSE_EXTC != 0)
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
/*            PLL (clocked by HSE) used as System clock source                */
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
uint8_t SetSysClock_PLL_HSE(uint8_t bypass)
 | 
			
		||||
{
 | 
			
		||||
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
 | 
			
		||||
  RCC_OscInitTypeDef RCC_OscInitStruct;
 | 
			
		||||
 | 
			
		||||
  /* Used to gain time after DeepSleep in case HSI is used */
 | 
			
		||||
  if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET)
 | 
			
		||||
  {
 | 
			
		||||
    return 0;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  /* The voltage scaling allows optimizing the power consumption when the device is 
 | 
			
		||||
     clocked below the maximum system frequency, to update the voltage scaling value 
 | 
			
		||||
     regarding system frequency refer to product datasheet. */
 | 
			
		||||
  __PWR_CLK_ENABLE();
 | 
			
		||||
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
 | 
			
		||||
  
 | 
			
		||||
  /* Enable HSE and HSI48 oscillators and activate PLL with HSE as source */
 | 
			
		||||
  RCC_OscInitStruct.OscillatorType      = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI;
 | 
			
		||||
  if (bypass == 0)
 | 
			
		||||
  {
 | 
			
		||||
    RCC_OscInitStruct.HSEState          = RCC_HSE_ON; /* External 8 MHz xtal on OSC_IN/OSC_OUT */
 | 
			
		||||
  }
 | 
			
		||||
  else
 | 
			
		||||
  {
 | 
			
		||||
    RCC_OscInitStruct.HSEState          = RCC_HSE_BYPASS; /* External 8 MHz clock on OSC_IN */
 | 
			
		||||
  }
 | 
			
		||||
  RCC_OscInitStruct.HSIState            = RCC_HSI_OFF;
 | 
			
		||||
  // SYSCLK = 24 MHz ((8 MHz * 6) / 2)
 | 
			
		||||
  // USBCLK = 48 MHz (8 MHz * 6) --> USB OK
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLState        = RCC_PLL_ON;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLSource       = RCC_PLLSOURCE_HSE;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLMUL          = RCC_PLL_MUL6;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLDIV          = RCC_PLL_DIV2;
 | 
			
		||||
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
    return 0; // FAIL
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
  /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */
 | 
			
		||||
  RCC_ClkInitStruct.ClockType      = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
 | 
			
		||||
  RCC_ClkInitStruct.SYSCLKSource   = RCC_SYSCLKSOURCE_PLLCLK; // 24 MHz
 | 
			
		||||
  RCC_ClkInitStruct.AHBCLKDivider  = RCC_SYSCLK_DIV1;         // 24 MHz
 | 
			
		||||
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;           // 24 MHz
 | 
			
		||||
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;           // 24 MHz
 | 
			
		||||
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
    return 0; // FAIL
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Output clock on MCO1 pin(PA8) for debugging purpose */
 | 
			
		||||
  //if (bypass == 0)
 | 
			
		||||
    //HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_2); // 4 MHz
 | 
			
		||||
  //else
 | 
			
		||||
    //HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_1); // 8 MHz
 | 
			
		||||
  
 | 
			
		||||
  return 1; // OK
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
/*            PLL (clocked by HSI) used as System clock source                */
 | 
			
		||||
/******************************************************************************/
 | 
			
		||||
uint8_t SetSysClock_PLL_HSI(void)
 | 
			
		||||
{
 | 
			
		||||
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
 | 
			
		||||
  RCC_OscInitTypeDef RCC_OscInitStruct;
 | 
			
		||||
 | 
			
		||||
  /* The voltage scaling allows optimizing the power consumption when the device is 
 | 
			
		||||
     clocked below the maximum system frequency, to update the voltage scaling value 
 | 
			
		||||
     regarding system frequency refer to product datasheet. */
 | 
			
		||||
  __PWR_CLK_ENABLE();
 | 
			
		||||
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
 | 
			
		||||
  
 | 
			
		||||
  /* Enable HSI oscillator and activate PLL with HSI as source */
 | 
			
		||||
  RCC_OscInitStruct.OscillatorType      = RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_HSE;
 | 
			
		||||
  RCC_OscInitStruct.HSEState            = RCC_HSE_OFF;
 | 
			
		||||
  RCC_OscInitStruct.HSIState            = RCC_HSI_ON;
 | 
			
		||||
  // SYSCLK = 32 MHz ((16 MHz * 4) / 2)
 | 
			
		||||
  // USBCLK = 64 MHz (16 MHz * 4) --> USB not possible
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLState        = RCC_PLL_ON;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLSource       = RCC_PLLSOURCE_HSI;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLMUL          = RCC_PLL_MUL4;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLDIV          = RCC_PLL_DIV2;
 | 
			
		||||
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
    return 0; // FAIL
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  /* Poll VOSF bit of in PWR_CSR. Wait until it is reset to 0 */
 | 
			
		||||
  while (__HAL_PWR_GET_FLAG(PWR_FLAG_VOS) != RESET) {};
 | 
			
		||||
 | 
			
		||||
  /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2 clocks dividers */
 | 
			
		||||
  RCC_ClkInitStruct.ClockType      = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
 | 
			
		||||
  RCC_ClkInitStruct.SYSCLKSource   = RCC_SYSCLKSOURCE_PLLCLK; // 32 MHz
 | 
			
		||||
  RCC_ClkInitStruct.AHBCLKDivider  = RCC_SYSCLK_DIV1;         // 32 MHz
 | 
			
		||||
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;           // 32 MHz
 | 
			
		||||
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;           // 32 MHz
 | 
			
		||||
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
 | 
			
		||||
  {
 | 
			
		||||
    return 0; // FAIL
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* Output clock on MCO1 pin(PA8) for debugging purpose */
 | 
			
		||||
  //HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSI, RCC_MCODIV_1); // 16 MHz
 | 
			
		||||
  
 | 
			
		||||
  return 1; // OK
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,123 @@
 | 
			
		|||
/**
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @file    system_stm32l1xx.h
 | 
			
		||||
  * @author  MCD Application Team
 | 
			
		||||
  * @version V2.0.0
 | 
			
		||||
  * @date    5-September-2014
 | 
			
		||||
  * @brief   CMSIS Cortex-M3 Device System Source File for STM32L1xx devices.  
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  * @attention
 | 
			
		||||
  *
 | 
			
		||||
  * <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
 | 
			
		||||
  *
 | 
			
		||||
  * Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
  * are permitted provided that the following conditions are met:
 | 
			
		||||
  *   1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
  *      this list of conditions and the following disclaimer.
 | 
			
		||||
  *   2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
  *      this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
  *      and/or other materials provided with the distribution.
 | 
			
		||||
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
  *      may be used to endorse or promote products derived from this software
 | 
			
		||||
  *      without specific prior written permission.
 | 
			
		||||
  *
 | 
			
		||||
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
  *
 | 
			
		||||
  ******************************************************************************
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup CMSIS
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup stm32l1xx_system
 | 
			
		||||
  * @{
 | 
			
		||||
  */  
 | 
			
		||||
  
 | 
			
		||||
/**
 | 
			
		||||
  * @brief Define to prevent recursive inclusion
 | 
			
		||||
  */
 | 
			
		||||
#ifndef __SYSTEM_STM32L1XX_H
 | 
			
		||||
#define __SYSTEM_STM32L1XX_H
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
 extern "C" {
 | 
			
		||||
#endif 
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32L1xx_System_Includes
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32L1xx_System_Exported_types
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
  /* This variable is updated in three ways:
 | 
			
		||||
      1) by calling CMSIS function SystemCoreClockUpdate()
 | 
			
		||||
      2) by calling HAL API function HAL_RCC_GetSysClockFreq()
 | 
			
		||||
      3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency 
 | 
			
		||||
         Note: If you use this function to configure the system clock; then there
 | 
			
		||||
               is no need to call the 2 first functions listed above, since SystemCoreClock
 | 
			
		||||
               variable is updated automatically.
 | 
			
		||||
  */
 | 
			
		||||
extern uint32_t SystemCoreClock;          /*!< System Clock Frequency (Core Clock) */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32L1xx_System_Exported_Constants
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32L1xx_System_Exported_Macros
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
/** @addtogroup STM32L1xx_System_Exported_Functions
 | 
			
		||||
  * @{
 | 
			
		||||
  */
 | 
			
		||||
  
 | 
			
		||||
extern void SystemInit(void);
 | 
			
		||||
extern void SystemCoreClockUpdate(void);
 | 
			
		||||
extern void SetSysClock(void);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif /*__SYSTEM_STM32L1XX_H */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */
 | 
			
		||||
  
 | 
			
		||||
/**
 | 
			
		||||
  * @}
 | 
			
		||||
  */  
 | 
			
		||||
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
 | 
			
		||||
		Loading…
	
		Reference in New Issue