delay.c 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. #include "gd32f10x.h"
  2. #include "delay.h"
  3. /*-------------------------------------------------*/
  4. /*函数名:延时初始化 */
  5. /*参 数:无 */
  6. /*返回值:无 */
  7. /*-------------------------------------------------*/
  8. void Delay_Init(void)
  9. {
  10. systick_clksource_set(SYSTICK_CLKSOURCE_HCLK); //设置Systick时钟
  11. }
  12. /*-------------------------------------------------*/
  13. /*函数名:延时微妙 */
  14. /*参 数:us:延时多少微妙 */
  15. /*返回值:无 */
  16. /*-------------------------------------------------*/
  17. void Delay_Us(uint16_t us)
  18. {
  19. SysTick->LOAD = us*108; //设置重载值
  20. SysTick->VAL = 0x00; //清除当前计数器值
  21. SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; //开Systick
  22. while(!(SysTick->CTRL&SysTick_CTRL_COUNTFLAG_Msk)); //等到Systick从LOAD重载值倒数到0,标志位置位,表示延时时间到
  23. SysTick->CTRL &=~ SysTick_CTRL_ENABLE_Msk; //关Systick
  24. }
  25. /*-------------------------------------------------*/
  26. /*函数名:延时毫秒 */
  27. /*参 数:us:延时多少毫秒 */
  28. /*返回值:无 */
  29. /*-------------------------------------------------*/
  30. void Delay_Ms(uint16_t ms)
  31. {
  32. while(ms--){ //循环
  33. Delay_Us(1000); //每次延时1000us
  34. }
  35. }