SWM320_pwm.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #ifndef __SWM320_PWM_H__
  2. #define __SWM320_PWM_H__
  3. typedef struct
  4. {
  5. uint8_t clk_div; //PWM_CLKDIV_1、PWM_CLKDIV_8
  6. uint8_t mode; //PWM_MODE_INDEP、PWM_MODE_COMPL、PWM_MODE_INDEP_CALIGN、PWM_MODE_COMPL_CALIGN
  7. uint16_t cycleA; //A路周期
  8. uint16_t hdutyA; //A路占空比
  9. uint16_t deadzoneA; //A路死区时长,取值0--1023
  10. uint8_t initLevelA; //A路初始输出电平,0 低电平 1 高电平
  11. uint16_t cycleB; //B路周期
  12. uint16_t hdutyB; //B路占空比
  13. uint16_t deadzoneB; //B路死区时长,取值0--1023
  14. uint8_t initLevelB; //B路初始输出电平,0 低电平 1 高电平
  15. uint8_t HEndAIEn; //A路高电平结束中断使能
  16. uint8_t NCycleAIEn; //A路新周期开始中断使能
  17. uint8_t HEndBIEn; //B路高电平结束中断使能
  18. uint8_t NCycleBIEn; //B路新周期开始中断使能
  19. } PWM_InitStructure;
  20. #define PWM_CLKDIV_1 0
  21. #define PWM_CLKDIV_8 1
  22. #define PWM_MODE_INDEP 0 //A路和B路为两路独立输出
  23. #define PWM_MODE_COMPL 1 //A路和B路为一路互补输出
  24. #define PWM_MODE_INDEP_CALIGN 3 //A路和B路为两路独立输出,中心对齐
  25. #define PWM_MODE_COMPL_CALIGN 4 //A路和B路为一路互补输出,中心对齐
  26. #define PWM_CH_A 0
  27. #define PWM_CH_B 1
  28. void PWM_Init(PWM_TypeDef *PWMx, PWM_InitStructure *initStruct); //PWM初始化
  29. void PWM_Start(PWM_TypeDef *PWMx, uint32_t chA, uint32_t chB); //启动PWM,开始PWM输出
  30. void PWM_Stop(PWM_TypeDef *PWMx, uint32_t chA, uint32_t chB); //关闭PWM,停止PWM输出
  31. void PWM_SetCycle(PWM_TypeDef *PWMx, uint32_t chn, uint16_t cycle); //设置周期
  32. uint16_t PWM_GetCycle(PWM_TypeDef *PWMx, uint32_t chn); //获取周期
  33. void PWM_SetHDuty(PWM_TypeDef *PWMx, uint32_t chn, uint16_t hduty); //设置高电平时长
  34. uint16_t PWM_GetHDuty(PWM_TypeDef *PWMx, uint32_t chn); //获取高电平时长
  35. void PWM_SetDeadzone(PWM_TypeDef *PWMx, uint32_t chn, uint8_t deadzone); //设置死区时长
  36. uint8_t PWM_GetDeadzone(PWM_TypeDef *PWMx, uint32_t chn); //获取死区时长
  37. void PWM_IntNCycleEn(PWM_TypeDef *PWMx, uint32_t chn); //新周期开始中断使能
  38. void PWM_IntNCycleDis(PWM_TypeDef *PWMx, uint32_t chn); //新周期开始中断禁能
  39. void PWM_IntNCycleClr(PWM_TypeDef *PWMx, uint32_t chn); //新周期开始中断标志清除
  40. uint32_t PWM_IntNCycleStat(PWM_TypeDef *PWMx, uint32_t chn); //新周期开始中断是否发生
  41. void PWM_IntHEndEn(PWM_TypeDef *PWMx, uint32_t chn); //高电平结束中断使能
  42. void PWM_IntHEndDis(PWM_TypeDef *PWMx, uint32_t chn); //高电平结束中断禁能
  43. void PWM_IntHEndClr(PWM_TypeDef *PWMx, uint32_t chn); //高电平结束中断标志清除
  44. uint32_t PWM_IntHEndStat(PWM_TypeDef *PWMx, uint32_t chn); //高电平结束中断是否发生
  45. #endif //__SWM320_PWM_H__