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

[复制链接]
1439|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的基本使用方法,欢迎交流
64xiaodian 发表于 2016-1-25 13:08 | 显示全部楼层
ccw1986 发表于 2015-12-2 20:58
在此输入1000us,计定时1ms产生1次中断

点击确认,如下图配置

正在学习KL02Z,谢谢楼主
您需要登录后才可以回帖 登录 | 注册

本版积分规则

84

主题

925

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部