历史上的今天
今天是:2024年12月07日(星期六)
2021年12月07日 | STM32F4学习笔记5——SysTick定时器
2021-12-07 来源:eefocus
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表示滴答定时器中断无论中断如何设置分组其中断已经是最低等级
史海拾趣
|
操作系统:VxWorks,CPU:MPC860,IDE:Tornado2.0 现象: 1.程序(此程序很大有几十个任务运行)运行一段时间后异常复位,每次复位之间的时间间隔无规律,有时半个小时,有时2个小时,有时5,6个小时。 2.通过打印了解到,是由于一个任务tlongtimer ...… 查看全部问答> |
|
evc4.0 + sp4 + pocket 2003 + CHS下设置成中文环境后,WizardBar里就没有了IDOK和IDCANCEL了. 我在evc4.0 + sp4 + pocket 2003 + CHS下设置成中文环境后,WizardBar里就没有了IDOK和IDCANCEL了,如果不设置中文环境,刚建立项目的时候是有这两项的.我想重载OnOk函数,使按enter回车键的时候不要退出,我已经重载了PreTranslateMessage函数,对回车键 ...… 查看全部问答> |
|
我有手机字库,全部外文全部尺寸都可以提供,紧缺的小语种如阿拉伯语、波斯语、泰语、越南语、韩语、日语等齐全。 不过是有偿服务哦,呵呵~~ 有意者可联系我:winwwang@gmail.com… 查看全部问答> |
|
我的学习心得--关于STM3的NVIC1.异常可分为系统异常和外部中断,异常优先级也即分为系统异常优先级和外部中断优先级。2.中断矢量的顺序决定了异常的硬件优先级。若不进行软件设置异常的优先级(软件优先级),异常优 ...… 查看全部问答> |
|
#if !defined (USE_STM3210B_EVAL) && !defined (USE_STM3210E_EVAL) //#define USE_STM3210B_EVAL #define USE_STM3210E_EVAL#endif这段程序怎么理解?谢谢?… 查看全部问答> |
|
我想让TIM3工作于PWM1模式 向上计数,并产生CCR1中断,现在情况是我用软件仿真时,在main的while循环时,计数到CCR1时可以进如中断,但在硬件仿真的时候,当执行完TIM_Cmd(TIM3,ENABLE); 时,CNT立马从0x0000变成0x6F10,直接超出了ccr1的值,并且C ...… 查看全部问答> |
|
本帖最后由 digitaltek 于 2014-8-10 09:24 编辑 现在的在外面看到的做广告的单色LED面板,很多都是P10面板组合起来的,单个P10面板的尺寸是16*32,如果要更高的分辨率就用多块P10拼起来,一般如果拼起来的尺寸比较大 ...… 查看全部问答> |




