注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

小哲

从今以后,你会是所有幸福的理由!

 
 
 

日志

 
 

STM32 SYSTICK(一)  

2012-01-09 16:54:55|  分类: ARM7-STM32 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

 

/*************************************函数声明**********************************/ 
void SysTick_Config(void);//SysTick定时器配置 
void Delay_Ms(u32);//定时时间配置 
void void SysTickHandler(void);//中断定时时间处理函数 
static vu32 TimingDelay;//中断处理函数 
 
 
/******************************************************************************* 
* 函数名称 : void SysTick_Config(void) 
* 函数描述:SysTick定时器配置 
* 输入参数:无 
* 输出参数:无 
* 返回值:无 
*******************************************************************************/ 
//SysTick设置 
void SysTick_Config(void

    /* Disable SysTick Counter */ 
    SysTick_CounterCmd(SysTick_Counter_Disable); 
    /*函数原形  void SysTick_CounterCmd(u32 SysTick_Counter) 
    功能描述   使能或者失能SysTick计数器 
    输入参数   SysTick_Counter:SysTick计数器新状态 
               SysTick_Counter_Disable    失能计数器 
               SysTick_Counter_Enable     使能计数器 
               SysTick_Counter_Clear     清除计数器值为0 */ 
    /* Disable the SysTick Interrupt */ 
    SysTick_ITConfig(DISABLE); 
    /*函数原形  void SysTick_ITConfig(FunctionalState NewState) 
      功能描述    使能或者失能SysTick中断 
      输入参数    NewState:SysTick中断的新状态 
                  这个参数可以取:ENABLE或者DISABLE*/ 
    /* Configure HCLK clock as SysTick clock source */ 
    SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); 
    /*函数原形   void SysTick_CLKSourceConfig(u32 SysTick_CLKSource) 
      功能描述   设置SysTick时钟源 
      输入参数    SysTick_CLKSource:SysTick时钟源 
       SysTick_CLKSource_HCLK_Div8   SysTick时钟源为AHB时钟除以8 
       SysTick_CLKSource_HCLK        SysTick时钟源为AHB时钟*/ 
    /* SysTick interrupt each 1000 Hz with HCLK equal to 72MHz */ 
    SysTick_SetReload(9000); 
    //系统嘀嗒校准值固定到9000,当系统嘀嗒时钟设定为9 兆赫,产生1ms 时基。 
    /*函数原形   void SysTick_SetReload(u32 Reload) 
      功能描述    设置SysTick重装载值 
      输入参数    Reload:重装载值 
                  该参数取值必须在1和0x00FFFFFF之间*/ 
 
    /* Enable the SysTick Interrupt */ 
    SysTick_ITConfig(ENABLE); 
    /*函数原形  void SysTick_ITConfig(FunctionalState NewState) 
      功能描述    使能或者失能SysTick中断 
      输入参数    NewState:SysTick中断的新状态 
                  这个参数可以取:ENABLE或者DISABLE*/ 
 

 
/******************************************************************************* 
* 函数名称 :void Delay_Ms(u32 nTime) 
* 函数描述:定时时间配置 
* 输入参数:u32 nTime 
* 输出参数:无 
* 返回值:无 
*******************************************************************************/ 
void Delay_Ms(u32 nTime) 

    /* Enable the SysTick Counter */ 
    SysTick_CounterCmd(SysTick_Counter_Enable); 
    /*函数原形   void SysTick_CounterCmd(u32 SysTick_Counter) 
     功能描述   使能或者失能SysTick计数器 
     输入参数   SysTick_Counter:SysTick计数器新状态 
                参阅Section:SysTick_Counter查阅更多该参数允许取值范围 
                SysTick_Counter_Disable   失能计数器 
                SysTick_Counter_Enable     使能计数器 
                SysTick_Counter_Clear      清除计数器值为0*/ 
    TimingDelay = nTime; 
 
    while(TimingDelay != 0
    { 
    } 
    /*函数原形   void SysTick_CounterCmd(u32 SysTick_Counter) 
     功能描述   使能或者失能SysTick计数器 
     输入参数   SysTick_Counter:SysTick计数器新状态 
                参阅Section:SysTick_Counter查阅更多该参数允许取值范围 
                SysTick_Counter_Disable    失能计数器 
                SysTick_Counter_Enable     使能计数器 
                SysTick_Counter_Clear      清除计数器值为0*/ 
    /* Disable SysTick Counter */ 
    SysTick_CounterCmd(SysTick_Counter_Disable); 
    /* Clear SysTick Counter */ 
    SysTick_CounterCmd(SysTick_Counter_Clear); 
    /*函数原形    void SysTick_CounterCmd(u32 SysTick_Counter) 
      功能描述    使能或者失能SysTick计数器 
      输入参数    SysTick_Counter:SysTick计数器新状态 
                  参阅Section:SysTick_Counter查阅更多该参数允许取值范围 
     SysTick_Counter_Disable    失能计数器 
     SysTick_Counter_Enable     使能计数器 
     SysTick_Counter_Clear      清除计数器值为0*/ 

  
/******************************************************************************* 
* 函数名称 :void void SysTickHandler(void) 
* 函数描述:中断定时时间处理函数 
* 输入参数:u32 nTime 
* 输出参数:无 
* 返回值:无 
*******************************************************************************/ 
void SysTickHandler(void

    if (TimingDelay != 0x00
    { 
        TimingDelay--; 
    } 

     这里所有使用的都是在有stm32f10x_systick.c这个文件的时候,这个是2.0中才有的文件,3.0中使用并不是这样使用的@!
 


 

在这里说明一下的是,必须要注意,systick和普通的中断一样,当计数器溢出时就会产生中断,必须要再中断处理函数中处理,但是没有经过NVIC的控制,这个是需要注意的,没有使用NVIC配置systick。

其中systick异常,异常号15,这个定时的异常的主要功能用于操作系统提供时钟信号。

但是当产生恒定的systick中断频率:最简单的作法就是:直接把TENMS的值写入重装载寄存器,这样一来,只要没突破系统极限,就能做到每10ms来一次systick异常,如果需要其他的systick异常周期,则可以根据TENMS的值加以比例计算,只不过,在少数情况下,CM3芯片可能无法准确地提供TENMS的值(如,CM3的叫转输入信号被拉低)。

Systick定时器除了能服务于操作系统之外,还能用于其他目的:如作为一个闹钟,用于测量时间等。要注意的是,当处理器在调试器件被喊停hatl时,则systick定时器亦将暂停运作。

 

 

  评论这张
 
阅读(1246)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017