STM32小白入门(第五天)-------启动文件、系统时钟
2018-03-18 17:55
567 查看
一、启动文件,startup_stm32f40x_41xx.s1)定义启动文件由汇编编写,是系统上电复位后第一执行的程序2)特征
初始化堆栈指针,主要是为C语言提供良好的运行环境
进行复位处理,执行该Reset_Handler函数
初始化中断向量表,中断入口地址列表
配置系统的时钟,调用SystemInit
调用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向下递减的计数器。
二、系统定时器的中断使用方法1.代码的初始化//初始化系统定时器,1S内核触发1000次中断,说白了定时1ms
SysTick_Config(Syst
4000
emCoreClock/1000);
中断服务函数的编写
void SysTick_Handler(void)
{
static uint32_t cnt=0;
cnt++;
//到达500ms的定时
if(cnt >= 500)
{
cnt=0;
PFout(9)^=1;
}
}
三、定时时间的计算
在额定频率情况下,最大定时时间 = 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)
当SysTick使用168MHz系统时钟频率并进行8分频时,代码编写如下: 最大的延时时间 = 2^24/ 21000000 ≈ 798.91ms
初始化堆栈指针,主要是为C语言提供良好的运行环境
进行复位处理,执行该Reset_Handler函数
初始化中断向量表,中断入口地址列表
配置系统的时钟,调用SystemInit
调用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向下递减的计数器。
二、系统定时器的中断使用方法1.代码的初始化//初始化系统定时器,1S内核触发1000次中断,说白了定时1ms
SysTick_Config(Syst
4000
emCoreClock/1000);
中断服务函数的编写
void SysTick_Handler(void)
{
static uint32_t cnt=0;
cnt++;
//到达500ms的定时
if(cnt >= 500)
{
cnt=0;
PFout(9)^=1;
}
}
三、定时时间的计算
在额定频率情况下,最大定时时间 = 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)
当SysTick使用168MHz系统时钟频率并进行8分频时,代码编写如下: 最大的延时时间 = 2^24/ 21000000 ≈ 798.91ms
相关文章推荐
- STM32 eCos 启动代码分析(三)系统时钟滴答
- STM32小白入门(第13天)-------RTC实时时钟和闹钟事件
- STM32 入门教程 系统时钟 SysTick
- 【转】 STM32 入门教程 系统时钟 SysTick
- 单片机入门学习八 STM32单片机学习五 时钟系统
- STM32时钟系统与时钟启动顺序详解
- STM32系统启动文件分析
- STM32学习笔记(六) SysTick系统时钟滴答实验(stm32中断入门)
- STM32 入门教程 系统时钟 SysTick
- UFT入门教程(7)—设置对象标识、启动系统监控器
- Unix环境高级程序设计入门--文件系统的相关编程(上)
- Linux 文件系统、启动过程 之 内核剖析 读笔
- 启动根文件系统时提示WARNING: Unable to open an initial console的解决办法
- 系统启动文件grub的配置
- u-boot-2012.04.01移植到TQ2440(七):添加分区信息并启动jffs2文件系统
- STM32的启动文件的选择(由容量大小决定)
- Windows MySQL(zip版本),启动不了,因为缺少data文件。(双系统修复三)
- sde启动报错“系统找不到指定的文件”
- STM32启动文件详解——startup_stm32f10x_xx.s
- c#扩展SPRING,配置里有不存在的业务系统xml导致不能启动问题,把配置文件里有重复的服务ID找出来并写入到日志