打印
[应用相关]

STM32的SYSTICK详解

[复制链接]
2055|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Mozarts|  楼主 | 2016-11-9 20:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
什么是SYSTICK:
这是一个24位的系统节拍定时器system tick timer,SysTick,具有自动重载和溢出中断功能,所有基于Cortex_M3处理器的微控制器都可以由这个定时器获得一定的时间间隔。
作用:
在单任务引用程序中,因为其架构就决定了它执行任务的串行性,这就引出一个问题:当某个任务出现问题时,就会牵连到后续的任务,进而导致整个系统崩溃。要解决这个问题,可以使用实时操作系统(RTOS).
因为RTOS以并行的架构处理任务,单一任务的崩溃并不会牵连到整个系统。这样用户出于可靠性的考虑可能就会基于RTOS来设计自己的应用程序。这样SYSTICK存在的意义就是提供必要的时钟节拍,为RTOS的任务调度提供一个有节奏的“心跳”。
微控制器的定时器资源一般比较丰富,比如STM32存在8个定时器,为啥还要再提供一个SYSTICK?原因就是所有基于ARM Cortex_M3内核的控制器都带有SysTick定时器,这样就方便了程序在不同的器件之间的移植。而使用RTOS的第一项工作往往就是将其移植到开发人员的硬件平台上,由于SYSTICK的存在无疑降低了移植的难度。

  SysTick定时器除了能服务于操作系统之外,还能用于其它目的:如作为一个闹铃,用于测量时间等。
要注意的是,当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作。

时钟的选择:
用户可以在位于Cortex_M3处理器系统控制单元中的系统节拍定时器控制和状态寄存器(SysTick control and status register ,SCSR)选择systick 时钟源。如将SCSR中的CLKSOURCE位置位,SysTick会在CPU频率下运行;而将CLKSOUCE位清除则SysTick会以CPU主频的1/8频率运行。
3.5版本的库函数与以往的有所区别
不存在stm32f10x_systick.c文件,故原来的一些函数也不存在,比如SysTick_SetReload(u32 reload);SysTick_ITConfig(FunctionalState NewState);等

在3.5版本的库函数中与systick相关的函数只有两个
第一个,SysTick_Config(uint32_t ticks),在core_cm3.h头文件中进行定义的。
第二个,void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource),在misc.c文件中定义的。

SysTick_Config(uint32_t ticks),在core_cm3.h
沙发
Listate| | 2016-11-9 20:24 | 只看该作者
SysTick_Config(uint32_t ticks),在core_cm3.h
主要的作用有:
1、初始化systick
2、打开systick

使用特权

评论回复
板凳
feiqi1| | 2016-11-9 20:31 | 只看该作者
SysTick_Config(uint32_t ticks),在core_cm3.h应该还可以打开systick的中断并设置优先级

使用特权

评论回复
地板
androidbus| | 2016-11-9 20:31 | 只看该作者
返回一个0代表成功或1代表失败

使用特权

评论回复
5
litengg| | 2016-11-9 20:37 | 只看该作者
注意:Uint32_t ticks  即为重装值,这个函数默认使用的时钟源是AHB

使用特权

评论回复
6
qiangweii| | 2016-11-9 20:37 | 只看该作者
确实,它不分频,默认使用AHB的时钟源。

使用特权

评论回复
7
shashaa| | 2016-11-9 20:45 | 只看该作者
要想分频,调用void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)呗

使用特权

评论回复
8
Mozarts|  楼主 | 2016-11-9 20:46 | 只看该作者
Listate 发表于 2016-11-9 20:24
SysTick_Config(uint32_t ticks),在core_cm3.h
主要的作用有:
1、初始化systick

SysTick_Config(uint32_t ticks)的作用还是蛮多的

使用特权

评论回复
9
Mozarts|  楼主 | 2016-11-9 20:46 | 只看该作者
feiqi1 发表于 2016-11-9 20:31
SysTick_Config(uint32_t ticks),在core_cm3.h应该还可以打开systick的中断并设置优先级 ...

恩 好像是的 在core_cm3.h应该还可以打开systick的中断并设置优先级

使用特权

评论回复
10
Mozarts|  楼主 | 2016-11-9 20:47 | 只看该作者
androidbus 发表于 2016-11-9 20:31
返回一个0代表成功或1代表失败

这个也是SysTick_Config(uint32_t ticks)在core_cm3.h的作用

使用特权

评论回复
11
Mozarts|  楼主 | 2016-11-9 20:48 | 只看该作者
litengg 发表于 2016-11-9 20:37
注意:Uint32_t ticks  即为重装值,这个函数默认使用的时钟源是AHB

是的 这个确实容易忽视 值得注意。

使用特权

评论回复
12
Mozarts|  楼主 | 2016-11-9 20:48 | 只看该作者
shashaa 发表于 2016-11-9 20:45
要想分频,调用void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)呗

但是要注意函数调用的次序吧,先SysTick_Config(uint32_t ticks),
后SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)

使用特权

评论回复
13
bbapple| | 2016-11-9 20:55 | 只看该作者
什么是SYSTICK?学习了

使用特权

评论回复
14
handleMessage| | 2016-11-9 20:59 | 只看该作者
十分感谢!!正要用到STM32的SYSTICK!!!不胜感激!!!

使用特权

评论回复
15
zhouhuanの| | 2016-11-9 21:02 | 只看该作者
与systick相关的函数往往我容易出错,多谢分享总结

使用特权

评论回复
16
icecut| | 2016-11-9 21:04 | 只看该作者
计数时间最长的计数器.用于生成系统调度中断

使用特权

评论回复
17
yu515301489| | 2016-11-10 08:14 | 只看该作者
赞一个!

使用特权

评论回复
18
secowo| | 2016-11-10 09:11 | 只看该作者
不错,赞一个

使用特权

评论回复
19
soulmist| | 2016-11-10 10:05 | 只看该作者
到处都能找的到 就不用详解了

使用特权

评论回复
20
zhuomuniao110| | 2016-11-10 10:37 | 只看该作者

SysTick时钟,俗称“嘀嗒定时器”,这家伙能按固定的时间产生一次中断,通常是多长时间产生一次中断呢?官方给出的一个时间是1ms

那么,它是怎么准确的产生1ms的呢..

使用特权

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

本版积分规则

70

主题

1320

帖子

0

粉丝