我的工程使用了TMOS系统。把定时器1重映射到PB10,使用DMA PWM功能;
GPIOB_ModeCfg(GPIO_Pin_10, GPIO_ModeOut_PP_5mA); GPIOPinRemap(ENABLE, RB_PIN_TMR1); TMR1_PWMCycleCfg(120000); // 周期 2000us TMR1_DMACfg(ENABLE, (uint16_t)(uint32_t)&PwmBuf[0], (uint16_t)(uint32_t)&PwmBuf[11], Mode_Single); TMR1_PWMInit(High_Level, PWM_Times_1); /* 开启周期结束中断 */ TMR1_ClearITFlag(TMR1_2_IT_DMA_END); PFIC_EnableIRQ(TMR1_IRQn); TMR1_ITCfg(ENABLE, TMR1_2_IT_DMA_END);
中断里是这样的
__INTERRUPT __HIGH_CODE void TMR1_IRQHandler(void) { if(TMR1_GetITFlag(TMR1_2_IT_DMA_END)) { TMR1_ClearITFlag(TMR1_2_IT_DMA_END); PFIC_DisableIRQ(TMR1_IRQn); TMR1_ITCfg(DISABLE, TMR1_2_IT_DMA_END); /* DMA 结束 */ /* 用户可自行添加需要的处理 */ TMR1_DMACfg(DISABLE, (uint16_t)(uint32_t)&PwmBuf[0], (uint16_t)(uint32_t)&PwmBuf[11], Mode_Single); } }
但是PWM仍然在运行。
请问,1:如何关闭PWM?
2:还需关闭什么才能进入休眠状态?
热门产品 :
CH32L103: 32位PDUSB低功耗单片机