TIMER.c 4.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /**
  2. * @copyright None
  3. * @file TIMER.c
  4. * @author Comment Vivre
  5. * @date 2025-11-03
  6. * @brief None
  7. */
  8. #include <Myproject.h>
  9. void Timer2_Init(void)
  10. {
  11. SetBit(PH_SEL, T2SEL); //P10
  12. SetBit(PH_SEL, T2SSEL); //P07
  13. ClrBit(TIM2_CR0, T2PSC2); //计数器时钟分频选择
  14. ClrBit(TIM2_CR0, T2PSC1); //000-->24M 001-->12M 010-->6M 011-->3M
  15. ClrBit(TIM2_CR0, T2PSC0); //100-->1.5M 101-->750K 110-->375K 111-->187.5K
  16. ClrBit(TIM2_CR0, T2OCM);
  17. SetBit(TIM2_CR0, T2IRE); //比较匹配中断/脉宽检测中断0-->Disable 1-->Enable
  18. ClrBit(TIM2_CR0, T2CES);
  19. ClrBit(TIM2_CR1, T2IPE); //输入Timer PWM周期检测中断使能 0-->Disable 1-->Enable
  20. ClrBit(TIM2_CR1, T2IFE); //计数器上溢中断使能 0-->Disable 1-->Enable
  21. ClrBit(TIM2_CR1, T2FE); //输入噪声滤波使能,小于4个时钟周期脉宽滤除
  22. ClrBit(TIM2_CR1, T2DIR); //QEP&ISD&步进模式专用:当前的方向 0-->正向 1-->反向
  23. TIM2__DR = 1200;
  24. TIM2__ARR = 2400;
  25. ClrBit(TIM2_CR0, T2MOD1); //00-->输入Timer模式 01-->输出模式
  26. SetBit(TIM2_CR0, T2MOD0); //10-->输入Counter模式 11-->QEP&ISD&步进模式
  27. SetBit(TIM2_CR1, T2CEN); //TIM2使能 0-->Disable 1-->Enable
  28. }
  29. void Timer3_Init(void)
  30. {
  31. SetBit(PH_SEL, T3SEL); //Timer3端口使能
  32. ClrBit(PH_SEL1, T3CT0); //默认端口为P11,功能转移后为P01,需TIMER4转移到P00
  33. ClrBit(PH_SEL1, T3CT1); //默认端口为P11,功能转移后为P01,需TIMER4转移到P00
  34. ClrBit(TIM3_CR0, T3PSC2); //计数器时钟分频选择
  35. SetBit(TIM3_CR0, T3PSC1); //000-->24M 001-->12M 010-->6M 011-->3M
  36. SetBit(TIM3_CR0, T3PSC0); //100-->1.5M 101-->750K 110-->375K 111-->187.5K
  37. // SetReg(TIM3_CR0 , T3PSC2 | T3PSC1 | T3PSC0 , T3PSC2 | T3PSC1 | T3PSC0);
  38. SetBit(TIM3_CR0, T3OCM);
  39. ClrBit(TIM3_CR0, T3IRE); //比较匹配中断/脉宽检测中断0-->Disable 1-->Enable
  40. ClrBit(TIM3_CR0, T3OPM); //0-->计数器不停止 1-->单次模式
  41. ClrBit(TIM3_CR1, T3IPE); //输入Timer PWM周期检测中断使能 0-->Disable 1-->Enable
  42. ClrBit(TIM3_CR1, T3IFE); //计数器上溢中断使能 0-->Disable 1-->Enable
  43. ClrBit(TIM3_CR1, T3NM1); //输入噪声脉宽选择
  44. SetBit(TIM3_CR1, T3NM0); //00-->不滤波 01-->4cycles 10-->8cycles 11-->16cycles
  45. SetBit(TIM3_CR0, T3MOD); //0-->Timer模式 1-->输出模式
  46. TIM3__CNTR = 0;
  47. TIM3__DR = 0; //分子,给定输出PWM占空比
  48. TIM3__ARR = 1000; //分母周期值,给定输出PWM周期,频率1000 3k 2000 1.5k
  49. SetBit(TIM3_CR1, T3EN); //TIM3使能 0-->Disable 1-->Enable
  50. }
  51. void Timer4_Init(void)
  52. {
  53. ClrBit(TIM4_CR1, T4EN); //0-停止计数;1-使能计数
  54. SetBit(PH_SEL, T4SEL); //Timer4端口使能
  55. SetBit(PH_SEL1, T4CT0); //默认端口为P01,功能转移后为P00
  56. SetBit(PH_SEL1, T4CT1); //默认端口为P01,功能转移后为P00
  57. SetBit(TIM4_CR0, T4PSC2); //计数器时钟分频选择
  58. SetBit(TIM4_CR0, T4PSC1); //000-->24M 001-->12M 010-->6M 011-->3M
  59. ClrBit(TIM4_CR0, T4PSC0); //100-->1.5M 101-->750K 110-->375K 111-->187.5K
  60. SetBit(TIM4_CR0, T4OCM);
  61. ClrBit(TIM4_CR0, T4IRE); //比较匹配中断/脉宽检测中断0-->Disable 1-->Enable
  62. ClrBit(TIM4_CR0, T4OPM); //0-->计数器不停止 1-->单次模式
  63. // ClrBit(TIM4_CR1, T4IR | T4IF | T4IP); // 清除中断标志位
  64. ClrBit(TIM4_CR1, T4IPE); //输入Timer PWM周期检测中断使能 0-->Disable 1-->Enable
  65. ClrBit(TIM4_CR1, T4IFE); //计数器上溢中断使能 0-->Disable 1-->Enable
  66. ClrBit(TIM4_CR1, T4NM1); //输入噪声脉宽选择
  67. ClrBit(TIM4_CR1, T4NM0); //00-->不滤波 01-->4cycles 10-->8cycles 11-->16cycles
  68. ClrBit(TIM4_CR0, T4MOD); //0-->Timer模式 1-->输出模式
  69. TIM4__CNTR = 0;
  70. TIM4__DR = 0;
  71. TIM4__ARR = 0;
  72. SetBit(TIM4_CR1, T4EN); //TIM4使能 0-->Disable 1-->Enable
  73. }
  74. /**
  75. @function SysTick
  76. @brief 任务定时器
  77. @date 2025-11-01
  78. */
  79. void SysTick(void)
  80. {
  81. // 配置计数值
  82. SYST_ARR = 24000;
  83. // 优先级配置
  84. SetReg(IP2, PSYSTICK1 | PSYSTICK0, PSYSTICK0);
  85. // 中断使能
  86. SetBit(DRV_SR, SYSTIE);
  87. }