STM32小白入门(第五天)-------启动文件、系统时钟

一、启动文件startup_stm32f40x_41xx.s

1)定义

启动文件由汇编编写,是系统上电复位后第一执行的程序

2)特征

  1. 初始化堆栈指针,主要是为C语言提供良好的运行环境
  2. 进行复位处理,执行该Reset_Handler函数
  3. 初始化中断向量表,中断入口地址列表
  4. 配置系统的时钟,调用SystemInit
  5. 调用C库函数__main进入main.c中的main函数执行

 

 

二、异常向量表

1、8051AT89S51共有5个中断源,2个外部中断、2个定时器中断、1个串口中断。

中断               入口地址          中断号

外部中断0                  0003H                  0

定时器0                   000BH                  1

外部中断1                  0013H                  2

定时器1                   001BH                  3

串口中断                  0023H                  4

 

2、ARMCortex-M4

汇编文件当中的异常量表(中断入口地址的集合)

; Vector Table Mapped toAddress 0 at Reset
                AREA    RESET, DATA, READONLY
                EXPORT  __Vectors
                EXPORT  __Vectors_End
                EXPORT  __Vectors_Size
__Vectors       DCD    __initial_sp               ; Topof 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 Linedetection
                DCD     TAMP_STAMP_IRQHandler             ; Tamper and TimeStamps throughthe EXTI line
                DCD     RTC_WKUP_IRQHandler               ; RTC Wakeup through the EXTIline
                DCD     FLASH_IRQHandler                  ; FLASH    
                DCD     RCC_IRQHandler                    ; RCC      
                DCD     EXTI0_IRQHandler                  ; EXTI Line0
                DCD     EXTI1_IRQHandler                  ; EXTI Line1
                DCD     EXTI2_IRQHandler                  ; EXTI Line2
                DCD     EXTI3_IRQHandler                  ; EXTI Line3
                DCD     EXTI4_IRQHandler                  ; EXTI Line4
              .............................   
SysTick_Handler PROC
                EXPORT  SysTick_Handler            [WEAK]
                B       .
                ENDP
                EXPORT  EXTI0_IRQHandler                  [WEAK]
EXTI0_IRQHandler             //空函数
                B  .      //死循环

WEAK关键字作用 

 如果外部没有定义SysTick_Handler,就使用当前的汇编代码的SysTick_Handler。如果在汇编文件外面定义了SysTick_Handler就执行外面定义好的函数。

----------------------------------------------------------------------------------------------------------

三、系统时钟

SysTick叫做系统滴答时钟、系统定时器,属于Cortex-M4内核中的一个外设,它24bit向下递减的计数器。

STM32小白入门(第五天)-------启动文件、系统时钟_第1张图片STM32小白入门(第五天)-------启动文件、系统时钟_第2张图片

二、系统定时器的中断使用方法

1.代码的初始化

//初始化系统定时器,1S内核触发1000次中断,说白了定时1ms
	SysTick_Config(SystemCoreClock/1000);
 
中断服务函数的编写
 
void SysTick_Handler(void)
{
	static uint32_t cnt=0;
 
	cnt++;
	//到达500ms的定时
	if(cnt >= 500)
	{
		cnt=0;
		
		PFout(9)^=1;
	}
}

三、定时时间的计算

STM32小白入门(第五天)-------启动文件、系统时钟_第3张图片

在额定频率情况下,最大定时时间 = 2^24 /168000000 ≈ 99.86ms

在超频的频率(216MHz)下,最大定时时间 =2^24 /216000000≈77.67ms

 

测试结果:

        //初始化系统定时器,1S内核触发1000次中断,说白了定时1ms,能够成功

        //SysTick_Config(SystemCoreClock/1000);

        

        //初始化系统定时器,1S内核触发10次中断,说白了定时100ms,现象失败

        SysTick_Config(SystemCoreClock/10);        

        

        //初始化系统定时器,1S内核触发11次中断,说白了定时90.90ms,能够成功

        SysTick_Config(SystemCoreClock/11);

四、系统定时器的用途

 

两个方面:

 

1没有操作系统:只用于延时

2有操作系统(ucos2 ucos3 freertos....):为操作系统提供精准的定时中断(1ms~50ms)

 

STM32小白入门(第五天)-------启动文件、系统时钟_第4张图片

当SysTick使用168MHz系统时钟频率并进行8分频时,代码编写如下:

 最大的延时时间 = 2^24/ 21000000 ≈ 798.91ms

STM32小白入门(第五天)-------启动文件、系统时钟_第5张图片

STM32小白入门(第五天)-------启动文件、系统时钟_第6张图片


你可能感兴趣的:(STM32)