SN_PWM.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #ifndef SN_PWM_H
  2. #define SN_PWM_H
  3. #include "ciu32f003_std.h"
  4. //手动修改定时器3的时基参数
  5. #define TIM3_PRESCALER_VALUE 0x08 //设置定时器3的预分频系数 TIM3预分频参数范围为:0x0000~0x000F (是滤波时钟相关和计数时钟无关)
  6. #define TIM3_PERIOD_VALUE 4096u //设置定时器3的周期
  7. #define TIM3_CLOCK_DTS_DIVx TIM_CLOCK_DTS_DIV1 //设置定时器3的分频系数
  8. #define TIM3_CH_MOD0_16BIT_CH1_2 0u //工作模式 0,2 通道输入,2 通道输出模式,精度为 16bit
  9. #define TIM3_CH_MOD1_8BIT_CH1_1_2_3_4 1u //工作模式 1,2 通道输入,4 通道输出模式,精度为 8bit
  10. //手动修改定时器1的时基参数
  11. #define TIM1_PERIOD_VALUE 4096u //设置定时器1的周期
  12. #define TIM1_CLOCK_DTS_DIV1 TIM_CLOCK_DTS_DIV4 //设置定时器1的分频系数 (是死区时钟相关和计数时钟无关)
  13. #define TIM1_PRESCALER_VALUE 0x2E //设置高级定时器1的预分频系数 TIM1预分频参数范围为:0x0000~0xFFFF
  14. #define TIM_OUTPUT_MODE_PWM_x TIM_OUTPUT_MODE_PWM1 //设置PWM模式
  15. #define TIM_OUTPUT_POL_x TIM_OUTPUT_POL_HIGH //通道输出有效极性
  16. #define TIM_OUTPUT_NEGTIVE_POL_x TIM_OUTPUT_NEGTIVE_POL_HIGH //互补输出有效极性
  17. #define TIM_OUTPUT_IDLE_x TIM_OUTPUT_IDLE_SET //通道输出空闲电平
  18. #define TIM_OUTPUT_NEGTIVE_IDLE_x TIM_OUTPUT_NEGTIVE_IDLE_RESET //互补通道输出空闲电平
  19. //通道编码 SN_PWM_TIM3_OUT_init
  20. #define TIM3_CH1_PA0 (uint16_t)0x0001
  21. #define TIM3_CH3_PA3 (uint16_t)0x0002
  22. #define TIM3_CH2_PA4 (uint16_t)0x0004
  23. #define TIM3_CH1_PA5 (uint16_t)0x0008
  24. #define TIM3_CH3_PA6 (uint16_t)0x0010
  25. #define TIM3_CH2_PA7 (uint16_t)0x0020
  26. #define TIM3_CH1_PB0 (uint16_t)0x0040
  27. #define TIM3_CH4_PB4 (uint16_t)0x0080
  28. #define TIM3_CH3_PB5 (uint16_t)0x0100
  29. //通道编码 SN_PWM_TIM1_OUT_init
  30. #define TIM1_CH1_PA0 (uint16_t)0x0001 //af2 0
  31. #define TIM1_CH2_PA1 (uint16_t)0x0002 //af2 1
  32. #define TIM1_CH3_PA1 (uint16_t)0x0004 //af4 2
  33. #define TIM1_CH2_PA5 (uint16_t)0x0008 //af2 3
  34. #define TIM1_CH2_PB0 (uint16_t)0x0010 //af2 4
  35. #define TIM1_CH4_PB1 (uint16_t)0x0020 //af4 5
  36. #define TIM1_CH1_PB2 (uint16_t)0x0040 //af2 6
  37. #define TIM1_CH3_PB2 (uint16_t)0x0080 //af4 7
  38. #define TIM1_CH4_PB7 (uint16_t)0x0100 //af4 8
  39. #define TIM1_CH2_PC1 (uint16_t)0x0200 //af2 9
  40. //互补通道编码 SN_PWM_TIM1_OUT_init
  41. #define TIM1_CH2N_PA0 (uint16_t)0x0001 //af4 0
  42. #define TIM1_CH3N_PA0 (uint16_t)0x0002 //af5 1
  43. #define TIM1_CH3N_PA3 (uint16_t)0x0004 //af2 2
  44. #define TIM1_CH2N_PA4 (uint16_t)0x0008 //af2 3
  45. #define TIM1_CH1N_PB1 (uint16_t)0x0010 //af2 4
  46. #define TIM1_CH2N_PB1 (uint16_t)0x0020 //af3 5
  47. #define TIM1_CH1N_PB2 (uint16_t)0x0040 //af3 6
  48. #define TIM1_CH3N_PB5 (uint16_t)0x0080 //af2 7
  49. #define TIM1_CH1N_PB7 (uint16_t)0x0100 //af2 8
  50. #define TIM1_CH2N_PB7 (uint16_t)0x0200 //af3 9
  51. //再封装接口
  52. uint8_t SN_PWM_TIM3_OUT_init(uint16_t CHANNEL,uint32_t Duty_value); //设置定时器3输出PWM通道
  53. uint8_t SN_PWM_TIM1_OUT_init(uint16_t CHANNEL,uint32_t Duty_value); //设置定时器1输出PWM通道
  54. void SN_PWM_TIMx_CH_Duty(TIM_t *timx,uint32_t TIM_CHANNEL_x ,uint32_t Duty_value); //设置PWM输出占空比
  55. void SN_PWM_TIM3_CH_mode(uint8_t mod); //设置定时器3的pwm精度模式
  56. void SN_PWM_TIM1_OUT_Complementary(uint16_t CHANNEL_N); //设置互补互补pwm通道引脚
  57. void SN_TIM_PWM_Start(TIM_t *timx ,uint8_t TIM_CHANNEL_x); //使能PWM1互补通道输出
  58. void SN_TIM_PWM_Stop(TIM_t *timx,uint8_t TIM_CHANNEL_x); //关闭PWM1互补通道输出
  59. void SN_TIM1_OUT_Bleak(uint8_t IO); //刹车引脚设置
  60. #define SN_TIM3_PWM_Deinit() { std_tim_deinit(TIM3) ; std_rcc_apb1_clk_disable(RCC_PERIPH_CLK_TIM3) } //定时器3去初始
  61. #define SN_TIM1_PWM_Deinit() { std_tim_deinit(TIM1) ; std_rcc_apb2_clk_disable(RCC_PERIPH_CLK_TIM1) } //定时器1去初始
  62. #endif