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