打印
[Kinetis]

【FRDM-KL02Z开发笔记】SysTick定时(CW10.6+FRDM-KL02Z+MiniDock)

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

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

具体实现功能:使用SysTick产生1ms中断定时,然后计500次,产生500ms时间,每500ms使外部PTB6上的LED亮灭状态改变1次。
开发环境:CW10.6+PE+FRDM-KL02Z+MiniDock
电路就不分析了,大家可以看:按键控制LED(CW10.6+FRDM-KL02Z+MiniDock)
CW的使用方法依然见:CW10.6开发FRDM-KL02Z

1、建立工程:

2、添加FreeCntr模块,如下图

3、重命名模块名,开启中断,选择systick模块作为定时器

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

相关帖子

沙发
ccw1986|  楼主 | 2015-12-2 20:58 | 只看该作者
在此输入1000us,计定时1ms产生1次中断

点击确认,如下图配置

5、添加bitio组件,配置LED引脚

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

7、生成程序后,在event.c中发现,并没有生成中断函数,为什么呢?

8、再回到FreeCntr组件的event事件窗口,发现这里默认是不产生中断事件代码的!


使用特权

评论回复
板凳
ccw1986|  楼主 | 2015-12-2 20:58 | 只看该作者
9、配置如下即可

10、再次编译,发现产生了SysTick_OnInterrupt中断事件函数

11、在函数中添加LED取反程序。

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

==================================================
下面重点来分析一下PE生成的代码如何实现systick的中断执行的
1、在中断向量文件中查看,发现systick的中断名字:TU1_Interrupt

2、代码追踪到TU1_Interrupt中断向量中,发现在中断函数的最后调用了TU1_OnCounterRestart(DeviceDataPrv->UserDataPtr);函数,每次systick中断后,systick复位重新启动。

3、再次追踪,发现在TU1_OnCounterRestart函数最后,又调用了FreeCntrLdd1_OnInterrupt(DeviceDataPrv->UserDataPtr);函数,FreeCntr中断函数

4、再次追踪,发现FreeCntrLdd1_OnInterrupt结尾调用了SysTick_OnInterrupt();

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


使用特权

评论回复
地板
ccw1986|  楼主 | 2015-12-2 20:59 | 只看该作者
6、下图是systick中断调用文件的过程,一步一步的调用到了用户定义的中断事件函数。
19.png (31.95 KB, 下载次数: 0)
下载附件
2015-12-1 22:42 上传




以上便是基本的systick的基本使用方法,欢迎交流

使用特权

评论回复
5
64xiaodian| | 2016-1-25 13:08 | 只看该作者
ccw1986 发表于 2015-12-2 20:58
在此输入1000us,计定时1ms产生1次中断

点击确认,如下图配置

正在学习KL02Z,谢谢楼主

使用特权

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

本版积分规则

84

主题

925

帖子

6

粉丝