打印

SysTick时钟源选择的疑问?

[复制链接]
5036|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
STM32中sysTick的设置(转)

注:来自网络

systick定时器和我上面说的情况一样,在手册中根本没有介绍。我费了九牛二虎之力才在一个犄角格拉里找到systick定时器的英文版的说明。在Cotex-M3有介绍,为什么要找STM32的介绍,是因为功能设置上还有点区别。首先看一下systick定时器的作用,下面是Cotex-M3里的一段话:

SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基。例如,为多个任务许以不同数目的时间片,确保没有一个任务能霸占系统;或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。

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

下面介绍STM32中的systick,Systick 部分内容属于NVIC控制部分,一共有4个寄存器,名称和地址分别是:


STK_CSR,        0xE000E010  --  控制寄存器

STK_LOAD,     0xE000E014  --  重载寄存器

STK_VAL,        0xE000E018  --  当前值寄存器

STK_CALRB,   0xE000E01C  --   校准值寄存器

首先看STK_CSR控制寄存器:寄存器内有4个位t具有意义


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

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

第2位:CLKSOURCE,Systick时钟源选择  (0:使用HCLK/8 作为Systick时钟;1:使用HCLK作为Systick时钟)

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


而原子的不完全手册里是


当然,宋岩翻译的权威指南,也和原子讲解的 一样,但是看着例程配置,我却觉得,网络转载的这篇更容易让我理解Systick时钟源选择
而且STM32固件库V2.0也有下面一段

还请大家解答一下我心中的疑问。
沙发
499734424|  楼主 | 2012-3-19 21:57 | 只看该作者
看野火的讲解PDF,有下面一段不过我觉得黄色部分是讲解有误的,不知理解是否正确

使用特权

评论回复
板凳
499734424|  楼主 | 2012-3-19 22:00 | 只看该作者
第一次在ST MCU版块发帖,没有选择STM32版块,还请版主移动至对应版块,谢谢!
对其工作量带来不便,还请见谅,下次会注意的~

使用特权

评论回复
地板
李富贵| | 2012-3-19 22:48 | 只看该作者
这种问题也要问?
在arm出的《Cortex™-M3 Devices Generic User Guide》 (DUI0552A)          
里面很清楚在SYST_CSR描述里面
[2] CLKSOURCE Indicates the clock source:
0 = external clock
1 - processor clock.

在ST的《STM32 Reference Manual》(Doc ID 13902 Rev 12)里面第90页
The RCC feeds the Cortex System Timer (SysTick) external clock with the AHB clock
(HCLK) divided by 8. The SysTick can work either with this clock or with the Cortex clock
(HCLK), configurable in the SysTick Control and Status Register. The ADCs are clocked by
the clock of the High Speed domain (APB2) divided by 2, 4, 6 or 8.

两个文档对上,结论很简单了,你洋洋洒洒写这么多有什么意义?
在说根本也不需要查什么文档,看固件库帮助文件里面SystickSourceConfig函数的参数就完了呗,最烦你们这群用寄存器的,放着简单易用、有很高可读性的固件库不用,反而自作聪明地研究寄存器。

使用特权

评论回复
5
499734424|  楼主 | 2012-3-19 23:02 | 只看该作者
4# 李富贵
O(∩_∩)O~
:lol
刚开始学,也是使用库的,不过是对应野火和原子的文档,一起看的,发现2着讲解的有些不明白~

使用特权

评论回复
6
499734424|  楼主 | 2012-3-19 23:18 | 只看该作者
看书不认真啊
其实官方手册都有,不过我之前确实是没有看到~

使用特权

评论回复
7
lkl0305| | 2015-1-19 22:21 | 只看该作者
老帖翻来学习下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:开始学习中~

5

主题

434

帖子

2

粉丝