Basic knowledge framework
Class notes
Startup process after normal reset
Will STM32 execute the main function immediately after reset and power on?
No, before executing the main function, STM32 will experience:
- Hardware select boot mode
- Read the interrupt vector table of the memory corresponding to the startup mode
- Initialization stack
- Initialize PC pointer to Reset Handler
- Initialize system clock
- Execute C library functions__ Main, enter the world of C language and execute the main function
These processes executed before the main function are called STM32 startup processes. Although this process is difficult to understand, it must be mastered
Hardware
There are BOOT0 and BOOT1 pins in the pins led out by STM32 single chip microcomputer. By adding different levels to these two pins, STM32 can enter different startup modes
BOOT0 | BOOT1 | storage | Memory corresponding address |
---|---|---|---|
0 | X | Internal Flash (common) | 0x0800 0000 |
1 | 0 | System memory (store the ISP program written by the manufacturer, read-only, run the ISP program, and save the data transmitted from the serial port to the internal Flash) | 0x1FFF 0000 |
1 | 1 | Internal sRam (code data will be lost after power failure and can be used to execute temporary code) | 0x2000 0000 |
Software
After hardware judgment, STM32 will select the storage medium corresponding to the code (such as internal Flash), and start reading data from the memory base address to find the interrupt vector table
interrupt
Interrupt refers to the behavior that STM32 needs to save the progress of the current task, handle other tasks, handle the exceptions, and then return to the original task.
For example, when a person is eating (current task) and his express arrives (abnormal situation), he puts down his dishes and chopsticks (save the progress), goes to get the express (perform the abnormal task), and then returns home for dinner (return to perform the original task). This is "interruption"
Interrupt vector table
For the machine, the abnormal conditions encountered will not be too complex. All emergencies can be summarized through the interrupt vector table
The interrupt vector table is essentially a 32-bit integer array, which stores the address of the corresponding task function to be executed when an exception occurs. When an exception occurs, the corresponding address will be assigned to the PC register to execute the corresponding task
The following is the interrupt vector table stored in Flash
Priority: the smaller the priority label, the higher the interrupt priority
MSP: Main Stack Pointer refers to the Main Stack Pointer
Taking the Flash memory as an example, after finding the interrupt vector table, STM32 starts to execute the code from the address 0x0000 0000. The first task to be executed is to initialize the main stack pointer MSP, and the next step is to execute the interrupt Reset after Reset (power on again after Reset is also an exception). The corresponding processing function is Reset Handler(). There are two main things to be done by Reset Handler:
- Initialize the system clock through the SystemInit() function
- Through C library function__ Main, execute the user function main
The above is the general start-up process of STM32 single chip microcomputer
Flash startup file
For the software part of the STM32 startup process, you can modify the startup file stm32f10x_xx.s to configure. According to different models and available resources, xx can be divided into:
The contents of different startup files are similar. Its main task is
- Initialize heap
- Initialization stack
- Configure interrupt handler function Reset Handler
- Configure system clock
- Through C library function__ Main, run the user function main
- User stack configuration
Start up with medium capacity_ stm32f10x_ HD. S file as an example, the following is the file content:
;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** ;* File Name : startup_stm32f10x_md.s ;* Author : MCD Application Team ;* Version : V3.5.0 ;* Date : 11-March-2011 ;* Description : STM32F10x Medium Density Devices vector table for MDK-ARM ;* toolchain. ;* This module performs: ;* - Set the initial SP ;* - Set the initial PC == Reset_Handler ;* - Set the vector table entries with the exceptions ISR address ;* - Configure the clock system ;* - Branches to __main in the C library (which eventually ;* calls main()). ;* After Reset the CortexM3 processor is in Thread mode, ;* priority is Privileged, and the Stack is set to Main. ;* <<< Use Configuration Wizard in Context Menu >>> ;******************************************************************************* ; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS ; WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. ; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, ; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE ; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING ; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. ;******************************************************************************* ; Data segment ; Stack initialization ; 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 ; Defines the stack size as 1 KB AREA STACK, NOINIT, READWRITE, ALIGN=3 ; Assign a data segment with the name`STACK`,The data segment is not initialized,Can read and write, 8 (2)^3)byte alignment Stack_Mem SPACE Stack_Size ; Assign 1 to stack KB Space of __initial_sp ; Stack top address. The stack grows from high address to low address ; Heap initialization ; <h> Heap Configuration ; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> ; </h> Heap_Size EQU 0x00000200 ; The size of the defined heap is 256 B AREA HEAP, NOINIT, READWRITE, ALIGN=3 ; Assign a data segment with the name`HEAP`,The data segment is not initialized,Can read and write, 8 (2)^3)byte alignment __heap_base ; Start address of heap Heap_Mem SPACE Heap_Size ; Allocate 256 to heap B Space of __heap_limit ; End address of heap PRESERVE8 ; Stack of current file, aligned by 8 bytes THUMB ; Indicates that the following instructions are compatible THUMB Instructions. THUBM yes ARM Previous instruction sets, 16 bit,Now? Cortex-M Series are used THUMB-2 Instruction set, THUMB-2 It is 32-bit, compatible with 16 bit and 32-bit instructions, yes THUMB Superset of ; Configure the interrupt vector table from address 0 x0000 0000 start ; Vector Table Mapped to Address 0 at Reset AREA RESET, DATA, READONLY ; Assign a data segment with the name`RESET`,This segment is read-only EXPORT __Vectors ; Define external label__Vectors,Read from external file EXPORT __Vectors_End ; Define external label__Vectors_End,Read from external file EXPORT __Vectors_Size ; Define external label__Vectors_Size,Read from external file ;Allocate memory space for the address of the interrupt processing function and store it in the vector table (Note: the address is stored). The specific contents can be found in STM32 Chinese Reference Manual __Vectors DCD __initial_sp ; Reserve 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 ; Reserve DCD 0 ; Reserve DCD 0 ; Reserve DCD 0 ; Reserve DCD SVC_Handler ; SVCall Handler DCD DebugMon_Handler ; Debug Monitor Handler DCD 0 ; Reserve DCD PendSV_Handler ; PendSV Handler DCD SysTick_Handler ; SysTick Handler ; Interrupt address of peripheral ; External Interrupts DCD WWDG_IRQHandler ; Window Watchdog DCD PVD_IRQHandler ; PVD through EXTI Line detect DCD TAMPER_IRQHandler ; Tamper DCD RTC_IRQHandler ; RTC 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_2_IRQHandler ; ADC1_2 DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX DCD USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0 DCD CAN1_RX1_IRQHandler ; CAN1 RX1 DCD CAN1_SCE_IRQHandler ; CAN1 SCE DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 DCD TIM1_BRK_IRQHandler ; TIM1 Break DCD TIM1_UP_IRQHandler ; TIM1 Update DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare 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 RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend __Vectors_End ; End of interrupt vector table __Vectors_Size EQU __Vectors_End - __Vectors ; Calculate vector table size ; Code snippet AREA |.text|, CODE, READONLY ; Assign a code segment with a data segment name of`|.text|`,Define a code segment that is read-only ; Reset interrupt function ; Reset handler Reset_Handler PROC ; Define functions, PROC...ENDP Represents the beginning and end of a function, with the function content in the middle EXPORT Reset_Handler [WEAK] ; bring Reset Handler Function has global properties, and other external functions can also use this function IMPORT __main ; Description This function is externally defined IMPORT SystemInit LDR R0, =SystemInit ; external SystemInit Function to initialize the system clock BLX R0 LDR R0, =__main ; adopt C Library function__main,Can enter BX R0 ENDP ; Dummy Exception Handlers (infinite loops which can be modified) ; [WEAK]The instruction will preferentially use external link symbols, but without a prototype, the compiler will not report an error 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_IRQHandler [WEAK] EXPORT RTC_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_2_IRQHandler [WEAK] EXPORT USB_HP_CAN1_TX_IRQHandler [WEAK] EXPORT USB_LP_CAN1_RX0_IRQHandler [WEAK] EXPORT CAN1_RX1_IRQHandler [WEAK] EXPORT CAN1_SCE_IRQHandler [WEAK] EXPORT EXTI9_5_IRQHandler [WEAK] EXPORT TIM1_BRK_IRQHandler [WEAK] EXPORT TIM1_UP_IRQHandler [WEAK] EXPORT TIM1_TRG_COM_IRQHandler [WEAK] EXPORT TIM1_CC_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 RTCAlarm_IRQHandler [WEAK] EXPORT USBWakeUp_IRQHandler [WEAK] WWDG_IRQHandler PVD_IRQHandler TAMPER_IRQHandler RTC_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_2_IRQHandler USB_HP_CAN1_TX_IRQHandler USB_LP_CAN1_RX0_IRQHandler CAN1_RX1_IRQHandler CAN1_SCE_IRQHandler EXTI9_5_IRQHandler TIM1_BRK_IRQHandler TIM1_UP_IRQHandler TIM1_TRG_COM_IRQHandler TIM1_CC_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 RTCAlarm_IRQHandler USBWakeUp_IRQHandler B . ENDP ALIGN ;******************************************************************************* ; User Stack and Heap initialization ;******************************************************************************* IF :DEF:__MICROLIB EXPORT __initial_sp EXPORT __heap_base EXPORT __heap_limit ELSE IMPORT __use_two_region_memory EXPORT __user_initial_stackheap __user_initial_stackheap LDR R0, = Heap_Mem LDR R1, =(Stack_Mem + Stack_Size) LDR R2, = (Heap_Mem + Heap_Size) LDR R3, = Stack_Mem BX LR ALIGN ENDIF END ;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE*****
Basic knowledge framework Xmind file download
Link: Resource download