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

小哲

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

 
 
 

日志

 
 

STM32 SYSTICK(二)  

2012-01-09 21:20:20|  分类: ARM7-STM32 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

/*========================配置方法二======================*/ 
 
#include "SysTick.h" 
 
static __IO u32 TimingDelay; 
 
/* 
 * 函数名:SysTick_Init 
 * 描述  :启动系统滴答定时器 SysTick 
 * 输入  :无 
 * 输出  :无 
 * 调用  :外部调用 
 */ 
void SysTick_Init(void

    /* SystemFrequency / 1000    1ms中断一次 
     * SystemFrequency / 100000     10us中断一次 
     * SystemFrequency / 1000000 1us中断一次 
     */ 
    if (SysTick_Config(SystemFrequency / 100000)) 
    { 
        /* Capture error */ 
        while (1); 
    } 

 
 
/* 
 * 函数名:Delay_us 
 * 描述  :us延时程序,10us为一个单位 
 * 输入  :- nTime 
 * 输出  :无 
 * 调用  :Delay_us( 1 ) 则实现的延时为 1 * 10us = 10us 
 *       :外部调用 
 */ 
 
void Delay_us(__IO u32 nTime) 

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

 
 
/* 
 * 函数名:TimingDelay_Decrement 
 * 描述  :获取节拍程序 
 * 输入  :无 
 * 输出  :无 
 * 调用  :在 SysTick 中断函数 SysTick_Handler()调用 
 */ 
void TimingDelay_Decrement(void

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

 
/****************************主函数********************************/ 
#include "stm32f10x.h" 
#include "systick.h" 
int main(void

    System_Init(); 
    SysTick_Init(); 
    while(1
    { 
        //首先是使能SYSTICK这个工作已经在调用SysTick_Config的时候使能了 
        Delay_ms(10); 
        GPIO_SetBits(GPIOE, GPIO_Pin_0); 
        Delay_ms(10); 
        GPIO_ResetBits(GPIOE, GPIO_Pin_0); 
 
        //使能定时器: 
        SysTick->CTRL = 1 << SYSTICK_ENABLE; 
        //时能定时器: 
        SysTick->CTRL = 0 << SYSTICK_ENABLE; 
    } 

 
 
 
 
 
== == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == 
== == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == 
== == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == 
== == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == 
== == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == == 
 
 
分析: 
 
/** 
 * @brief  Initialize and start the SysTick counter and its interrupt. 
 * 
 * @param  uint32_t ticks is the number of ticks between two interrupts 
 * @return  none 
 * 
 * Initialise the system tick timer and its interrupt and start the 
 * system tick timer / counter in free running mode to generate 
 * periodical interrupts. 
 */ 
static __INLINE uint32_t SysTick_Config(uint32_t ticks) 

    if (ticks > SYSTICK_MAXCOUNT) 
    { 
        return (1); /* Reload value impossible */ 
    } 
 
    SysTick->LOAD  =  (ticks & SYSTICK_MAXCOUNT) - 1/* set reload register */ 
    NVIC_SetPriority (SysTick_IRQn, (1 << __NVIC_PRIO_BITS) - 1); /* set Priority for Cortex-M0 System Interrupts */ 
    SysTick->VAL   =  (0x00);                  /* Load the SysTick Counter Value */ 
    SysTick->CTRL = (1 << SYSTICK_CLKSOURCE) | 
                    (1 << SYSTICK_ENABLE) | 
                    (1 << SYSTICK_TICKINT);    /* Enable SysTick IRQ and SysTick Timer */ 
    return (0);                    /* Function successful */ 

 
 
其中还有些定义: 
/* SysTick constants */ 
#define SYSTICK_ENABLE              0    /* Config-Bit to start or stop the SysTick Timer                         */ 
#define SYSTICK_TICKINT             1    /* Config-Bit to enable or disable the SysTick interrupt                 */ 
#define SYSTICK_CLKSOURCE           2     /* Clocksource has the offset 2 in SysTick Control and Status Register   */ 
#define SYSTICK_MAXCOUNT       ((1<<24) -1)/* SysTick MaxCount                                                      */ 
 
可以看出: 
(1)、其实调用SysTick_Config(uint32_t ticks)中主要有以下几个环节: 
        1、首先判断传入的参数是否大于最大值,因为其计数器时24位的,所以对大值为SYSTICK_MAXCOUNT = ((1 << 24) - 1) 
        2、装入重载值 
        3、设置分频值 
        4、转入初值 
        5、设置时钟源位为SYSTICK_CLKSOURCE位外部时钟源 
        6、倒数到0的时候产生SysTick异常请求 
        7、使能定时器 

(2)、使能和失能定时器的时候要注意!
 

  评论这张
 
阅读(813)| 评论(0)
推荐 转载

历史上的今天

评论

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

页脚

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