×
单片机 > 单片机程序设计 > 详情

Stm32f01x_SysTick定时器_延时功能

发布时间:2020-05-19 发布时间:
|

最近在看利用SysTick定时器实现延时功能,总结笔记:

1.库函数相关

(1)Systick 部分内容属于NVIC控制部分,一共有4个寄存器(core_cm3.h)

static __INLINE uint32_t SysTick_Config(uint32_t ticks)//ticks为计时间隔,多少个ticks/秒

SysTick->LOAD =ticks&SysTick_LOAD_RELOAD_Msk //设置重载寄存器的值S,ystick是一个递减的定时器,当定时器递减至0时,重载寄存器中的值就会被重装载,继续开始递减。STK_LOAD  重载寄存器是个24位的寄存器最大计数0xFFFFFF

 SysTick->VAL=0 //当前值寄存器,是个24位的寄存器,读取时返回当前倒计数的值,写它则使之清零,同时还会清除在SysTick 控制及状态寄存器中的COUNTFLAG 标志

SysTick->CTRL |=0x06//控制寄存器,关闭Systick功能,开启Systick中断,使用HCLK作为Systick时钟

SysTick->CTRL |=0x07//开启Systick功能,开启Systick中断,使用HCLK作为Systick时钟

第0位:ENABLE,Systick 使能位  (0:关闭Systick功能;1:开启Systick功能)
第1位:TICKINT,Systick 中断使能位    (0:关闭Systick中断;1:开启Systick中断)
第2位:CLKSOURCE,Systick时钟源选择  (0:使用HCLK/8 作为Systick时钟;1:使用HCLK作为Systick时钟)
第3位:COUNTFLAG,Systick计数比较标志,如果在上次读取本寄存器后,SysTick 已经数到了0,则该位为1。如果读取该位,该位将自动清零

(2)SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)//misc.h,选择时钟频率

 2

#include
#include
#include

//配置systick 寄存器
void SysTick_Configuration(void) 

SysTick->VAL = 0; 
 SysTick->LOAD = (72000000/8000000)*1000;//´ú±íÿ¸ömsÐèÒªµÄ9000¸ösystickʱÖÓÊý 
SysTick->CTRL |= 0x06; 
 } 
//中断处理函数
void SysTick_Handler(void) //???? 

extern unsigned long TimingDelay; // ????,????????? 
SysTick->VAL = 0; 
if (TimingDelay != 0x00) 
TimingDelay--; 

//systick延时函数
unsigned long TimingDelay;  // 
void Delay(unsigned long nTime)  //

SysTick->CTRL |=0x07;   // 
TimingDelay = nTime; //  
while(TimingDelay != 0); //  
SysTick->CTRL |=0x06;//  

 
int main() 
 { 
  SystemInit();    //??(??)??? 
 LED_Init();
  SysTick_Configuration(); //??systick??? 
while(1)
{
GPIOA->ODR|=1<<8;
GPIOD->ODR|=1<<2;
Delay(1000); //1S 
GPIOA->ODR&=~(1<<8);
GPIOD->ODR&=~(1<<2);
Delay(1000); //1S  
                                                                              
  } 




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机的抗干扰措施有哪些