Chinaunix首页 | 论坛 | 博客
  • 博客访问: 601808
  • 博文数量: 165
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1554
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-23 22:57
个人简介

我本仁慈,奈何苍天不许

文章分类

全部博文(165)

文章存档

2018年(1)

2016年(33)

2015年(5)

2014年(34)

2013年(92)

分类: 嵌入式

2014-07-31 16:47:31

STM32中想通过SysTick定时器来实现延时有两种方法:
1、中断方式:
    基本原理:在main函数中调用SysTick_Config(SystemCoreClock / 1000)函数,就是1ms产生一次SysTick中断,然后去调用中断处理函数void SysTick_Handler(void),然后这个函数是对变量进行自减一,所以TimingDelay变量为多少,就是多少毫秒的延迟。在调用Delay(__IO uint32_t nTime)函数时,传入的数值为延迟的毫秒数。

    在程序中加入以下代码
    static __IO uint32_t TimingDelay;

void Delay(__IO uint32_t nTime)

   TimingDelay = nTime;
   while(TimingDelay != 0);
}

void SysTick_delay(void)  //一般放在main函数中,因为要用到TimingDelay变量
{
    if (TimingDelay != 0x00) 
     { 
       TimingDelay--;
     }
}
在main函数中加入如下代码:
 if(SysTick_Config(SystemCoreClock / 1000))
 {
        while(1);
 }
上面的void SysTick_delay(void)函数要在在stm32f10x_it.c中函数void SysTick_Handler(void)中调用,如果void SysTick_delay(void)函数和void SysTick_Handler(void)函数不在同一个文件中,需要对void SysTick_delay(void)函数用extern声明。

2、轮巡方式:
    基本原理,利用delay.c中定义好的函数进行延时,在调用之前需要初始化延迟函数void delay_init(),然后就可以使用void delay_us(u32 nus)和void delay_ms(u32 nms)这两个函数进行延时了。在调用这个两个延时函数的文件中需要包含头文件“delay.h”




阅读(1389) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~