delay.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include "ALL_Includes.h"
  2. #include "delay.h"
  3. u16 fac_ms;//全局变量
  4. u8 fac_us;//全局变量
  5. /****************************************************
  6. 函数功能:ms级延时
  7. 输入参数:nms : 毫秒
  8. 输出参数:无
  9. 备 注:调用此函数前,需要初始化Delay_Init()函数
  10. *****************************************************/
  11. void delay_ms(u16 nms)
  12. {
  13. SysTick->LOAD = (u32)fac_ms*nms-1;//加载时间值
  14. SysTick->VAL = 1;//随便写个值,清除加载寄存器的值
  15. SysTick->CTRL |= BIT(0);//SysTick使能
  16. while(!(SysTick->CTRL&(1<<16)));//判断是否减到0
  17. SysTick->CTRL &=~BIT(0);//关闭SysTick
  18. }
  19. /****************************************************
  20. 函数功能:延时初始化
  21. 输入参数:SYSCLK : 系统时钟(72)MHZ
  22. 输出参数:无
  23. 备 注:无
  24. *****************************************************/
  25. void Delay_Init(u8 SYSCLK)
  26. {
  27. SysTick->CTRL &= BIT(2);//选择外部时钟
  28. SysTick->CTRL &=~BIT(1);//关闭定时器减到0后的中断请求
  29. fac_us = SYSCLK/8;//计算好SysTick加载值
  30. fac_ms = (u16)fac_us*1000;
  31. }
  32. /****************************************************
  33. 函数功能:us级延时
  34. 输入参数:nus : 微秒
  35. 输出参数:无
  36. 备 注:调用此函数前,需要初始化Delay_Init()函数
  37. *****************************************************/
  38. void delay_us(u32 nus)
  39. {
  40. SysTick->LOAD = (u32)fac_us*nus-1;//加载时间值
  41. SysTick->VAL = 1;//随便写个值,清除加载寄存器的值
  42. SysTick->CTRL |= BIT(0);//SysTick使能
  43. while(!(SysTick->CTRL&(1<<16)));//判断是否减到0
  44. SysTick->CTRL &=~BIT(0);//关闭SysTick
  45. }
  46. void delay_ms_(uint32_t t)
  47. {
  48. uint16_t i;
  49. for(;t>0;t--)
  50. for(i=12000;i>0;i--);
  51. }