你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32中的SysTick

[复制链接]
Eagleson 发布时间:2015-1-21 20:21
本帖最后由 Eagleson 于 2015-1-21 20:23 编辑 - O1 F& g; _& }- Y
, X0 u8 `2 C( a6 w
Systick就是一个定时器而已,只是它放在了NVIC中,主要的目的是为了给操作系统提供一个硬件上的中断(号称滴答中断)。滴答中断?这里来简单地解释一下。操作系统进行运转的时候,也会有“心跳”。它会根据“心跳”的节拍来工作,把整个时间段分成很多小小的时间片,每个任务每次只能运行一个“时间片”的时间长度就得退出给别的任务运行,这样可以确保任何一个任务都不会霸占整个系统不放。或者把每个定时器周期的某个时间范围赐予特定的任务等,还有操作系统提供的各种定时功能,都与这个滴答定时器有关。因此,需要一个定时器来产生周期性的中断,而且最好还让用户程序不能随意访问它的寄存器,以维持操作系统“心跳”的节律。 只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息。
SysTick常被用来精确定时。在网上看到了大家关于讨论的systick 时钟与系统时钟的关系,有的是8分频,有的则直接使用系统时钟,那么情况究竟是什么样的呢
下面是从stm32F4 固件库中查到的关于SysTick的说明
1.jpg
                              
从上面这一段看出 Systick可以选择AHB时钟的8分频,也可以直接使用HCLK。也就是说都是支持的。
下面是时钟树
2.jpg
时钟树上这直接写了是8分频。
下面是在STM32F4xx DSP and Standard Peripherals Library 中查阅到的相关的说明

7 u, V% t3 Z. B; a% z5 B
3.jpg
SysTick时钟选择函数的说明 参数选择
4.jpg
8分频的使用
5.jpg
系统时钟的使用,也就是默认的系统时钟延时为1ms
6.jpg
可以看出SysTick_Config 已经有了相关的配置了。
7.jpg
这是这个函数的定义,在core_cm3.h里面,是有返回值的,如果你设置的SystemFrequency / 1000不符合该函数要求就会返回1,这样这个while循环是跳不出的,一直在循环,只有你设置的值符合要求,程序才能跳出循环继续执行,这句话一般在SysTick_Config(SystemCoreClock / 1000);这句之后,上面这句已经配置好Systick的定时时间为1ms,紧接着 while(SysTick_Config(SystemFrequency / 1000)); 是判断你配置的定时频率是否可以实现,如果可以就继续往下执行,如果不可以就一直停在这里。
SysTick_Config(uint32_t ticks):设置系统嘀嗒时钟并使能中断          在STM32中与CM3内核描述不太一样,这个时钟源有两个选择:AHB/8和AHB,在该函数中是选择了HCLK(SysTick_CTRL_CLKSOURCE_Msk),所以定时时间=ticks / HCLK,当要定时10ms,而HCLK为24MHz时,ticks = 10000 * 24 = 240000。          如果需要选择HCLK/8,可以直接修改这个函数,或在这个函数后跟随misc中的SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)来设置。
STM32中用SysTick延时不宜在中断中使用
如果中断中调用本函数,否则会存在重入问题.另外如果屏蔽了全局中断,则不要使用此函数
在中断里面调用系统延时,操作系统任务调度就挂起了····原因主要还是中断优先级之间的影响引起的。
重入的意思就是:在一个函数没有结束之前,又再次调用这个函数。比如一个函数func()运行过程中被中断,而中断处理中又调用func(),则产生重入的问题。

/ l' p3 ~5 |8 X) p
收藏 评论16 发布时间:2015-1-21 20:21

举报

16个回答
Eagleson 回答时间:2015-1-22 08:26:46
zhangdaijin 发表于 2015-1-22 07:50
0 D' J1 F  J6 H4 a希望多有这样的帖子
4 G4 s9 o5 k$ h+ O
谢谢鼓励~~
wamcncn 回答时间:2015-1-21 21:13:22
Eagleson 发表于 2015-1-21 21:12# d, d. `& R3 Z( d. z' b
看多了就不晕了

$ d6 g- U; u4 ?8 |所以每天看一点
Eagleson 回答时间:2015-1-21 21:12:10
wambob 发表于 2015-1-21 20:59' {0 c& S1 O* D
看到英就头疼

) |5 R5 D) {- _看多了就不晕了
霹雳之火 回答时间:2015-1-21 20:27:24
技术贴,标记
wamcncn 回答时间:2015-1-21 20:59:28
看到英就头疼
Eagleson 回答时间:2015-1-21 21:11:44
霹雳之火 发表于 2015-1-21 20:27
9 k( |4 a, t) b技术贴,标记
* B- P1 |6 {7 n1 I
AndyYau-268557 回答时间:2015-1-21 21:50:26
systemtick可以产生不同时基,可以好好利用
lkl0305 回答时间:2015-1-21 23:12:12
很详细
zhangdaijin 回答时间:2015-1-22 07:50:57
希望多有这样的帖子
埃斯提爱慕 回答时间:2015-1-22 08:34:29
提示: 作者被禁止或删除 内容自动屏蔽
我是酱油哥 回答时间:2015-1-22 08:36:52
不错  谢谢  
拼命三郎 回答时间:2015-1-22 11:06:02
谢谢分享
damiaa 回答时间:2015-1-24 22:28:39
OK ,支持!
feel-376797 回答时间:2015-1-25 07:29:39
- h5 U# f. ^7 Q% s9 g! p
很详细,谢谢分享!
12下一页

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版