完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 初代饭影 于 2015-2-4 13:46 编辑 学习记录: 这几天,我学习了一下Systick,用上它作延时了。 SysTick有四个寄存器,分别是控制及状态寄存器SYST_CSR、重载寄存器SYST_RVR、计数器SYST_CVR和校准寄存器SYST_CALIB(KL25未用)。 控制及状态寄存器SYST_CSR可以控制SysTick时钟源的选择,是否打开中断,还有SysTick模块的使能与否。 计数器SYST_CVR是一个24位计数器,减一计数。当计数到0时,控制及状态寄存器SYST_CSR的溢出标志位COUNTFLAG置1,产生中断请求,同时计数器自动重载初值并继续减一计数。计数器由芯片硬件自行运作的,无须用户干预,我们就不管它了。 重载寄存器SYST_RVR就无需多言了吧,就是存入计数器重载的数。 我写的systick.c文件中,有SysTick的初始化函数,也有Delay函数,也有SysTick_Handler中断服务函数。大概思路是这样的:初始化了systick。定义了一个全局变量TimingDelay,调用Delay函数后给TimingDelay赋值,打开定时器,当TimingDelay不等于0的时候一直循环。当中断发生一次后,TimingDelay减一。当TimingDela等于0时,退出循环,关闭定时器,结束延时。
|
|
相关推荐
|
|
|
|
|
|
|
|
你在这里虽然把Systick的中断用上了,但是实际上还是死等在程序里,如果调用了你这个程序,整个系统就卡出了。关于延时,最好的做法是像操作系统里多任务一样,一个任务等待的时候,其它任务还能继续执行。在前后台系统中,也就是主循环的编程框架,实际上也可以实现类似的效果,但是API调用起来不如直接死等的做法方便。但即使是这样,在CPU死等的时候,中断最好也开发放出来,这样可以减少一点资源浪费。当然,这个时候其它的中断都还是工作的,如果提供一个回调函数,在死等的时候仍然可以利用Systick中断去监控用户的回调函数,这就算是在把定时器的利用率提到最高了。你目前的做法是比较简单的做法,基于这个,还可以有很多种变化,就跟风清扬传授令狐冲的独孤九剑一样,虽然只有九式,但是招招变化无穷。我的固件库里也有对systick封装了一个驱动,在延时的过程中还可以监控用户回调,不过在之前开放出来的版本中,systick_ticker的example没有充分演示回调的作用,我自己电脑上的example已经加上了。等再开放出来一个版本,就看得更直接了。
|
|
|
|
|
|
受教了!!看了好久大概懂你的意思了。我也认为一直卡死在循环里很浪费资源,本来我是觉得以后用上操作系统就应付过去了,但想了一下不上系统的情况是很多的吧,那到时用你的库学习学习,嘻嘻,坐等干货~ |
|
|
|
|
|
对于单片机来说,实时操作系统的东西只是玩玩看吧,实际项目上用RTOS的感觉不是很多。如果真是要多任务,就直接上MPU了,也不会用MCU的。
|
|
|
|
|
|
kan kan 是不是有用?
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
1913个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36371 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4405 浏览 0 评论
6065 浏览 1 评论
6775 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4222 浏览 0 评论
627浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
621浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
617浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
700浏览 2评论
803浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-1 09:34 , Processed in 1.264865 second(s), Total 59, Slave 50 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号