0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CW32系统滴答SysTick定时器介绍

武汉芯源半导体有限公司 2023-01-05 13:53 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Cortex-M0+处理器中内置有一个SysTick定时器,通常用于嵌入式操作系统的多任务切换,在不使用操作系统的应用中,亦可作为其它用途,如定时、计时或者为需要周期性执行的任务提供中断源。

1.SysTick工作原理

SysTick定时器内部含有一个24位的递减计数器,当计数减至0时,会从SysTick的重装载寄存器中取值作为计数器的初始值,同时可以选择在这个时候产生中断(异常号:15)。例如设置重装载寄存器为100,那么当计数减为0时,就会重新复位为100继续递减计数。

它的特点是:

• 24 位递减计数器

• 自动重装载能力

• 当计数器达到 0 时产生可屏蔽的系统中断

2.SysTick寄存器介绍

在core_cm0plus.h中展示了四种寄存器,我们将一一介绍:

typedef struct

{

__IOM uint32_t CTRL;

/*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */

__IOM uint32_t LOAD;

/*!< Offset: 0x004 (R/W)  SysTick Reload Value Register */

__IOM uint32_t VAL;

/*!< Offset: 0x008 (R/W)  SysTick Current Value Register */

__IM uint32_t CALIB;

/*!< Offset: 0x00C (R/ )  SysTick Calibration Register */

} SysTick_Type;

IOM uint32_t CTRL控制寄存器:

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

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

第2位:CLKSOURCE,SysTick时钟选择(1:使用HCLK,0:使用参考时钟频率);

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

__IOM uint32_t LOAD重载寄存器:

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

__IOM uint32_t VAL当前值寄存器:

24位的寄存器,读取时返回当前计数器的计数值,写任何值都会使之清零,同时还会清除SysTick 控制寄存器中的COUNTFLAG 标志。

__IM uint32_t CALIB校准值寄存器:

只读寄存器,主要存放10mS校准值,该值和MCU相关。

3.操控SysTick定时器

在MDK开发环境中,我们不必要非得去操作每一个寄存器,可以通过调用CW函数库中的函数来进行相关的操作。

void InitTick(uint32_t HclkFreq)

初始化SysTick滴答定时器,带入的参数为HCLK的频率,如HCLK为24MHz,则带入参数为24000000。该函数会调用uint32_t SysTick_Config(uint32_t ticks)函数完成SysTick定时器的相关配置并启动。SysTick默认为1mS定时器,如果需要修改定时周期,则需要修改uint32_t SysTick_Config(uint32_t ticks)函数中重装载值寄存器配置。

__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

初始化系统计时器及其中断,并启动。

(1) SysTick->LOAD = (uint32_t)(ticks - 1UL);

设置SysTick重装载值

(2)NVIC_SetPriority(SysTick_IRQn,

(1UL << __NVIC_PRIO_BITS) - 1UL);                        

设置SysTick定时器中断优先级

(3) Tick->VAL = 0UL;

加载SysTick计数器值

(4) SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |

SysTick_CTRL_TICKINT_Msk |

SysTick_CTRL_ENABLE_Msk;

设置SysTick IRQ中断使能,并开启SysTick定时器

4.Systick延时功能实现

对于mS级及以上的延时,可在完成SysTick定时器初始化后,通过SysTickDelay(uint32_t Delay)函数来实现,该函数的形参为需要延时的mS数。

对于uS级延时,一般通过调整__NOP 空指令数量来实现,不建议用SysTick定时器来实现,主要原因是M0+系统中固有的中断响应时间(压栈和出栈)、中断处理时间等会影响uS延时精度。

int main(void)

{

__RCC_GPIOC_CLK_ENABLE(); //设置HCLK为24MHz

InitTick( 24000000 ); //初始化SysTick为1mS定时器

GPIO_InitTypeDef GPIO_InitStructure1 = {0} ; //初始化对应GPIO口

GPIO_InitStructure1.Pins = GPIO_PIN_3 ;

GPIO_InitStructure1.IT = GPIO_IT_NONE;

GPIO_InitStructure1.Mode = GPIO_MODE_OUTPUT_PP;

GPIO_Init(CW_GPIOC, &GPIO_InitStructure1);

PC03_SETHIGH(); // LED灯置高电平,低电平有效

while(1)

{

PC03_TOG(); //PC03口电平反转

SysTickDelay (100);//延时100mS

PC03_TOG();//PC03口电平再次反转

SysTickDelay (100);//延时100mS

}

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6074

    文章

    45335

    浏览量

    663320
  • mcu
    mcu
    +关注

    关注

    147

    文章

    18604

    浏览量

    386607
  • 微控制
    +关注

    关注

    1

    文章

    51

    浏览量

    14894
  • 定时器
    +关注

    关注

    23

    文章

    3360

    浏览量

    121708
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CW32 MCU在高频率运行下的系统稳定性的提升方案

    在嵌入式系统中,CW32 MCU的高频率运行能够显著提高系统的处理速度和响应能力,但也伴随着系统稳定性问题的挑战,特别是跑飞现象的出现。本文将深入探讨
    发表于 12-04 08:04

    CW32单片机在智能马桶的应用

    低功耗定时器(LPTIM) ● 4×56、6×54 或 8×52 LCD 段码液晶驱动 ● TRNG 真随机数发生● AES 高级加密标准模块 CW32L083系列产品适用于对FL
    发表于 12-04 08:01

    基于芯源CW32 MCU智能家居照明控制系统设计与实现

    随着智能家居的快速发展,照明控制系统成为了其重要组成部分。基于芯源CW32 MCU的智能家居照明控制系统,能够通过无线控制、自动调节亮度、定时开关等方式,提升用户的生**验。
    发表于 12-03 06:06

    cw32 systick怎么用?

    cw32 systick怎么用
    发表于 12-01 08:10

    CW32L010+定时器介绍

    这一篇介绍一下定时器的内容,从了解CW定时器到功能实现。 一、定时器类型 CW32L010系列M
    发表于 12-01 07:53

    CW32定时器及中断介绍

    ,否则将触发系统复位。WWDT 通常被用来监测有严格时间要求的程序执行流程,防止由外部干扰或未知条件造成应用程序的执行异常, 导致发生系统故障。 01 CW32定时器中断
    发表于 12-01 07:08

    CW32A030看门狗和SysTick定时器

    看 门狗溢出将触发系统复位。WWDT 通常被用来监测有严格时间要求的程序执行流程,防止由外部干扰或未知 条件造成应用程序的执行异常,导致发生系统故障。 3、 SysTick 定时器
    发表于 11-27 07:52

    使用系统定时器SysTick来实现精确延时微秒和毫秒函数

    SysTick定时器简介 SysTick定时器是存在于系统内核的一个滴答
    发表于 11-20 07:12

    PWM、定时器SysTick 区别及应用场景

    在单片机和嵌入式开发中,经常会遇到PWM(脉宽调制)、定时器SysTick系统滴答定时器)这几个词。很多初学者容易把它们混为一谈,以为都
    的头像 发表于 11-17 10:53 218次阅读
    PWM、<b class='flag-5'>定时器</b>、<b class='flag-5'>SysTick</b> 区别及应用场景

    CW32 MCU用什么IDE开发?

    推荐使用IAR Embedded Workbench for ARM、Keil μVision for ARM等IDE开发CW32 MCU应用,其中新版本IAR EWARM直接支持CW32 MCU,Keil MDK-ARM则需要安装CW
    发表于 11-12 07:52

    CW32 MCU用什么仿真开发?

    理论上各主流IDE枚举的、支持ARM Cortex内核的所有硬件仿真,比如:J-LINK,ULINK,DAP,ST-Link等,都可以仿真、下载CW32 MCU的应用代码。如果想实现量产或者离线下载应用代码,则必须配套支持CW32
    发表于 11-12 06:01

    SysTick系统滴答定时器简介

    SysTick系统定时器是属于CM33内核中的一个外设,内嵌在NVIC中。系统定时器是一个24bit的向下递减的计数
    的头像 发表于 09-23 09:50 1317次阅读
    <b class='flag-5'>SysTick</b><b class='flag-5'>系统</b><b class='flag-5'>滴答</b><b class='flag-5'>定时器</b>简介

    瑞萨RA MCU众测宝典 SysTick之RA0E1定时器点灯

    “ RA MCU众测宝典 ”  SysTick 专题来啦!在上个的 环境搭建 专题中,我们已经筑牢了开发基础,而这次,我们要聚焦一个让程序“有节奏”运行的关键角色—— SysTick定时器 。瑞萨
    的头像 发表于 08-05 14:50 3129次阅读
    瑞萨RA MCU众测宝典  <b class='flag-5'>SysTick</b>之RA0E1<b class='flag-5'>定时器</b>点灯

    第十二章 SysTick——系统定时器

    本章介绍了W55MH32的SysTick系统定时器,它是24位递减计数,含4个寄存,可配置
    的头像 发表于 05-22 17:16 825次阅读
    第十二章 <b class='flag-5'>SysTick</b>——<b class='flag-5'>系统</b><b class='flag-5'>定时器</b>

    MCU定时器/计数

    架构与功能特性‌ 定时器类型与配置‌ 高级控制定时器‌:支持互补PWM输出与刹车功能,适用于电机驱动等高精度控制场景。通用定时器‌:集成输入捕获、输出比较、单脉冲模式等基础功能‌。 系统
    的头像 发表于 04-27 13:54 585次阅读