历史上的今天
返回首页

历史上的今天

今天是:2025年07月10日(星期四)

正在发生

2019年07月10日 | STM32小白入门(第五天)-------启动文件、系统时钟

2019-07-10 来源:eefocus

一、启动文件,startup_stm32f40x_41xx.s


1)定义


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


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(SystemCoreClock/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



推荐阅读

史海拾趣

Fortiming Corporation公司的发展小趣事

背景:2001年9月5日,Fortiming Corporation在内华达州正式成立(来源:企查查)。在成立之初,公司就明确了自己的市场定位——专注于提供高质量的石英晶振、晶体振荡器等频率控制产品。

发展:面对当时竞争激烈的电子行业,Fortiming凭借其对技术的深刻理解和对市场需求的敏锐洞察,迅速在石英晶振领域站稳脚跟。公司不仅注重产品研发,还积极引进先进生产设备,提升产品质量和生产效率。

DFRobot公司的发展小趣事

在机器人和开源硬件领域取得一定成绩后,DFRobot开始关注教育市场。他们发现,越来越多的学校和教育机构开始引入机器人和编程课程,以培养学生的创新能力和实践能力。于是,DFRobot推出了一系列针对青少年和创客爱好者的教育产品,如机器人套件、3D打印机等,并通过举办各类竞赛和培训活动,吸引更多的学生和教师参与。这一举措不仅拓展了公司的业务领域,也为公司的长期发展奠定了人才基础。

Compact公司的发展小趣事

随着电子市场的日益成熟,Compact公司意识到单纯的技术创新已不足以支撑其长期发展。于是,公司开始积极寻求市场拓展和战略合作的机会。通过与国内外知名企业建立合作伙伴关系,Compact公司成功将其产品打入国际市场,进一步扩大了市场份额。同时,通过与上下游企业的紧密合作,Compact公司实现了产业链的整合,提高了整体运营效率。

Banner Engineering公司的发展小趣事

Banner Engineering公司一直将质量管理作为企业发展的核心。公司建立了完善的质量管理体系,从原材料采购、生产制造到产品出厂,每一个环节都进行严格的质量控制。同时,公司还注重持续改进,通过不断优化生产流程、提高生产效率、降低生产成本等方式,不断提升产品质量和企业竞争力。这些努力使公司的产品在市场上获得了良好的口碑和信誉。

ACCUTEK公司的发展小趣事

随着技术的不断进步,ACCUTEK公司意识到要想在竞争激烈的电子行业中脱颖而出,必须不断进行技术创新和产品升级。公司加大了对研发的投入,引进了一批高素质的研发人才,并与多所高校和研究机构建立了合作关系。经过数年的努力,公司成功开发出了多款具有自主知识产权的高精度数控设备,这些产品在市场上获得了广泛好评,为公司的发展奠定了坚实基础。

HTC Korea(TAEJIN Technology )公司的发展小趣事

HTC Korea自成立以来,一直致力于国际化布局,与全球各地的合作伙伴建立了良好的关系。目前,HTC的产品已在欧美、亚泰地区大量销售,与各地的电信运营商、芯片制造商等保持了紧密的合作关系。这种广泛的合作伙伴网络为HTC提供了强大的市场支持和技术保障,推动了其在全球范围内的快速发展。同时,HTC还通过了ISO9001及ISO14001质量体系认证,以系统、人性化的管理努力成为行业的佼佼者。

问答坊 | AI 解惑

我下了

:多谢大家了…

查看全部问答>

基于51的电子钟!!!高手来传我一个~~~~~~~~~QQQQQQQQQ

我要做一课程设计!!基于51的数字显示电子钟!!!!!高手做过,成功的!!!!拜托给我穿一个(要完整的电路图,程序)!!!!!:P :P :P 谢谢~~~~~我的邮箱:sai520hai@yahoo.com.cn…

查看全部问答>

关于三级管的问题

关于三级管的问题 有两个三极管(3DG6型号或3DG8型号放大倍数>=50;3A*31型号或3AX81型号放大倍数>=30。)可用现在市场上的哪种型号的三极管代替呀?望各位告知一下。…

查看全部问答>

MouseMove消息异常,请大家帮忙分析原因

系统:CE5,开发工具:EVC4 用DirectShow开发MP3播放器,功能已经实现。但明天测试发现一个问题,先描述一下: 播放MP3,触笔点击播放进度条调整播放进度,然后正常播放。此时一切正常! 但是当这首歌播放完毕,自动转到下一首时,出现异常:不是 ...…

查看全部问答>

牛人用两个打火机制作迷你摩托车

    [ 本帖最后由 wanzsxit 于 2010-9-28 13:22 编辑 ]…

查看全部问答>

52步进电机控制

52控制步进电机,有仿真。…

查看全部问答>

怎么用红外对管做计数器?

就是想在门里门外各装个红外对管,人进去就加一,人出去就减一。 对红外对管不熟呀,谁能给下电路图并说下原理呢?…

查看全部问答>

小信号高频放大

本帖最后由 dontium 于 2015-1-23 13:24 编辑 目前有很多的高宽带运放,但是要放大小信号就难了,特别是小信号加上高频率,容易自己振荡!有用的好的高手,进来讲解一下经验啊~~ …

查看全部问答>

M4 usb转串口

usb转为串口后,pc这边的驱动程序,没有安装版,使用起来不方便。怎么办呢?有人做过吗?不然又得使用usb转串口芯片了。…

查看全部问答>

德州仪器 EEG 模拟前端将噪声锐降超过 75%,支持非侵入式脑波监控

德州仪器 (TI) 宣布推出支持非侵入式脑波监控的业界最低噪声脑电图 (EEG) 模拟前端 (AFE),进一步壮大其 ADS1298 AFE 产品阵营。该 24 位、8 通道 ADS1299 是首款输入参考噪声低至 1 uVpp、比其它 EEG AFE 低 75% 以上的同步采样 EEG AFE。该器件用 ...…

查看全部问答>