首页 > 其他 > 详细

6-stm32 滴答定时器(delay不带中断延时)

时间:2020-11-01 22:26:10      阅读:58      评论:0      收藏:0      [点我收藏+]

 

 

 

 1 //不带中断进行精确延时 
 2 
 3 //全局变量
 4 static u8  fac_us;//us级基数  --0~255
 5 static u16 fac_ms;//ms级基数  --0~65536
 6 
 7 
 8 //延时函数初始化
 9 void Delay_init(void)
10 {
11     SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//9MHz
12     //SysTick->CTRL &= 0xfffffffb;--misc.c-199选择HCLK/8作为systick时钟
13     
14     fac_us =SystemCoreClock/8000000;//9
15     fac_ms =(u16)fac_us*1000;
16 }
17 
18 //us  
19 void Dealy_us(u32 nus)//nus--2^24/9
20 {
21    u32 time;
22      SysTick->CTRL = 0x00;            //关闭SysTick定时器
23      SysTick->LOAD =nus*fac_us;//加载时间
24      SysTick->VAL =0x00; //清空计数器
25     
26      //SysTick->CTRL |=0x01;//开定时器
27    SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;//使能定时器
28     
29      do
30      {
31        time =SysTick->CTRL;
32          
33      }while(time&0x01 && !(time&(1<<16)));//等待时间到达
34      
35      SysTick->CTRL &=~SysTick_CTRL_ENABLE_Msk;//失能定时器
36      SysTick->VAL =0x00;//清空计数器
37      
38 }
39     
40 //ms
41 void Dealy_us(u16 nms)//nms<=2^24/9000=1864
42 {
43    u32 time;
44      SysTick->CTRL = 0x00;            //关闭SysTick定时器
45      SysTick->LOAD =(u32)nms*fac_ms;//加载时间
46      SysTick->VAL =0x00; //清空计数器
47     
48      //SysTick->CTRL |=0x01;//开定时器
49    SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;//使能定时器
50     
51      do
52      {
53        time =SysTick->CTRL;
54          
55      }while(time&0x01 && !(time&(1<<16)));//等待时间到达
56      
57      SysTick->CTRL &=~SysTick_CTRL_ENABLE_Msk;//失能定时器
58      //SysTick->CTRL = 0x00;            //关闭SysTick定时器
59      SysTick->VAL =0x00;//清空计数器
60      
61 }

 

6-stm32 滴答定时器(delay不带中断延时)

原文:https://www.cnblogs.com/darren-pty/p/13910840.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!