測試通道6
在初始化時候打開通道中斷
void PWM1_GenerateFrequency(void)
{PWM_CombineChConfig combineChConfig[1]; //組合模式相關結構體PWM_IndependentChConfig independentChConfig[2];//獨立模式相關結構體PWM_ModulationConfigType pwmConfig; //PWM模式相關結構體PWM_ConfigType config; //PWM模塊結構體//結構體數據清零memset(&combineChConfig, 0, sizeof(combineChConfig));memset(&independentChConfig, 0, sizeof(independentChConfig));memset(&pwmConfig, 0, sizeof(pwmConfig));memset(&config, 0, sizeof(config));/*channel 6*/independentChConfig[0].channel = PWM_CH_6; //通道6independentChConfig[0].chValue = MOD_PWM >> 1;//通道6 channel值,輸出占空比 = chValue / (config.maxValue + 1) = 50%independentChConfig[0].levelMode = PWM_HIGH_TRUE; //輸出PWM高有效independentChConfig[0].polarity = PWM_OUTPUT_POLARITY_ACTIVE_LOW; //輸出極性高有效,PWM mask后PWM輸出低電平independentChConfig[0].interruptEn = ENABLE;//PWM通道匹配中斷使能位independentChConfig[0].initLevel = PWM_LOW_LEVEL;//PWM初始電平輸出為低,該配置受initChOutputEn控制,決定PWM計數器未工作前PWM口的輸出電平值。independentChConfig[0].triggerEn = DISABLE;//通道外部觸發使能
// /*channel 7*/independentChConfig[1].channel = PWM_CH_7; //通道7independentChConfig[1].chValue = MOD_PWM >> 2;//通道7 channel值,輸出占空比 = chValue / (config.maxValue + 1) = 25%independentChConfig[1].levelMode = PWM_HIGH_TRUE; //輸出PWM高有效independentChConfig[1].polarity = PWM_OUTPUT_POLARITY_ACTIVE_HIGH; //輸出極性高有效,PWM mask后PWM輸出低電平independentChConfig[1].interruptEn = DISABLE;//PWM通道匹配中斷使能位independentChConfig[1].initLevel = PWM_LOW_LEVEL;//PWM初始電平輸出為低,該配置受initChOutputEn控制,決定PWM計數器未工作前PWM口的輸出電平值。independentChConfig[1].triggerEn = DISABLE;//通道外部觸發使能/*modulation mode config*/pwmConfig.countMode = PWM_UP_COUNT; //PWM計數器模式 (不同的計數模式頻率及占空比計算方式不同)pwmConfig.independentChannelNum = 2; //獨立通道數pwmConfig.combineChannelNum = 0; //組合對數pwmConfig.independentChConfig = independentChConfig; //獨立通道配置變量地址賦值pwmConfig.combineChConfig = combineChConfig; //組合通道配置變量地址賦值pwmConfig.deadtimePsc = PWM_DEADTIME_DIVID_1;//死區插入分頻值,與deadtime一起決定插入死區的時間。pwmConfig.deadtime = 0; //死區時間 = (DTPSC * DTVAL)/PWM計數器時鐘周期 = 1*24/24000000 = 1uspwmConfig.initChOutputEn = DISABLE; //使能初始化通道輸出,使能后獨立PWM模式的initLevel和組合PWM模式的ch1stInitLevel和ch2ndPolarity配置才會生效pwmConfig.initTriggerEn = DISABLE; //通道外部觸發使能/*pwm config*/config.mode = PWM_MODE_MODULATION;//PWM模塊配置為PWM模式config.initModeStruct = &pwmConfig;//PWM配置結構體地址賦值config.clkSource = PWM_CLK_SOURCE_APB; //PWM時鐘源配置config.clkPsc = PWM_PRES;//PWM時鐘源分頻config.initValue = 0;//計數器初始寄存器值config.maxValue = MOD_PWM - 1; //PWM計數器最大值config.overflowInterrupEn = DISABLE;//計數器溢出中斷使能config.cntOverflowFreq = 0;//CNTOF中斷產生的頻率與計數器頻率的關系(0-127), 0表示每次計數器溢出都產生溢出中斷,1表示間隔1次,2表示間隔2次,以此內推。config.interruptEn = ENABLE; //PWM中斷使能config.callBack = PWM1_CallBack; //PWM中斷回調PWM_Init(PWM1, &config); //配置初始化生效NVIC_SetPriority(PWM1_IRQn, 0); //設置PWM模塊中斷的優先級
}
在中斷中對通道6開啟計數
測試結果多了一個小脈沖,如果是邊沿有效,可以減一個計數值