第12讲Systick延时讲解.ppt_第1页
第12讲Systick延时讲解.ppt_第2页
第12讲Systick延时讲解.ppt_第3页
第12讲Systick延时讲解.ppt_第4页
第12讲Systick延时讲解.ppt_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 12讲 Systick延时函数讲解 SystickSystick寄存器原理讲解寄存器原理讲解1 Systick Systick延时函数讲解延时函数讲解2广州星翼电子广州星翼电子 官方淘宝店官方淘宝店: :http:/http:/ 技术支持论坛技术支持论坛: :STM32STM32学习从学习从0 0开始开始系列视频系列视频技术支持论坛技术支持论坛: 开源电子网开源电子网 官方微博官方微博: “正点原子正点原子” 微博网址微博网址 http:/ http:/ 广州星翼电子广州星翼电子 官方淘宝店官方淘宝店: :http:/http:/ 技术支持论坛技术支持论坛: :l Systick定时器就是

2、系统滴答定时器,一个24位的倒计数定时器,计到0时,将从RELOAD寄存器中自动重装载定时初值。只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不停息,即使在睡眠模式下也能工作。l SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15)。 什么是什么是Systick定时器?定时器?STM32STM32学习从学习从0 0开始开始系列视频系列视频广州星翼电子广州星翼电子 官方淘宝店官方淘宝店: :http:/http:/ 技术支持论坛技术支持论坛: :CTRLSysTick控制和状态寄存器LOADSysTick自动重装载除值寄存器VALSysTick当前值

3、寄存器CALIBSysTick校准值寄存器 4个个Systick 相关寄存器:相关寄存器:typedefstruct_IOuint32_tCTRL;_IOuint32_tLOAD;_IOuint32_tVAL;_Iuint32_tCALIB;SysTick_Type;STM32STM32学习从学习从0 0开始开始系列视频系列视频广州星翼电子广州星翼电子 官方淘宝店官方淘宝店: :http:/http:/ 技术支持论坛技术支持论坛: :原子教你玩原子教你玩STM32STM32系列视频系列视频l 选择外部时钟源,则时钟为HCLK /8 选择内核时钟源,则时钟为HCLK广州星翼电子广州星翼电子 官方

4、淘宝店官方淘宝店: :http:/http:/ 技术支持论坛技术支持论坛: :STM32STM32学习从学习从0 0开始开始系列视频系列视频广州星翼电子广州星翼电子 官方淘宝店官方淘宝店: :http:/http:/ 技术支持论坛技术支持论坛: :固件库V3.5中的Systick相关函数:SysTick_CLKSourceConfig()/Systick时钟源选择SysTick_Config(uint32_tticks)/初始化systick,时钟为HCLK,并开启中断Systick中断服务函数:voidSysTick_Handler(void);STM32STM32学习从学习从0 0开始开始

5、系列视频系列视频广州星翼电子广州星翼电子 官方淘宝店官方淘宝店: :http:/http:/ 技术支持论坛技术支持论坛: :原子教你玩原子教你玩STM32STM32系列视频系列视频1.计算出产生1us需要多少个时钟周期fac_us;2.计算出RELOAD寄存器的值(也就是产生相应延时所需要的时钟周期数);RELOAD=fac_us*nus3.开启计数;4.循环检测计数到0的标志位;5.清空计数器,关闭定时器; 使用使用systick查询延时查询延时nus的设计思路:的设计思路:第 3 讲 STM32时钟系统广州星翼电子广州星翼电子 官方淘宝店官方淘宝店: :http:/http:/ 技术支持论

6、坛技术支持论坛: :原子教你玩原子教你玩STM32STM32系列视频系列视频#ifndef_DELAY_H#define_DELAY_H#includesys.h“voiddelay_init(void);voiddelay_ms(u16nms);voiddelay_us(u32nus);#endif delay.h文件代码(库函数版本)文件代码(库函数版本)广州星翼电子广州星翼电子 官方淘宝店官方淘宝店: :http:/http:/ 技术支持论坛技术支持论坛: :原子教你玩原子教你玩STM32STM32系列视频系列视频#includedelay.h#includesys.h“staticu8

7、fac_us=0;/us延时倍乘数staticu16fac_ms=0;/ms延时倍乘数voiddelay_init()SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);/外部HCLK/8fac_us=SystemCoreClock/8000000;/为系统时钟的1/8fac_ms=(u16)fac_us*1000;/非ucos下,代表每个ms需要的systick时钟数; delay.c文件代码(库函数版本,去掉文件代码(库函数版本,去掉UCOS相关)相关) delay_init()函数函数:第 3 讲 STM32时钟系统广州星翼电子广州星

8、翼电子 官方淘宝店官方淘宝店: :http:/http:/ 技术支持论坛技术支持论坛: :原子教你玩原子教你玩STM32STM32系列视频系列视频voiddelay_us(u32nus)u32temp;SysTick-LOAD=nus*fac_us;/时间加载SysTick-VAL=0 x00;/清空计数器SysTick-CTRL|=SysTick_CTRL_ENABLE_Msk;/开始倒数dotemp=SysTick-CTRL;while(temp&0 x01&!(temp&(1CTRL&=SysTick_CTRL_ENABLE_Msk;/关闭计数器SysTick-VAL=0X00;/清空计

9、数器delay_us()函数函数:第 3 讲 STM32时钟系统广州星翼电子广州星翼电子 官方淘宝店官方淘宝店: :http:/http:/ 技术支持论坛技术支持论坛: :原子教你玩原子教你玩STM32STM32系列视频系列视频/延时nms/注意nms的范围/SysTick-LOAD为24位寄存器,所以,最大延时为:/nms=0 xffffff*8*1000/SYSCLK/SYSCLK单位为Hz,nms单位为ms/对72M条件下,nmsLOAD=(u32)nms*fac_ms;/时间加载(SysTick-LOAD为24bit)SysTick-VAL=0 x00;/清空计数器SysTick-CT

10、RL|=SysTick_CTRL_ENABLE_Msk;/开始倒数dotemp=SysTick-CTRL;while(temp&0 x01&!(temp&(1CTRL&=SysTick_CTRL_ENABLE_Msk;/关闭计数器SysTick-VAL=0X00;/清空计数器delay_ms()函数:函数:广州星翼电子广州星翼电子 官方淘宝店官方淘宝店: :http:/http:/ 技术支持论坛技术支持论坛: :原子教你玩原子教你玩STM32STM32系列视频系列视频static_IOuint32_tTimingDelay;voidDelay(_IOuint32_tnTime)TimingDelay=nTime;while(TimingDelay!=0);voidSysTick_Handler(void)if(Tim

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论