查看: 4137|回复: 2

[经验] 【GD32F207测评】2.用Systick定时器中断实现精准延时

[复制链接]
  • TA的每日心情
    开心
    2020-11-23 14:54
  • 签到天数: 19 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2016-1-24 19:47:31 | 显示全部楼层 |阅读模式
    分享到:
              和Stm32类似,但是注意一点的是,中断函数必须要写!否则不起作用!
    1.systick.c文件如下:
    1. /**
    2.   ******************************************************************************
    3.   * @file    SysTick/Systick_demo/systick.c
    4.   * @author  MCU SD
    5.   * @version V1.0.0
    6.   * @date    15-Jul-2015
    7.   * @brief   The SysTick configuration file.
    8.   ******************************************************************************
    9.   */

    10. #include "gd32f20x.h"
    11. #include "systick.h"

    12. static __IO uint32_t TimingDelay;

    13. /**
    14.   * @brief  Configure SysTick.
    15.   * @param  None
    16.   * @retval None
    17.   */
    18. void SysTick_Configuration(void)
    19. {   
    20.     /* Setup SysTick Timer for 1000Hz interrupts */
    21.     if (SysTick_Config(SystemCoreClock / 1000))
    22.     {
    23.         /* Capture error */
    24.         while (1);
    25.     }
    26. }

    27. /**
    28. * @brief  Insert a delay time.
    29. * @param  nTime: specifies the delay time length, in milliseconds.
    30. * @retval None
    31. */
    32. void Delay_1ms(uint32_t nTime)
    33. {  
    34.     TimingDelay = nTime;
    35.     while(TimingDelay != 0);
    36. }

    37. /**
    38. * @brief  Decrement the TimingDelay variable.
    39. * @param  None.
    40. * @retval None
    41. */
    42. void TimingDelay_Decrement(void)
    43. {
    44.     if (TimingDelay != 0x00)
    45.     {
    46.         TimingDelay--;
    47.     }
    48. }

    49. /******************* (C) COPYRIGHT 2015 GIGADEVICE *****END OF FILE****/   
    复制代码
    2. 在gd32f20x_it.c文件中:
    1. void SysTick_Handler(void)
    2. {
    3.    TimingDelay_Decrement();
    4. }
    复制代码
    这就OK了,main函数中先初始化,后调用即可!
    1. while(1)
    2.     {

    3. EvbLedControl(LED2, LED_ON);
    4. EvbLedControl(LED3, LED_ON);
    5. Delay_1ms(1000);
    6.                                
    7. EvbLedControl(LED2, LED_OFF);
    8. EvbLedControl(LED3, LED_OFF);
    9.                                
    10.                                         Delay_1ms(1000);
    11.                                        
    12.     }
    复制代码
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2016-1-25 09:13:06 | 显示全部楼层
    多谢分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-11-19 16:39
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2016-1-25 10:04:21 | 显示全部楼层
    亲,可以将内容一并发到经验频道,很有机会获得每月之星的呢http://jingyan.eeboard.com/
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-11-15 10:53 , Processed in 0.121910 second(s), 19 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.