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

发布者:温馨小屋最新更新时间:2019-07-10 来源: eefocus关键字:STM32  启动文件  系统时钟 手机看文章 扫描二维码
随时随地手机看文章

一、启动文件,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



关键字:STM32  启动文件  系统时钟 引用地址:STM32小白入门(第五天)-------启动文件、系统时钟

上一篇:STM32小白入门(第六天)-------串口通信
下一篇:STM32入门之旅(第四天)-------位带操作、中断

推荐阅读最新更新时间:2024-11-07 18:23

STM32硬件IIC
1 /** 2 * @brief 写一个字节到I2C设备中 3 * @param 4 * @arg pBuffer:缓冲区指针 5 * @arg WriteAddr:写地址 6 * @retval 正常返回1,异常返回0 7 */ 8 uint8_t I2C_ByteWrite(u8 pBuffer, u8 WriteAddr) 9 { 10 /* Send STRAT condition */ 11 I2C_GenerateSTART(macI2Cx, ENABLE); 12 13 I2CTimeout = I2CT_FLAG_TIMEOUT; 14 15 16 /*
[单片机]
单片机数字电子时钟系统
单片机系统的开发。其实,这个时钟系统花了我一个礼拜的时间。从刚开始的显示模块,到键盘模块,我都一步一步 实现。当然,这其中,也遇到了很多困难,麻烦!刚开始,数码管部分一点不显示,键盘也没用,很烦人,很恼火。 但是,我还是把程序调试出来了,并且在硬件上运行达到效果。本以为这几部分实现了后,联合在一块,偶的时钟系统就OK 了。然而,我错了,一个模块运行成功并不意味着模块组成的系统就能按照预想的一样达到目的,实现功能!当我将几个模块结合在一块时候,问题有接踵而至!哎呀!烦人啊!我只能重新设计方案,重新检查,重新写程序,源代码写了 一遍又一遍,程序调了又调,程序一遍又一遍地下载到单片机中运行,观察现象,分析出错原因,找出解决办法!最
[单片机]
【STM32CubeMX】1,STM32之GPIO端口输入模式配置
主要参考这两篇文章 https://blog.csdn.net/flaming999/article/details/52487904 https://blog.csdn.net/kevinhg/article/details/17490273 2、推挽输出与开漏输出的区别 推挽输出:可以输出高,低电平,连接数字器件;开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内). 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止. 要实现 线与 需要用OC(open collector)门电路.是两个参数
[单片机]
【STM32CubeMX】1,<font color='red'>STM32</font>之GPIO端口输入模式配置
STM32串口通信:串口通信库
从箱底捞出来的f103,支持的c语言太基础,虽然性能很高,然而开发时间长难以快速的使用,一开始把 c++那些该有的都搬进来,结果当然是觉得有的函数都没有了。小小的写了一个库用来通过串口来DEBUG 一共有这几个函数,串口为PA9和PA10,在C8T6最小系统上面通过测试 Serial_Begin() 初始化USART,设定波特率 Serial_WriteLine() 传输数据并换行 Serial_Write() 传输数据,没有换行符 例: char str = { THIS IS STM32C8T6 }; void main() { Serial_Begin(115200); while(1) { Serial_Write
[单片机]
<font color='red'>STM32</font>串口通信:串口通信库
STM32使用外部16MHZ晶振修改程序点
做小封装产品设计的朋友或许知道3225-4PIN的晶振,为何8MHZ晶振批量价格要到2元一片,而16MHZ晶振只需要0.4元甚至更少。究其原因是因为3225封装的晶振目前全球最低频率一般为8MHZ,而国内8MHZ达不到精度指标,所以市场上的8MHZ晶振一般为进口晶振,因此成本被垄断。 图1 3225封装晶振 STM32单片机学习者一开始用的晶振一般是2PIN的8MHZ晶振,一旦正真做产品研发的时候,使用到3225的8MHZ晶振的话,成本是个不小的挑战。笔者现针对这个问题,提出使用16MHZ晶振代替的方法。 图2 STM32时钟树状图 由上图可以看出,如果想兼容8MHZ晶振,必须在时钟倍频前2分频。程序设计如
[单片机]
<font color='red'>STM32</font>使用外部16MHZ晶振修改程序点
关于STM32时钟源及配置等相关知识笔记
1,时钟源 HSI HSE LSI LSE PLL MSI (L系列特有) 2,主要的几个时钟 SYSCLK --- 系统时钟 PLLCLK --- 锁相环时钟 HCLK --- AHB总线时钟 PCLK1 --- APB1总线时钟 PCLK2 --- APB2总线时钟 3,各时钟来源 SYSCLK,系统时钟来源,可直接选择HSI,HSE,MSI直接作为系统时钟源,也可经过PLL倍频输出后的PLL作为系统时钟。 PLLCLK,锁相环时钟,一般是HSI,HSE,MSI时钟经过锁相环倍频后的输出时钟。 HCLK, AHB总线时钟,经过SYSCLK预分频后的输出时钟。 PCLK1,外设低速时钟,经过HC
[单片机]
关于<font color='red'>STM32</font><font color='red'>时钟</font>源及配置等相关知识笔记
STM32笔记之七:让它跑起来,基本硬件功能的建立
0、 实验之前的准备 a) 接通串口转接器 b) 下载IO与串口的原厂程序,编译通过保证调试所需硬件正常。 1、 flash,lib,nvic,rcc和GPIO,基础程序库编写 a) 这几个库函数中有一些函数是关于芯片的初始化的,每个程序中必用。为保障程序品质,初学阶段要求严格遵守官方习惯。注意,官方程序库例程中有个platform_config.h文件,是专门用来指定同类外设中第几号外设被使用,就是说在main.c里面所有外设序号用x代替,比如USARTx,程序会到这个头文件中去查找到底是用那些外设,初学的时候参考例程别被这个所迷惑住。 b)
[单片机]
STM32 UART2程序
USART1程序很多,看看USART2程序。注意红色部分,首先要使能相关端口的时钟。 因为USART2可以映射成不同的端口,所以要端口映射。 结合你自己的开发板,设置正确的映射口.(正点原子的是PA03PA02.) STM32F103ZE默认的USART2就是PA03PA02,如果配置映射,USART2端口是PD05PD06了。 程序在正点原子开发板SRAM中调试通过,开发环境IAR5.30. void USART2_Initialise( u32 bound ) { GPIO_InitTypeDef GPIO_InitStructure;//I/O¿ú3õê¼»ˉ½á11ìå NVIC_InitTypeDef N
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
    做任何事情之前,一定要想好目标。没有目标的事情是做不好的,也做不成。我的目标就是学习ARM开发,当然是深入的学习。目标如下 :1、学习A ...
  • 学习ARM开发(2)
    天是星期天,刚好在家里休息。又是学习ARM的大好时机了。早上起得很早,因为都想着怎么样搞好这个ARM开发环境,总是心急的。搞得睡觉,也睡 ...
  • 学习ARM开发(4)
    已经把CPU大体架构学会了,当然我之前已经学习过80X86的结构,所以对于像RISC的计算机,也能想像到它是什么样的东西。如果没有学习过《微机 ...
  • 学习ARM开发(6)
  • 学习ARM开发(7)
  • 学习ARM开发(8)
  • 学习ARM开发(9)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved