STM32微处理器的Systick使用
在51单片机的定时器里,大家都会想到几乎万能的定时器T1。在以Cortex-M3为内核的STM32里,其拥有比51单片机更优秀的定时器功能,不仅在数量,而且质量也优几个档次。
对于我们平时使用延时或者计数定时器,我们更是无须使用STM32强大的TIM1,一个小小的systick定时器就完全能胜任了。
systick定时器是Cortex-M3为RTOS而专门定制的一款定时器,更多的优点请大家自行搜索,这里由于篇幅,不再赘述。
简单说说其使用,其定时器的计数间隔为系统主时钟(或者系统主时钟8分频),且为向下计数。当计数值溢出后,触发systick_handler中断,并自行装载计数值,准备下一次中断。
因此,对于我们72MHz的主频里,想要一个10Hz的中断触发,我们预置的计数值则为 72000000/10 = systemclock/10;
systick定时器的配置也非常简单,短短的一个语句即可完成:
if (SysTick_Config(SystemCoreClock / 10)) //参数为系统时钟的向上溢出值,此配置为7200000,即100ms中断一次
{
/* Capture error */
while (1);
}
下面版主帖出工程的源代码,以供参考:
/**
******************************************************************************
* @file main.c
* @author Jobs Zheng
* @version v1.0
* @date 2014-11-23 09:01
* @brief EEPW ARM DIY Systick实验
* @note 演示systick的实验
******************************************************************************
* @attention
*
*
© COPYRIGHT 2014
*
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include
#include
#include
#include "bsp_stm32_eepw.h"
/** @addtogroup STM32_EEPW
* @{
*/
/** @defgroup SYSTICK
* @brief
* @{
*/
/** @defgroup SYSTICK_Private_TypesDefinitions
* @{
*/
/**
* @}
*/
/** @defgroup SYSTICK_Private_Defines
* @{
*/
//#define XXXX () /*!< */
/**
* @}
*/
/** @defgroup SYSTICK_Private_Macros
* @{
*/
/**
* @}
*/
/** @defgroup SYSTICK_Private_Variables
* @{
*/
/**
* @}
*/
/** @defgroup SYSTICK_Private_FunctionPrototypes
* @{
*/
/**
* @}
*/
/** @defgroup SYSTICK_Private_Functions
* @{
*/
void main(void)
{
BspInit();
if (SysTick_Config(SystemCoreClock / 10)) //参数为系统时钟的向上溢出值,此配置为7200000,即100ms中断一次
{
/* Capture error */
while (1);
}
while(true)
{
;
}
}
/**
* @brief SysTick_Handler的中断入口函数
* @param
* @retval
* @date 2014-11-23
* @note
*/
void SysTick_Handler(void)
{
LedToggle(LED_A);
LedToggle(LED_B);
}
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/******************* (C) EEPW.com.cn*****END OF FILE****/
工程文件需要回复才能看到哟~~
——回复可见内容——
感谢 网友liklon 纠错
我要赚赏金
