/**************************************************************************** * Copyright: (C)2014 Î人ÁèÔÆÇ¶ÈëʽʵÑéÊÒ www.emblinux.com * Author: GuoWenxue QQ: 281143292 * Description: ·Ü¶·STM32v5¿ª·¢°åsystickºÍÑÓʱÏà¹Øº¯Êý£» * * ChangeLog: * °æ±¾ºÅ ÈÕÆÚ ×÷Õß ËµÃ÷ * V1.0.0 2014.08.25 GuoWenxue ·¢²¼¸Ã°æ±¾ ****************************************************************************/ #include "stm32f10x.h" #include "stm32v5_systick.h" static __IO uint32_t s_delay_clocks; /* SysTick_Config½«»á´ÓAHB×ÜÏß»ñȡʱÖÓ£¬¶øAHB×ÜÏßÓëϵͳºËÐÄʱÖÓÒ»ÖÂΪ72MHz.Ëü µÄÊäÈë²ÎÊýΪSystick½«Òª¼ÆÊ±µÄÂö³åÊý£¬¾­¹ýticks¸öÂö³åºó½«´¥·¢Öжϣ¬Öжϴ¦Àí ³ÌÐòÖн«ÖØÐ¼¼Êõ¡£ÓÉ´ËÎÒÃÇ¿ÉÒÔ¼ÆËã³ö¶¨Ê±µÄʱ¼ä£¬ÏÂÃæÎª¼ÆË㹫ʽ£º T=ticks*(1/f) TΪҪ¶¨Ê±µÄ×Üʱ¼ä; ticksΪSysTick_Config()µÄÊäÈë²ÎÊý;1/f¼´Îª SysTickʹÓõÄʱÖÓÔ´µÄʱÖÓÖÜÆÚ£¬fΪ¸ÃʱÖÓÔ´µÄʱÖÓÆµÂÊ£¬Îª72MHz. ÔÚÏÂÃæµÄ³ÌÐòÖÐ, SystemCoreClock¼´ÎªÏµÍ³Ê±ÖÓ(f),ÕâÑù£º T= (f/CLOCK_SECOND) * (1*f) = 1/CLOCK_SECOND ËùÒÔ£¬Èç¹ûÎÒÃÇÐèÒª1ms¶¨Ê±£¬Ö»ÐèÒª½«CLOCK_SECOND¶¨ÒåΪ1000; Èç¹ûÎÒÃÇÐèÒª1us¶¨Ê±£¬Ö»ÐèÒª½«CLOCK_SECOND¶¨ÒåΪ1000000; */ void sysclock_init(void) { if (SysTick_Config(SystemCoreClock / CLOCK_CONF_SECOND)) { while(1); } } void SysTick_Handler(void) { if (s_delay_clocks != 0x00) { s_delay_clocks--; } } void msleep(__IO uint32_t ms) { s_delay_clocks = ms; while(s_delay_clocks != 0); }