恩智浦大学生智能车学习(Superstorm)定时器PIT、LPTMR、FTM、SysTick
K60有4个PIT模块,可用于定时、计时、延时作用。
智能车学习总结:
INT_COUNT 0xFFFF(这是最大值) //LPT产生中断的计数次数。
PIT模块,LPTMR模块,SysTick模块。
SysTick:滴答定时器
FTM产生PWM脉冲,所谓的定时就是设置一定时间,时间到了就执行程序。
led_turn(LED0) // 闪烁LED0
PIT_Flag_Clear(PTTO);//清楚中断标志
lptmr_timing_ms(uint16 ms);//定时(ms)毫秒
lptmr_delay_us(uint16 us);//延时(us)
注意:如果你启动(开始计时)的时候用的us,那么你计时(获取时间)的时候也要用us,ms同理。
[code]lptmr_time_start_ms(void);//开始计时(ms) lptmr_time_get_ms(void);//获取计时时间 lptmr_time_start_us(void);//开始计时(us) lptmr_time_get_us(void);//获取计时时间 关闭计时器:lptmr_time_close();//关闭计时器都是统一的
由如上两个图片可以得出PIT模块,LPTMR模块两个模块的计时函数差不多,在用法上。
这是第二个有一个关闭的函数,其实用不用无所谓,因为再次启动的时候就会清零。
同一时间只能进行一个脉冲计数。
Cortex-M是单片机。内核自带的滴答定时器。好比是人的心脏会砰砰跳。
[code]core_clk_khz //内核时钟,因为内核时钟调频会调很高,所以计时时间很短,所以难以准确,所以一般不用来计时。
上面设置中断服务函数为SysTick_IRQHandler就可以直接调用下面设置的中断服务函数,下面设置中断服务函数, (两个函数在同一个页面,放在main.c文件)
为什么上面设置计时100ms,因为他的计时时间是很短的,如果设置1000ms的话,会超出计算配置,比如可能就崩溃了,或者完全记录不准啥的。
Assertion failed in 断点失败,在那个位置,都会一一显示出来。问题出现在如下,是时间超出范围的原因。
如果我们并不想将就于100毫秒的束缚,但是我们有不得不在那里填一个100毫秒,那么我们的办法是,循环!怎么循环?怎么实现了循环,就是一次次的调用,首先调用 SysTick_IRQHandler函数作为 set_vector_handler的参数,如果要让这个参数起到作用,那么就要 SysTick_IRQHandler 函数执行 led_turn(LED0);当然就是让灯闪烁啦,当然,满足条件i==10才让灯闪烁,当然满足条件的时候,也经过了十次调用了,在此过程中 led_init(LED0);也不断初始化,systick_timing_ms(100);也执行了十次。当 i==10;时,调用led_turn(LED0);开始闪烁。闪烁完紧接着给 i 初始为0;然后又开始新的一轮!
很多实时系统的定时器就是使用这个方法实现的!
集成到中断NVIC模块上,一般用作操作系统的心脏,提供定时切换任务。
阅读更多
- STM32F1学习-SysTick定时器
- STM32菜鸟学习笔记 系统滴答定时器(systick)
- STM32F10x 学习笔记 2 (SysTick 定时器)
- STM32学习笔记---SysTick定时器
- STM32F10x 学习笔记 2 (SysTick 定时器)
- STM32F10x 学习笔记之SysTick 定时器
- STM32学习及应用笔记一:SysTick定时器学习及应用
- STM32F407学习记录2:SysTick嘀嗒定时器学习
- STM32入门学习之SysTick系统定时器(STM32F030F4P6基于CooCox IDE)
- C#多线程学习(五) 多线程的自动管理(定时器)
- STM32 SysTick 滴答定时器原理及应用
- 单片机学习笔记--外部中断,定时器,串口中断
- STM32F103mini教程学习总结与心得(五)---->通用定时器
- STM32CubeMX学习:基本定时器
- Nginx学习之十-超时管理(定时器事件)
- linux 定时器学习小结
- ARM学习随笔(12)定时器查询方式和中断方式
- STM32学习--定时器(高级定时器)
- ※回顾※STM32入门学习之_SysTick_Config()函数的SysTick时钟配置
- skynet 学习笔记 - 定时器