STM32--systick延时
2014-03-20 00:23
176 查看
systick是一个内核中的滴答器:
滴答时间间隔:
一般采用AHB时钟的8分频[SysTick->CTRL第2位清零],即一般是72/8=9M,即1s滴答9M次
滴答总量:RELOAD寄存器
读取RELOAD寄存器作为每次滴答的初值,每滴答一次减1(实时数值存到CURRENT寄存器),减到0时(可触发中断),重新读取重新滴答。RELOAD寄存器24位,9M滴答间隔情况下,单次循环最长时间大概1.8s
中断:
标志位: SysTick->CTRL寄存器里的第16位为COUNTFLAG,当滴答到0时该位为1。如果读取该位,该位将自动清零
使能中断: SysTick->CTRL寄存器的第1位写1则开启中断。即使没有开启中断,COUNTFLAG也会工作
库函数操作:
#include"misc.h"初始化:
SysTick_Config(x);(可重复调用,时间重新开始)设置一次完整循环的滴答次数为x
把时钟源设置为内部时钟(一般情况下是要用外部时钟即AHB时钟的8分频的,需进一步操作)
打开中断
设置中断优先级
开始计时
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//采用AHB时钟的8分频(一般设置),在SysTick_Config之后执行,以免操作被覆盖
CURRENT寄存器:
读它:返回当前倒计数的值
写它(任意值):清零
延迟函数示例:
//不断查询COUNTFLAG void sysDelays(u32 x) { u32 i; SysTick_Config(9000000); SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); for(i=0;i<x;i++) { while(!((SysTick->CTRL)&(1<<16))); } SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //关闭滴答 return ; }
相关文章推荐
- STM32 SysTick 精准延时 简单分析
- stm32使用systick精确延时
- STM32使用systick实现精确延时
- STM32 SysTick定时器常见问题及延时函数的实现
- STM32 systick做为系统时间使用(非简单延时)
- stm32 软件精确延时非systick 非中断
- stm32 SysTick定时器常见问题和实现延时
- STM32外设驱动---SysTick精准延时
- 利用STM32的SysTick设计精确延时函数
- STM32中,systick具体延时时间计算
- STM32 SysTick定时器做延时函数
- STM32 SysTick 精确延时(非中断方式)
- STM32的几种延时方法
- [SAN4N学习笔记]使用SysTick精准延时
- STM32菜鸟成长记录---系统滴答定时器(systick)应用
- 使用STM32的systick定时器中断实现RTC工作过程出错
- 在stm32的freeRTOS上进行微秒级延时(HAL库)
- 转载:STM32中的几个时钟SysTick、FCLK、SYSCLK、HCLK
- 单片机入门学习九 STM32单片机学习六 延时函数、端口复用和重映射、中断
- 关于STM32的SysTick定时器的时钟选择问题