STM32F4学习笔记5——SysTick定时器

发布者:HeavenlySunset最新更新时间:2021-12-07 来源: eefocus关键字:STM32F4  SysTick  定时器 手机看文章 扫描二维码
随时随地手机看文章

SysTick 定时器被捆绑在 NVIC 中,用于产生 SYSTICK 异常(异常号:15)。在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。例如,为多个任务许以不同数目的时间片,确保没有一个任务能霸占系统;或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。


Cortex—M4处理器内部包含了一个简单的定时器,该定时器时钟源可以是内部时钟,或者外部时钟的,不过STCLK的具体来源由芯片设计者决定。SysTick定时器能产生中断,CM为他专门开出一个异常类型,并且在向量表中有他的一席之地,共有4个寄存器控制SysTick定时器:

·SysTick控制及状态寄存器 0xE000_E010

第0位RW定时器使能位 第1位RW异常请求位 第2位RW外部内部时钟选择位 第16位计数标志位

·SysTick重装载数值寄存器 0xE000_E014

第0-23RW位当计数到0时将被重装载的值

·SysTick当前数值寄存器 0xE000_E018

第0-23RWc位读取时返回当前倒数计时的值,写它则使寄存器清零同时清除状态标志位

·SysTick校准数值寄存器 0xE000_E01C

第0-23RW位在10ms间隔中倒计数的格数,芯片设计者应该通过输入信号提供该数值,若读回为0则表示无法使用校准功能 第30R位1表示校准值不是准确的10ms,0表示准确的10ms 第31R位1表示没有外部参考时钟,0表示外部参考时钟可用


注:其他保留位置必须保持清零


嘀嗒定时器的运行是基于处理器时钟的,如果因为低功耗模式,时钟信号停止了,那么嘀嗒定时器也会停止的,确保软件使用字对齐访问来访问SysTick 寄存器。系统复位以后重载寄存器和当前值是没有定义的,正确的初始化顺序如下:

·Program reload value.

·Clear current value.

·Program Control and Status register.


void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)实现时钟源的选择

__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

{

/* Reload value impossible */

if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1);

SysTick->LOAD = ticks - 1; /* set reload register */

/* set Priority for Systick Interrupt */

NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);

/* Load the SysTick Counter Value */

SysTick->VAL = 0;

/* Enable SysTick IRQ and SysTick Timer */

SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |

SysTick_CTRL_TICKINT_Msk |

SysTick_CTRL_ENABLE_Msk;

/* Function successful */

return (0);

}


这个函数配置的滴答定时器,其中重要的是将滴答定时器优先级默认设置为15,STM32F4xx支持16级的中断嵌套,这里15表示滴答定时器中断无论中断如何设置分组其中断已经是最低等级

关键字:STM32F4  SysTick  定时器 引用地址:STM32F4学习笔记5——SysTick定时器

上一篇:STM32F4学习笔记6——USART Part1
下一篇:STM32F4学习笔记4——外部中断

推荐阅读最新更新时间:2024-11-04 13:27

MC9S12G定时器中断设置
一、关闭定时器模块 时TSCR1的TEN位为0; 二、设定IOSx为输出比较引脚(以7为例) TIOS_IOS7 = 1; 三、绑定输出比较引脚 TCTL1_OM7 = 0; TCTL1_OL7 = 1; 四、设置计数器的比较值(在24Mhz的系统时间下,0xBB为1ms)中断周期:0x4926*128/24MHz = 100ms TC7 = 0xBB; 五、设置定时器分频设置(以128分频为例) TSCR2_PR = 0x7; 六、设置定时器比较成功后输出从而产生中断 TSCR2_TCRE = 1; 七、最后开启定时器 TSCR1_TEN = 1; 八、中断函数要写为
[单片机]
MSP430单片机定时器B中断实验
本程序是基于MSP430单片机内部定时器B中断实验,功能:用定时器B来精确流水灯时间间隔. #include MSP430F149.h #define uchar unsigned char #define uint unsigned int uchar LedData=0x80; uchar num=50;//中断50次让LED右移一位 //定时器A初始化 void InitTimerB(){ TBCTL=TBSSEL1+ID1+ID0+MC0+TBCLR;//选择1/8SMCLK 增计数 清除TAR TBCCTL0=CCIE;//CCR0中断允许 比较模式 TBCCR0=10000;//时间间隔10ms } //定时器
[单片机]
e络盟使STM32F4 Discovery MCU开发套件实现无线网络连接
e络盟近日宣布提供用于意法半导体(ST)STM32F4 Discovery微控制器开发套件的Discover Wi-Fi开发板,以实现无线连接。Discover Wi-Fi开发板采用Murata SN8200无线网络控制器模块,可提供板载Wi-Fi功能及网络软件栈,是各种高性能、低功耗无线解决方案的完美选择。 Discover Wi-Fi开发板插入意法半导体的STM32F4 Discovery套件后,借助UART和SPI命令接口以及工作频段在2.4 GHz的 IEEE802.11b/g/n标准可提供一系列的广泛功能。Discover Wi-Fi开发板还配备源代码、文档及软件演示,有利于快速启动无线网络项目。 亚太区用户现可
[单片机]
C++ MFC中定时器的使用
用处:定时重绘,形成动态波形图。如温度曲线。 思路:与单片机定时器中断一样,先打开定时器再把执行的代码写进编译器生成的CMy56Dlg::OnTimer(UINT nIDEvent)函数中。 其中 nIDEvent 中的n代表定时器的编号;通常与switch-case语句构成多个定时器的同时使用。 步骤: 一.通过类向导在对话框基类中添加 OnTimer子类。步骤:【查看】-【类向导】-【Messagemaps】-【CMy**Dlg】-【message】-【WM_timer】编译后CMyDlg类此时会自动添加一个 OnTimer(UINT nIDEvent)子类。并添加一个响应函数 void CMy56Dlg::OnTimer(U
[单片机]
STM32F4CubeMX学习笔记之Time2 pwm
开发板:普中PZ6808L-F4 开发环境:keil5+CnbeMx CnbeMx配置为定时器2 配置IO口为PB10 PB11 好了就可以用示波器查看有没有输出了
[单片机]
<font color='red'>STM32F4</font>CubeMX学习笔记之Time2 pwm
ARM学习《九》——关于STM32的systick定时器的详细说明
我不得不说意法半导体确实有点风骚!甚至有点变态。我对ST文档 STM32F10XXX参考手册的编辑水平真是不敢恭维。手册中好多说明都是含糊不清,甚至将好多对初学者来说很重要的地方都一笔带过,让人着实摸不着头脑。比如前面我说过的关于NVIC嵌套向量中断控制器的介绍,这部分我认为是非常重要的,但当你看完他这部分介绍,你根本不会设置中断服务程序,他有哪些寄存器都不知道,更别说去设置了,NVIC的详细介绍是在Cotex-M3中有详细的介绍,不多说。今天我们说的是systick定时器。 systick定时器和我上面说的情况一样,在手册中根本没有介绍。我费了九牛二虎之力才在一个犄角格拉里找到systick定时器的英文版的说明。在Cote
[单片机]
ARM学习《九》——关于STM32的<font color='red'>systick</font><font color='red'>定时器</font>的详细说明
STM32F4实现矩阵键盘
程序中所使用的矩阵键盘所接的引脚为PC4-PC5、PF11-PF15和PG0,接线方法为常规矩阵键盘的接法,PC4、PC5、PF11、PF12为行线PF13、PF14、PF15、PG0为列线。 u8 check_Key(void) { GPIO_InitTypeDef GPIO_InitStructure; u8 cord_h=0XFF,cord_l=0XFF; //h为行线 l为列线 u8 Val = 0xFF; /* 行线 推挽输出 */ GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT; GPIO_InitStructure.G
[单片机]
<font color='red'>STM32F4</font>实现矩阵键盘
555定时器在LED驱动器的中的应用
  本文详细介绍如何使用便宜的555定时器,在一些不需要 LED驱动 器全部功能的应用中,代替微处理器对专用LED驱动器实施控制。这样做可让用户在降低总系统成本的同时,维持LED驱动器的恒定电流。   相比几年以前,现在使用 LED 的应用越来越多。这些应用从高端视频 显示 器到低端照明应用,不一而足。设计人员通常只需要专用LED驱动器的部分功能,但却无力负担控制它们所需的微处理器的相关成本费用。   专用LED驱动器常常被设计为微处理器控制型,旨在实现诸如模拟或脉宽调制( PWM ) LED电流控制、每个LED的独立控制、LED状态和故障信息读取等特性。对于一些仅要求恒定LED电流的应用(例如: LED照明 或者发光
[电源管理]
555<font color='red'>定时器</font>在LED驱动器的中的应用
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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