8.SysTick定时器

2024-04-28 10:28
文章标签 定时器 systick

本文主要是介绍8.SysTick定时器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SysTick为系统滴答定时器

定时器分类

内核级定时器(系统滴答定时器)

延时定时中断(给系统提供时钟节拍)给操作系统提供时基(任务调度)FreeRTOS

UCOS5ms

基本定时器

延时定时中断时间片(实现两盏LED灯同时以一个不同速度闪烁,轮询标志位的改变)

(M4两个TIM6TIM7)开启DAC转换

通用定时器

延时定时中断输出比较(PWM)输入捕获(捕获高低电平时钟)逻辑分析仪示波器

高级定时器

延时定时中断输出比较输入捕获电机死区刹车

其他定时器

看门狗---产生复位

RTC---1s定时期----实时时钟

配置SysTick系统滴答定时器

Cortex‐M3处理器内部包含了一个简单的定时器。因为所有的CM3芯片都带有这个定时器,软件在不同 CM3器件间的移植工作得以化简。该定时器的时钟源可以是内部时钟(FCLK,CM3上的自由运行时钟),或者是外部时钟( CM3处理器上的STCLK信号)。不过,STCLK的具体来源则由芯片设计者决定,因此不同产品之间的时钟频率可能会大不相同,你需要检视芯片的器件手册来决定选择什么作为时钟源。

配置延时中断步骤

  1. 选择时钟源,复位值是默认外部时钟,置1为内核时钟168Mhz,外部时钟进入要通过8分频,所以是21Mhz

  2. 计算重装载的值,然后写入重装载寄存器

  3. 写当前值寄存器,写的话会清零计数值并重新装载,标志位清零

  4. 中断位使能,中断优先级配置

  5. 使能定时器

void SysTick_NVIC(u32 ms)
{SysTick->CTRL &= ~(1<<2);//选择外部时钟源,21Mhz,复位值默认SysTick->LOAD = 21000 * ms - 1;//重装载寄存器写入值SysTick->VAL = 0;//读一下当前值寄存器,清空寄存值SysTick->CTRL |= (1<<1);//中断位使能,计数到0触发中断//NVIC配置u32 pir = NVIC_EncodePriority(5,1,2);//优先级编码计算函数NVIC_SetPriority(SysTick_IRQn,pir);//配置具体中断源NVIC_EnableIRQ(SysTick_IRQn);//中断源使能SysTick->CTRL |= 1;//滴答定时器使能
}
void SysTick_Handler(void)
{SysTick->VAL = 0;//写一下当前值寄存器,重装载计数并清空标志位printf("系统滴答!\r\n");
}

值得注意的是,延时中断是在定时器计数完后进入中断服务函数,所以定时器使能不能关,且在同一时间最好用定时器实现一种功能

这篇关于8.SysTick定时器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/943002

相关文章

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

又看见定时器了,怎么这么想写了~~

1.scheduleUpdate(); 与virtual void update(float dt);   联合使用,就是每隔一段时间就调用一次update,实际上是每一帧都调用一次updata方法,scheduleUpdate();方法相当于开启了定时器。 2.schedule的作用和scheduleUpdate差不多,只是这个其实更好用一些,这个可以只是指定调用的方法,系统默认每一帧都调用一

八、(正点原子)Linux内核定时器实验

定时器是我们最常用到的功能,一般用来完成定时功能,本章我们就来学习一下 Linux 内核提供的定时器 API 函数,通过这些定时器 API 函数我们可以完成很多要求定时的应用。 Linux内核也提供了短延时函数,比如微秒、纳秒、毫秒延时函数,本章我们就来学习一下这些和时间有关的功能。 一、Linux时间管理和内核定时器介绍         1、内核时间管理         在

定时器有几种实现方式

1 前言   在开始正题之前,先闲聊几句。有人说,计算机科学这个学科,软件方向研究到头就是数学,硬件方向研究到头就是物理,最轻松的是中间这批使用者,可以不太懂物理,不太懂数学,依旧可以使用计算机作为自己谋生的工具。这个规律具有普适应,再看看“定时器”这个例子,往应用层研究,有 Quartz,Spring Schedule 等框架;往分布式研究,又有 SchedulerX,ElasticJob

利用定时器1产生全双工软件串口

代码; /*《AVR专题精选》随书例程3.通信接口使用技巧项目:使用AVR定时器1和外中断实现全双工软件串口文件:softuart.c说明:软件串口驱动文件作者:邵子扬时间:2012年12月16日*/#include "softuart.h"// 内部变量struct TSOFTUART stUART;// 软件串口初始化void sfUART_init(void){// 设置IO状态P

使用普通定时器产生半双工软件串口

代码: /*《AVR专题精选》随书例程3.通信接口使用技巧项目:使用普通定时器和外中断实现半双工软件串口文件:softuart.c说明:软件串口驱动文件作者:邵子扬时间:2012年12月16日*/#include "softuart.h"// 声明软件串口变量volatile struct TSOFTUART stUART;// 初始化软件串口void sfUART_init(void)

SpringBoot (六) :SpringBoot定时器实现(简单入门)

说在前面 定时任务一般会存在中大型企业级项目中,为了减少服务器、数据库的压力往往会采用时间段性的去完成某些业务逻辑。比较常见的就是金融服务系统推送回调,一般支付系统订单在没有收到成功的回调返回内容时会持续性的回调,这种回调一般都是定时任务来完成的。 SpringBoot为我们内置了定时任务,我们只需要一个注解(@Scheduled)就可以开启定时为我们所用了。 目录结构 代码实现 1

高性能定时器 --- 时间堆

时间堆     时间轮给我们的感觉依旧不够精细,因为它是按照时间间隔来执行定时器的。 时间堆的设计思路是:     将所有定时器中超时时间最小的定时器的超时值作为心博间隔。一旦心博函数被调用,超时时间最小的定时器必然到期,我们就可以准确的处理它。然后,再从剩余的定时器中找出超时时间最小的那个,作为下一次心博时间,这样,就显得较为精准了。     这里我们采用最小堆处理这个问题。

高性能的定时器设计---时间轮

高性能定时器 时间轮     一个滴答的时间称为时间轮的槽间隔si(心搏时间)     时间轮共N个槽,因此运转一周时间为`N*si`     每个槽指向一条定时器链表(每条链表上的定时器具有相同特征,即他们的定时时间相差几个(0,1,2...)N*si) 假如现在指针指向槽cs,我们要添加一个定时时间为ti的定时器,则该定时器会被插入槽ts对应的链表中去:

java之定时器Timer

文章目录 1 概览2 终止Timer线程3 反复执行一个任务4 进一步分析schedule和scheduleAtFixedRate5 一些注意的问题 1 概览 Timer是一种定时器工具,用来在一个后台线程计划执行指定任务。它可以计划执行一个任务一次或反复多次。 TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务。 简单的一个例程: import java