STM32 中断函数SysTick_Handler理解

发布者:rocky96最新更新时间:2018-11-29 来源: eefocus关键字:STM32  中断函数  SysTick_Handler 手机看文章 扫描二维码
随时随地手机看文章

目的


滴答定时器整理(STM32F103)。用了一段时间的滴答定时器,突然忘记其中配置方法,重新翻阅手册及博文,在此记录备忘。 


SysTick的重装寄存器决定了定时器频率,若SysTick的时钟源是72M, SystemFrequency = 72000000Hz


//1ms时基

//HCLK_Frequency = 72000000Hz;

//#define OS_TICKS_PER_SEC 1000

SysTick_SetReload((u32)RCC_Clocks.HCLK_Frequency / OS_TICKS_PER_SEC);


时钟树


时钟树


寄存器


寄存器名称和地址


STK_CSR, 0xE000E010 – 控制寄存器


STK_LOAD, 0xE000E014 – 重载寄存器


STK_VAL, 0xE000E018 – 当前值寄存器


STK_CALRB, 0xE000E01C – 校准值寄存器


寄存器描述


STK_CSR控制寄存器:寄存器低4位含义 


第0位:ENABLE,Systick 使能位 (0:关闭Systick功能;1:开启Systick功能)


第1位:TICKINT,Systick 中断使能位(0:关闭Systick中断;1:开启Systick中断)


第2位:CLKSOURCE,Systick时钟源选择 (0:使用HCLK/8 作为Systick时钟;1:使用HCLK作为Systick时钟)


第3位:COUNTFLAG,Systick计数比较标志,如果在上次读取本寄存器后,SysTick 已经数到了0,则该位为1。如果读取该位,该位将自动清零


STK_LOAD 重载寄存器: 


Systick是一个递减的定时器,当定时器递减至0时,重载寄存器中的值就会被重装载,继续开始递减。STK_LOAD 重载寄存器是个24位的寄存器最大计数0xFFFFFF。


STK_VAL当前值寄存器: 


也是个24位的寄存器,读取时返回当前倒计数的值,写它则使之清零,同时还会清除在SysTick 控制及状态寄存器中的COUNTFLAG 标志。


STK_CALRB校准值寄存器:


位31 NOREF :1=没有外部参考时钟(STCLK 不可用)0=外部参考时钟可用


位30 SKEW:1=校准值不是准确的1ms 0=校准值是准确的1ms


位[23:0] :Calibration value Indicates the calibration value when the SysTick counter runs on HCLK max/8 as external clock. The value is product dependent, please refer to the Product Reference Manual, SysTick Calibration Value section. When HCLK is programmed at the maximum frequency, the SysTick period is 1ms. If calibration information is not known, calculate the calibration value required from the frequency of the processor clock or external clock.


代码块


SysTick配置代码

    /*

     * SystemFrequency / 1000    1ms中断一次

     * SystemFrequency / 100000  10us中断一次

     * SystemFrequency / 1000000 1us中断一次

     */

void SysTick_Configuration(void)

{

#if defined(__STM32F10x_LIB_H)

    RCC_ClocksTypeDef RCC_Clocks;


    RCC_GetClocksFreq(&RCC_Clocks);

        SysTick_SetReload((u32)RCC_Clocks.HCLK_Frequency / OS_TICKS_PER_SEC);//#define OS_TICKS_PER_SEC 1000u

    SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);

    SysTick_CounterCmd(SysTick_Counter_Enable);

    SysTick_ITConfig(ENABLE);

#elif   defined(__STM32F4xx_H)

    RCC_ClocksTypeDef RCC_Clocks;

    RCC_GetClocksFreq(&RCC_Clocks);

  SysTick_Config(RCC_Clocks.HCLK_Frequency / OS_TICKS_PER_SEC);

#else

 #error   SysTick_Configuration

#endif  

}



SysTickHandler

void SysTickHandler(void)// 1ms 时间基准

{

  OS_CPU_SR cpu_sr;

    g_tickCount++;

    OS_ENTER_CRITICAL();

    OSIntNesting++;

    OS_EXIT_CRITICAL();

    OSTimeTick();

    OSIntExit();

}


SysTick_Config

static __INLINE uint32_t SysTick_Config(uint32_t ticks)

  if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);            /* Reload value impossible */


  SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;      /* set reload register */

  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Cortex-M0 System Interrupts */

  SysTick->VAL   = 0;                                          /* Load the SysTick Counter Value */

  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk | 

                   SysTick_CTRL_TICKINT_Msk   | 

                   SysTick_CTRL_ENABLE_Msk;                    /* Enable SysTick IRQ and SysTick Timer */

  return (0);                                                  /* Function successful */

}


关键字:STM32  中断函数  SysTick_Handler 引用地址:STM32 中断函数SysTick_Handler理解

上一篇:arm看门狗的作用
下一篇:STM32是如何进入中断函数的

推荐阅读最新更新时间:2024-03-16 16:18

37.STM32ADC的基本原理
一。什么是ADC 二。STM32ADC的特点 ADC的位数决定了ADC的精度,有8位的,12位的,16位的等。 还有一个很重要的参数就是转换时间。 STM32f103RBT6有2个ADC控制器。128KFlash,20KRAM 每一个ADC控制器都有多个通道,例如ADC1的外部通道有16个,可以理解为有一个电子开关分别连接各个通道。 每个通道的采样间隔和采样时间都可以设置。 三。ADC各通道与IO管脚对应表 一般负参考电压接地,正参考电压接3.3V。 模拟输入电压不能超过3.3V,否则输入引脚可能被烧毁。 ADC框图 Vref+连接到VDDA,Vref-连接到VSSA。 最多4个通道连接到注入通道,最
[单片机]
37.STM32ADC的基本原理
Event Recoder调试组件在stm32上的使用
本文目标:Event_Recoder调试组件在stm32上的使用 按照本文的描述,应该可以在你所处的硬件上跑通代码。 先决条件:装有编译和集成的开发环境,比如:Keil uVision5。 板子硬件要求:无,属于调试功能。 起源 因为做产品开发,设计东西有时候考虑得多,mcu的并没有多余的串口供使用调试,在调试一些初期进行验证时,必要的调试的打印信息是需要的。 Event Recoder调试组件简介 嵌入式的Event_Recoder调试组件是一种可以在MDK开发环境下使用的高级调试工具,它可以记录软件运行的一些标志信息,并以图形化的形式显示出来。它可以帮助你了解和分析内部操作,支持Keil RTX操作系统调试以及MDK自带的
[单片机]
Event Recoder调试组件在<font color='red'>stm32</font>上的使用
STM32普通定时器实现延时函数
/* SystemFrequency / 1000 1ms中断一次 * SystemFrequency / 100000 10us中断一次 * SystemFrequency / 1000000 1us中断一次 */ #define SYSTICKPERIOD 0.000001 #define SYSTICKFREQUENCY (1/SYSTICKPERIOD) /** * @brief 定时器2的初始化,,定时周期1ms * @param 无 * @retval 无 */ void TIM2_Init(void) { TIM_TimeBaseInitTypeDef TI
[单片机]
STM32启动文件初探之startup_stm32f10x_hd.s(Reset_Handler函数
该文件主要实现目的: 设置初始SP 设置初始PC=Reset_Handler 设置向量表入口地址,并初始化向量表 调用SystemInit,把系统时钟配制成72M,SystemInit在库文件system_stm32f10.c定义 调转到标号_main,最终来到C程序文件 ; Reset handler Reset_Handler PROC EXPORT Reset_Handler IMPORT __main IMPORT SystemInit LDR R0, =SystemInit BLX R0
[单片机]
STM32 基础系列教程 26 - USB_MSC
前言 学习stm32 USB接口使用,学会用CUBE工具快速创建USB设备工程及调试,关于usb的相关知道请读者提前准备并学习,当然如果不想深究其中原理的话,跟着本文来操作就可以实现基于USB的设备开发了。需要提示的是,stm32在使用usb接口功能是一般需要在DP引脚上上拉一个1.5K电阻到3.3V(部分MCU内部会上拉)。 示例详解 基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。 本示例所用的最小系统板原理图: 从本节开始,关于CUBEMX工具及KEIL工具的操作将不再细讲,如
[单片机]
<font color='red'>STM32</font> 基础系列教程 26 - USB_MSC
利用STM32定时器实现呼吸灯
实验目标 利用STM32定时器产生PWM信号; 利用PWM信号实现呼吸灯。 什么是PWM信号呢? PWM,英文名Pulse Width Modulation。 PWM信号是一种脉宽调制信号,广范用于LED和电机控制等场合。 PWM信号其实类似于方波,只有0和1两种状态。 PWM信号可以调节占空比。 不同占空比可以使LED产生不同的亮度。 占空比就是指在一个周期内, 信号处于高电平的时间占据整个信号周期的百分比, 例如上图中所示脉冲的占空比就是25%。 PWM波可以由GPIO口产生,通过GPIO口输出高电平,延时,输出低电平,延时来产生PWM波。 还可以使用定时器,利用比较寄存器形成PWM。 本实验就是利用PWM信号这一特性
[单片机]
利用<font color='red'>STM32</font>定时器实现呼吸灯
STM32有哪几种定时器 STM32高级定时器有哪些功能
在数字电路中时钟是整个电路的心脏,电路的的一举一动都是根据时钟节拍下进行的,随着信息量逐渐提高,对硬件信息处理能力提出了更大的需求,时钟作为数字硬件的关键成员,其性能需要我们关注,尤其在高速电路设计中对模拟转换芯片对时钟性能有很高的需求,因此正确选择时钟是很关键的一步,前提是我们要了解时钟的关键参数咯。在数字电路中最常见的时钟元件有晶振和锁相环、时钟缓冲器等,本节对外部定时器进行重点讲解。 STM32 定时器专题讲解 SysTick定时器的功能比较单一,主要是供给系统使用的,系统默认设置为1ms触发一次中断。而用户想要使用自己的定时器,STM32提供的用户定时器不但数量多且功能更加强大。不同型号的STM32提供的定时器数量不同
[单片机]
<font color='red'>STM32</font>有哪几种定时器 <font color='red'>STM32</font>高级定时器有哪些功能
STM32 之 ADC_DMA
这里仅仅是一个测量趋势,并不是很精确的测量。 再次重申STM32的ADC不同的通道对应着不同的管脚,本代码中PA1对应着通道1。 包含文件: 由于百度字数限制这里只贴出关键代码: (1)Main C语言: Codee#14684 /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 实验平台 : ST 官方三合一套件 + 硬件 : STM32F103C8T6 + 开发平台 : IAR For ARM 5.40 + 仿真器 : J-Link + 日期 : 2010-10-28 + 频率 :
[单片机]
<font color='red'>STM32</font> 之 ADC_DMA
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

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