今日继续学习使用嘉立创购买的 立创梁山派天空星,芯片是 STM32F407VET6
主要是在学习移植UC/OS III系统时,需要我掌握好内核定时器SystemTick,以掌控整个实时操作系统的节拍,但我之前并未过多研究单片机的内核定时器,因此同步学习一下
文章目的是理解内核定时器SystemTick初始化,并能够自己添加上SystemTick的中断功能
文章提供测试代码讲解、完整工程下载、测试效果图
【立创·天空星STM32F407VET6】入门手册:
目录
系统定时器SysTick:
SysTick定时器可用作标准的下行计数器,是一个24位向下计数器,有自动重新装载能力,可屏蔽系统中断发生器。Cortex-M4处理器内部包含了一个简单的定时器,所有基于M4内核的控制器都带有SysTick定时器,这样就方便了程序在不同的器件之间的移植。SysTick定时器可用于操作系统,提供系统必要的时钟节拍,为操作系统的任务调度提供一个有节奏的“心跳”。正因为所有的M4内核的芯片都有Systick定时器,这在移植的时候不像普通定时器那样难以移植。
RCU 通过 AHB 时钟(HCLK)8 分频后作为 Cortex 系统定时器(SysTick)的外部时钟。通过对 SysTick 控制和状态寄存器的设置,可选择上述时钟或 AHB(HCLK)时钟作为 SysTick 时钟。
SysTick定时器设定初值并使能之后,每经过1个系统时钟周期,计数值就减1,减到0时,SysTick计数器自动重新装载初值并继续计数,同时内部的COUNTFLAG标志位被置位,触发中断(前提开启中断)。
SysTick相关寄存器:
SysTick Control and Status Register (SysTick_CTRL): 用于控制SysTick定时器的启动、停止,选择时钟源,以及读取当前定时器的状态。
SysTick Reload Value Register (SysTick_LOAD): 设置定时器的重载值,即定时器从加载值递减到0所需的时钟周期数。
SysTick Current Value Register (SysTick_VAL): 读取或清除定时器的当前值。
SysTick Calibration Value Register (SysTick_CALIB): 提供一个校准值,用于实现与实际时钟频率无关的固定周期中断。
STK_CTRL 控制寄存器:
寄存器内有 4 个位具有意义
第 0 位:ENABLE,Systick 使能位(0:关闭 Systick 功能;1:开启 Systick 功能)
第 1 位:TICKINT,Systick 中断使能位(0:关闭 Systick 中断;1:开启 Systick 中断)
第 2 位:CLK SOURCE,Systick 时钟源选择