打印
[Kinetis]

SysTick定时(CW10.6+FRDM-KL02Z+MiniDock)

[复制链接]
535|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
西门扫雪|  楼主 | 2015-12-23 17:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ARM系列的MCU内部均有SysTick系统滴答定时器,通常可以用作简单的定时器使用,也可作为跑RTOS时的基础定时用。

今天给大家分享一下这两天学习的内容,欢迎大家交流!

具体实现功能:使用SysTick产生1ms中断定时,然后计500次,产生500ms时间,每500ms使外部PTB6上的LED亮灭状态改变1次。
开发环境:CW10.6+PE+FRDM-KL02Z+MiniDock

相关帖子

沙发
西门扫雪|  楼主 | 2015-12-23 17:48 | 只看该作者
1、建立工程:

2、添加FreeCntr模块,如下图


使用特权

评论回复
板凳
西门扫雪|  楼主 | 2015-12-23 17:49 | 只看该作者
3、重命名模块名,开启中断,选择systick模块作为定时器

4、点击period后的按钮,进行定时时间配置



使用特权

评论回复
地板
西门扫雪|  楼主 | 2015-12-23 17:49 | 只看该作者
在此输入1000us,计定时1ms产生1次中断

点击确认,如下图配置


使用特权

评论回复
5
西门扫雪|  楼主 | 2015-12-23 17:50 | 只看该作者
5、添加bitio组件,配置LED引脚

6、配置内容如下图,比较简单


使用特权

评论回复
6
西门扫雪|  楼主 | 2015-12-23 17:52 | 只看该作者
7、生成程序后,在event.c中发现,并没有生成中断函数,为什么呢?

8、再回到FreeCntr组件的event事件窗口,发现这里默认是不产生中断事件代码的!
10.png (71.97 KB, 下载次数: 0)
下载附件
2015-12-1 22:41 上传




使用特权

评论回复
7
西门扫雪|  楼主 | 2015-12-23 17:53 | 只看该作者
9、配置如下即可

10、再次编译,发现产生了SysTick_OnInterrupt中断事件函数
12.png (29.74 KB, 下载次数: 0)
下载附件
2015-12-1 22:41 上传




使用特权

评论回复
8
西门扫雪|  楼主 | 2015-12-23 17:54 | 只看该作者
11、在函数中添加LED取反程序。

12、编译下载运行,发现程序运行正常了!
具体演示效果就不上了。

==================================================
下面重点来分析一下PE生成的代码如何实现systick的中断执行的
1、在中断向量文件中查看,发现systick的中断名字:TU1_Interrupt
14.png (120.78 KB, 下载次数: 0)
下载附件
2015-12-1 22:41 上传




使用特权

评论回复
9
西门扫雪|  楼主 | 2015-12-23 17:55 | 只看该作者
2、代码追踪到TU1_Interrupt中断向量中,发现在中断函数的最后调用了TU1_OnCounterRestart(DeviceDataPrv->UserDataPtr);函数,每次systick中断后,systick复位重新启动。

3、再次追踪,发现在TU1_OnCounterRestart函数最后,又调用了FreeCntrLdd1_OnInterrupt(DeviceDataPrv->UserDataPtr);函数,FreeCntr中断函数
16.png (54.92 KB, 下载次数: 0)
下载附件
2015-12-1 22:41 上传




使用特权

评论回复
10
西门扫雪|  楼主 | 2015-12-23 17:57 | 只看该作者
4、再次追踪,发现FreeCntrLdd1_OnInterrupt结尾调用了SysTick_OnInterrupt();

5、而SysTick_OnInterrupt();函数正式大家在event.c中编写自己代码的函数位置。


使用特权

评论回复
11
西门扫雪|  楼主 | 2015-12-23 17:58 | 只看该作者
6、下图是systick中断调用文件的过程,一步一步的调用到了用户定义的中断事件函数。

使用特权

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

本版积分规则

33

主题

286

帖子

1

粉丝