TIM5_Delay.c 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #include "TIM5_Delay.h"
  2. void TIM5_US_CALC(uint32_t us)
  3. {
  4. u16 counter=us&0xffff;
  5. TIM_Cmd(TIM5,ENABLE);
  6. TIM_SetCounter(TIM5,counter); //设置计数值
  7. while(counter>1)
  8. {
  9. counter=TIM_GetCounter(TIM5);
  10. }
  11. TIM_Cmd(TIM5,DISABLE);
  12. }
  13. void TIM5_MS_CALC(uint32_t ms)
  14. {
  15. u16 counter=(ms*100)&0xFFFF; //前提定时器时钟为100KHz
  16. TIM_Cmd(TIM5,ENABLE);
  17. TIM_SetCounter(TIM5,counter); //设置计数值
  18. while(counter>1)
  19. {
  20. counter=TIM_GetCounter(TIM5);
  21. }
  22. TIM_Cmd(TIM5,DISABLE);
  23. }
  24. void TIM5_S_CALC(uint32_t s)
  25. {
  26. u16 counter=(s*1250)&0xFFFF; //前提定时器时钟为1250Hz
  27. TIM_Cmd(TIM5,ENABLE);
  28. TIM_SetCounter(TIM5,counter); //设置计数值
  29. while(counter>1)
  30. {
  31. counter=TIM_GetCounter(TIM5);
  32. }
  33. TIM_Cmd(TIM5,DISABLE);
  34. }
  35. void TIM5_Init_Query(CALC_TYPE type,uint32_t val)
  36. {
  37. TIM_TimeBaseInitTypeDef Tim5;
  38. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);
  39. Tim5.TIM_Period=1; //???
  40. if(type==CALC_TYPE_US)
  41. {
  42. Tim5.TIM_Prescaler=72-1; //1MHz ,计数1次为us
  43. }
  44. else if(type==CALC_TYPE_MS)
  45. {
  46. Tim5.TIM_Prescaler=720-1; //100KHz ,定时器计数100次为1ms
  47. }
  48. else if(type==CALC_TYPE_S) //延时以S为单位时,时钟频率57600Hz,外部需要1250次计时
  49. {
  50. Tim5.TIM_Prescaler=57600-1; //预分频 72MHz / 57600= 1250Hz
  51. }
  52. else
  53. {
  54. Tim5.TIM_Prescaler=7200-1;
  55. }
  56. Tim5.TIM_ClockDivision=0;
  57. Tim5.TIM_CounterMode=TIM_CounterMode_Down; //向下计数
  58. TIM_TimeBaseInit(TIM5,&Tim5);
  59. #if 0
  60. if(type==CALC_TYPE_US)
  61. {
  62. TIM5_US_CALC(val);
  63. }
  64. else if(type==CALC_TYPE_MS)
  65. {
  66. TIM5_MS_CALC(val);
  67. }
  68. else if(type==CALC_TYPE_S)
  69. {
  70. TIM5_S_CALC(val);
  71. }
  72. else
  73. {
  74. ;
  75. }
  76. #endif
  77. }
  78. int TIM5_TEST_main()
  79. {
  80. SystemInit(); //库函数 初始化系统时钟源选择,PLL等
  81. #ifdef _DEBUG
  82. Init_PD11();
  83. #endif
  84. TIM5_Init_Query(CALC_TYPE_US, 0);
  85. while(1)
  86. {
  87. //PD11_U; //产生方波
  88. TIM5_US_CALC(1); //TIM5_MS_CALC(1); 毫秒延时, TIM5_S_CALC(1); 秒级别延时
  89. //PD11_D;
  90. TIM5_US_CALC(1);
  91. }
  92. }