void PWM_IRQ_HANDLER(void) { uint16_t pwmValue; uint16_t periodValue; uint8_t edge; edge = !(PWM_TIM->SR & TIM_IT_CC2); periodValue = PWM_TIM->CCR1; pwmValue = PWM_TIM->CCR2; // is this an OW reset pulse? if (state == ESC_STATE_DISARMED && edge == 1 && (periodValue - pwmValue) > OW_RESET_MIN && (periodValue - pwmValue) < OW_RESET_MAX) { owReset(); } // look for good RC PWM input else if (inputMode == ESC_INPUT_PWM && periodValue >= pwmMinPeriod && periodValue <= pwmMaxPeriod && pwmValue >= pwmMinValue && pwmValue <= pwmMaxValue) { if (edge == 0) { pwmValidMicros = timerMicros; runNewInput(pwmValue); } } // otherwise if already in OW mode, pass control to OW else if (inputMode == ESC_INPUT_OW) { owEdgeDetect(edge); } }
//timer1 TIM1_CC_IRQHandler中断 void PWM_IRQ_HANDLER(void) { uint16_t pwmValue; uint16_t periodValue; uint8_t edge; edge = !(PWM_TIM->SR & TIM_IT_CC2); periodValue = PWM_TIM->CCR1; //IO 输入PA8 周期 pwmValue = PWM_TIM->CCR2; //IO 输入(但是没有看到配置了使用哪个IO做为输入了) 脉宽长度 // is this an OW reset pulse? if (state == ESC_STATE_DISARMED && edge == 1 && (periodValue - pwmValue) > OW_RESET_MIN && (periodValue - pwmValue) < OW_RESET_MAX) { owReset();//ow的初始化,在调用owEdgeDetect前一定要先调用 } // look for good RC PWM input else if (inputMode == ESC_INPUT_PWM && //PWM输入模式 periodValue >= pwmMinPeriod && periodValue <= pwmMaxPeriod && //pa8输入的周期范围 pwmValue >= pwmMinValue && pwmValue <= pwmMaxValue //脉宽长度 ) { if (edge == 0) { pwmValidMicros = timerMicros; runNewInput(pwmValue); //PWM正确.输入 } } // otherwise if already in OW mode, pass control to OW else if (inputMode == ESC_INPUT_OW) { //是1wire通讯协议 owEdgeDetect(edge); } }