代码里更新END寄存值,按手册理解会自动清零COUNT,此时PWM应该根据POLAR输出对应的状态,实际测试没有输出保持了上一次的状态继续到下一个周期开始才会
测试代码如下:
void TMR1_IRQHandler( void )
{
GPIOA_SetBits(GPIO_Pin_4);
R8_TMR1_INT_FLAG = 0xff;
R32_TMR2_CNT_END = 640000;
R8_TMR2_CTRL_MOD = RB_TMR_COUNT_EN | RB_TMR_OUT_EN;//start
GPIOA_ResetBits(GPIO_Pin_4);
}
void TimInit(void)
{
PWR_UnitModCfg(DISABLE, UNIT_SYS_LSE); // 注意此引脚是LSE晶振引脚,要保证关闭才能使用其他功能
GPIOA_ResetBits(GPIO_Pin_11); // 配置PWM口 PA11
GPIOA_ModeCfg(GPIO_Pin_11, GPIO_ModeOut_PP_5mA);
GPIOA_ResetBits(GPIO_Pin_4);
GPIOA_ModeCfg(GPIO_Pin_4, GPIO_ModeOut_PP_5mA);
R8_TMR2_CTRL_MOD = RB_TMR_ALL_CLEAR;
R32_TMR2_CNT_END = 640000;
R8_TMR2_CTRL_MOD = 0;//RB_TMR_OUT_POLAR;
R32_TMR2_FIFO = 32000;//1ms
//R8_TMR2_CTRL_MOD = RB_TMR_OUT_POLAR | RB_TMR_COUNT_EN | RB_TMR_OUT_EN;//start
R8_TMR1_CTRL_MOD = RB_TMR_ALL_CLEAR; /* 清除所有计数值 */
R32_TMR1_CNT_END = 320000*5; /* 设置定时时间 */
R8_TMR1_CTRL_MOD = 0; /* 设置定时器模式 */
//R8_TMR1_INT_FLAG = R8_TMR1_INT_FLAG; /* 清除标志 */
R8_TMR1_INTER_EN = RB_TMR_IE_CYC_END; /* 定时中断 */
R8_TMR1_CTRL_MOD = RB_TMR_COUNT_EN;
NVIC_EnableIRQ(TMR1_IRQn);
}