Darren_pty

导航

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

 实验目的:

使用系统定时器(systick定时器)点灯

 

实验代码:

 (1)延时函数

 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 delay_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 delay_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 }

 (2)main函数

int main(void)
{

     LED_INIT();
     delay_init();

     GPIOA->BRR |=1<<8; //点亮led  //写1 reset
     GPIOA->BSRR |=1<<8;//关闭led //写1,set
    
     GPIOD->BRR |=1<<2; //点亮led  //写1 reset
     GPIOD->BSRR |=1<<2;//关闭led //写1,set
    
    while(1)
    {
      GPIOA->ODR ^= GPIO_Pin_8;        //LED_Toggle
        GPIOD->ODR ^= GPIO_Pin_2;
        delay_ms(500);
    }
}

 

posted on 2020-11-01 19:32  Darren_pty  阅读(646)  评论(0编辑  收藏  举报