SysTick是STM32中的系统定时器,利用SysTick可以实现精确的延时。
SysTick—系统定时器
属于 CM3 内核中的一个外设,内嵌在 NVIC 中。系统定时器是一个 24bit 的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,一般我们设置系统时钟 SYSCLK 等于 72M。当重装载数值寄存器的值递减到 0 的时候,系统定时器就产生一次中断,以此循环往复。因为 SysTick 是属于 CM3 内核的外设,所以所有基于 CM3 内核的单片机都具有这个系统定时器,使得软件在 CM3 单片机中可以很容易的移植。系统定时器一般用于操作系统,用于产生时基,维持操作系统的心跳。

延时模式:
SysTick的延时可以有俩种模式:
1.单纯递减延时
2.利用void SysTick_Handler(void) 中断函数延时

俩种方法都涉及到一个函数,那就是SysTick 配置库函数 ,

__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)
{
// 不可能的重装载值,超出范围
if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk)
{
return (1UL);
} // 设置重装载寄存器
SysTick->LOAD = (uint32_t)(ticks - 1UL); // 设置中断优先级
NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); // 设置当前数值寄存器
SysTick->VAL = 0UL; // 设置系统定时器的时钟源为 AHBCLK=72M
// 使能系统定时器中断
// 使能定时器
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk;
return (0UL);
}

其主要任务是装填计时器初始值、设置时钟源、设置中断源优先级。初始值不能超过2^24,时钟源一般为72M。

1.单纯递减延时
毫秒级延时

void SysTick_Delay_ms(uint32_t ms)
{
uint32_t i;
SysTick_Config(72000); /* 设置初始值为72000 */
for(i=0;i<ms;i++)
{
while(!((SysTick->CTRL) & (1<<16))) ; /* 检测一次计时完成 */
}
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; /* 操作寄存器 */
}

2.利用void SysTick_Handler(void) 中断函数延时
毫秒级延时

volatile uint32_t isr_ms;
void SysTick_Delay_ms_INT(uint32_t ms)
{
isr_ms = ms;
SysTick_Config(72000); while(isr_ms); /* 在中断里递减 */ /* 失能systick */
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
}

stm32f10x_it.c中的代码如下:

extern volatile uint32_t isr_ms;   /* 这个变量在bsp_systick.c里面定义 */
void SysTick_Handler(void)
{
isr_ms--;
}

STM32—SysTick系统定时器的更多相关文章

  1. stm32 SysTick系统定时器

    它是一个24位向下递减的定时器,每计数一次所需时间为1/SYSTICK,SYSTICK是系统定时器时钟,它可以直接取自系统时钟,还可以通过系统时钟8分频后获取 当定时器计数到0时,将从LOAD 寄存器 ...

  2. 第18章 SysTick—系统定时器

    第18章     SysTick—系统定时器 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...

  3. 第18章 SysTick—系统定时器—零死角玩转STM32-F429系列

    第18章     SysTick—系统定时器 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...

  4. SysTick—系统定时器

    本章参考资料<ARM Cortex™-M4F 技术参考手册> -4.5 章节 SysTick Timer(STK), 和4.48 章节 SHPRx,其中 STK 这个章节有 SysTick ...

  5. SysTick系统定时器(功能框图和优先级配置)

    SysTick—系统定时器是属于 CM3 内核中的一个外设,内嵌在 NVIC 中.系统定时器是一个 24bit (2^24)的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,一般我们设置 ...

  6. STM32 - SYSTICK(系统滴答定时器)

    SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15).在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基.例如,为多个任务许以不同数目 ...

  7. SysTick系统定时器

    1.SysTick定时器介绍 SysTick定时器也叫SysTick滴答定时器,它是Cortex-M3内核的一个 外设,被嵌入在 NVIC 中.它是一个24 位向下递减的定时器,每计数一 次所需时间为 ...

  8. STM32时钟系统之利用 systick 定时器来实现准确的延时。

    本篇文章带着大家来认识一下 STM32 的时钟系统,以及利用 systick 定时器来实现一个比较准确的延时. 我们首先从时钟说起,时钟在MCU中的作用,就好比于人类的心脏一样不可或缺.STM32 的 ...

  9. STM32学习笔记(六) SysTick系统时钟滴答实验(stm32中断入门)

    系统时钟滴答实验很不难,我就在面简单说下,但其中涉及到了STM32最复杂也是以后用途最广的外设-NVIC,如果说RCC是实时性所必须考虑的部分,那么NVIC就是stm32功能性实现的基础,NVIC的难 ...

随机推荐

  1. leetcode 面试题 17.22. 单词转换(DFS+回溯)

    题目描述 思路分析 这题回溯,先想出它的空间解是什么,这里空间解,其实就是给的原字符串到结束字符串中间的变形过程,那么就可以容易的画出一个解空间树,用深度搜索进行搜索, 剪枝后,进入下一个维度,再进行 ...

  2. 备战-Java 容器

    备战-Java 容器 玉阶生白露,夜久侵罗袜. 简介:备战-Java 容器 一.概述 容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着k ...

  3. 「CF547D」 Mike and Fish

    「CF547D」 Mike and Fish 传送门 介绍三种做法. \(\texttt{Solution 1}\) 上下界网络流 我们将每一行.每一列看成一个点. 两种颜色的数量最多相差 \(1\) ...

  4. PYTHON 得到ADB的输出结果

    #利用ADB DEVICES结果判断指定手机是否正常连接,如果为offline,则adb disconnect sjh:adb connect sjh#如果没有,则执行adb connect sjhd ...

  5. Day4 包机制 及JavaDoc文档.

    包机制 为了更好地组织类,java提供了包机制,用于区别类名的命名空间. 包的本质是文件夹 它语句的语法格式为: package pkg1[. pkg2 [.pkg3...] ] ; 一般利用公司域名 ...

  6. Java的代理模式

    最近在学习Spring,关于Spring AOP的代理模式不是很了解,看了一篇博文就懂了. https://www.cnblogs.com/cenyu/p/6289209.html Java的三种代理 ...

  7. python基础之os模块操作

    # os模块 目录相关内置库import os# . 当前目录 .. 返回上一级目录# 1. os.path.abspath() --获取当前文件的绝对路径(不包含os模块.py) pwd# path ...

  8. React优化

    这里主要分析在函数式react中的优化,类组件有生命周期函数定义较明确 React的核心特征之一是单向数据流(props自上往下流) 这会导致一个问题:当父组件state更新后,其自身及其所有chil ...

  9. NOI2021游记

    NOI2021游记 前言 写于 2021.7.28,成绩榜刚出后几个小时.总分 345 拿到银牌 183 名. 我的高中 OI 生活在这里画上句号.结局对我而言虽然不够完美,但是无论怎样都是我人生道路 ...

  10. python开发,注意事项

    提高python代码运行效率 1.使用生成器,节约内存.[一边循环一边计算的机制,称为生成器:generator] 例: .如何创建生成器 1.只要把一个列表生成式的[]改成(),就创建了一个gene ...