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) |