STM32_SysTick

来源:互联网 发布:软件开发设计方案 编辑:程序博客网 时间:2024/06/18 05:47

初始化滴答定时器

void SysTick_Init(void){    /* SystemFrequency / 1000    1ms中断一次     * SystemFrequency / 1000000 1us中断一次     *///  if (SysTick_Config(SystemFrequency / 1000000)){ // ST3.0.0库版本    if (SysTick_Config(SystemCoreClock / 1000000)){ // ST3.5.0库版本        while (1);    /*返回1说明装载的值超过 SysTick_LOAD_RELOAD_Msk 而出错进入这里的死循环,                        这里的这个最大值是 0xFFFFFFul = 2^24 = 16777216 */    }     //关闭滴答定时器,使用时再开启    SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;}
  • 下面是用到的宏定义。
#define SysTick_CTRL_ENABLE_Pos             0                                             /*!< SysTick CTRL: ENABLE Position */#define SysTick_CTRL_ENABLE_Msk            (1ul << SysTick_CTRL_ENABLE_Pos)               /*!< SysTick CTRL: ENABLE Mask *//* SysTick Reload Register Definitions */#define SysTick_LOAD_RELOAD_Pos             0                                             /*!< SysTick LOAD: RELOAD Position */#define SysTick_LOAD_RELOAD_Msk            (0xFFFFFFul << SysTick_LOAD_RELOAD_Pos)        /*!< SysTick LOAD: RELOAD Mask */

延时程序

定义静态全局变量和延时函数

static __IO u32 TimingDelay;void Delay_us(__IO u32 nTime){     TimingDelay = nTime;         //使能滴答定时器    SysTick->CTRL |=  SysTick_CTRL_ENABLE_Msk;    while(TimingDelay != 0);}

SysTick中断函数SysTick_Handler()

//在stm32f10x_it.c中#include "bsp_systick.h"      //包含要用到的头文件void SysTick_Handler(void)    //修改SysTick_Handler()函数{    TimingDelay_Decrement();  //这里添加了一句函数调用}

SysTick中断函数调用的函数

void TimingDelay_Decrement(void){    if (TimingDelay != 0x00){         TimingDelay--;        //每次SysTick中断就自减1,直到为0    }}

使用宏定义写出不同单位的延时函数

#define Delay_ms(x) Delay_us(1000*x)         //单位ms#define Delay_s(x)  Delay_us(1000000*x)      //单位s
0 0