TimerSetup.c 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /*--------------------------------------------------------------------------------------
  2. * @file TimerSetup.c
  3. * @author ZhangJing
  4. * @version base on stm32f0x
  5. * @date 2015.09.11
  6. * @brief 定时器驱动
  7. ---------------------------------------------------------------------------------------*/
  8. #include "stm32f10x_rcc.h"
  9. #include "stm32f10x_gpio.h"
  10. #include "stm32f10x_tim.h"
  11. #include "TypeDefine.h"
  12. #include "TimerSetup.h"
  13. /*********************************************************************************
  14. * Function: MotorPWMInit
  15. * Object: 电机PWM初始化
  16. * 输入: 无
  17. * 输出: 无
  18. * 备注: 用TIM1做PWM,控制电机转速
  19. **********************************************************************************/
  20. void MotorPWMInit( void )
  21. {
  22. TIM_OCInitTypeDef TIM_OCInitStructure;
  23. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  24. TIM_DeInit(TIM1);
  25. /* TIM1模块初始化 */
  26. /* TIM1基本计数器设置(设置PWM频率) */
  27. /* 频率 = TIM1_CLK/(ARR+1) */
  28. TIM_TimeBaseStructure.TIM_Period = 1000 - 1;
  29. TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1;
  30. TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  31. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  32. TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
  33. TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
  34. /* 启动ARR的影子寄存器(直到产生更新事件才更改设置) */
  35. TIM_ARRPreloadConfig(TIM1, ENABLE);
  36. //PWM模式设置 与通道设置TIM1_CH1(设置1通道占空比)
  37. TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
  38. TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  39. TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
  40. TIM_OCInitStructure.TIM_Pulse = 0; //当计数器到达127时,电平发送跳变
  41. TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //当计数器<127时,PWM为高电平
  42. TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low; //当计数器<127时,PWM为高电平
  43. TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset; //???????1
  44. TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset; //?????????0
  45. TIM_OC1Init(TIM1, &TIM_OCInitStructure);
  46. //开启TIM1
  47. TIM_Cmd(TIM1, ENABLE);
  48. TIM_CtrlPWMOutputs(TIM1, ENABLE);
  49. TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Enable);//Disable
  50. }