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 纠错