@@ -587,7 +587,14 @@ void TimerPinInit(stimer_t *obj, uint32_t frequency, uint32_t duration)
587587return ;
588588 }
589589
590- obj -> timer = TIMER_TONE ;
590+ if (obj -> timer == NULL ) {
591+ #ifdef TIMER_TONE
592+ obj -> timer = TIMER_TONE ;
593+ #else
594+ return ;
595+ #endif
596+ }
597+
591598obj -> pinInfo .state = 0 ;
592599
593600if (frequency == 0 ) {
@@ -635,8 +642,10 @@ void TimerPinInit(stimer_t *obj, uint32_t frequency, uint32_t duration)
635642 */
636643void TimerPinDeinit (stimer_t * obj )
637644{
638- TimerHandleDeinit (obj );
639- pin_function (obj -> pin ,STM_PIN_DATA (STM_MODE_INPUT ,GPIO_NOPULL ,0 ));
645+ if (obj -> timer != NULL ) {
646+ TimerHandleDeinit (obj );
647+ pin_function (obj -> pin ,STM_PIN_DATA (STM_MODE_INPUT ,GPIO_NOPULL ,0 ));
648+ }
640649}
641650
642651/**
@@ -652,7 +661,11 @@ void TimerPulseInit(stimer_t *obj, uint16_t period, uint16_t pulseWidth, void (*
652661TIM_HandleTypeDef * handle = & (obj -> handle );
653662
654663if (obj -> timer == NULL ) {
664+ #ifdef TIMER_SERVO
655665obj -> timer = TIMER_SERVO ;
666+ #else
667+ return ;
668+ #endif
656669 }
657670
658671//min pulse = 1us - max pulse = 65535us
@@ -683,13 +696,15 @@ void TimerPulseDeinit(stimer_t *obj)
683696obj -> irqHandleOC_CH3 = NULL ;
684697obj -> irqHandleOC_CH4 = NULL ;
685698
686- HAL_NVIC_DisableIRQ (getTimerIrq (obj -> timer ));
699+ if (obj -> timer != NULL ) {
700+ HAL_NVIC_DisableIRQ (getTimerIrq (obj -> timer ));
687701
688- if (HAL_TIM_OC_DeInit (handle )!= HAL_OK ) {
689- return ;
690- }
691- if (HAL_TIM_OC_Stop_IT (handle ,TIM_CHANNEL_1 )!= HAL_OK ) {
692- return ;
702+ if (HAL_TIM_OC_DeInit (handle )!= HAL_OK ) {
703+ return ;
704+ }
705+ if (HAL_TIM_OC_Stop_IT (handle ,TIM_CHANNEL_1 )!= HAL_OK ) {
706+ return ;
707+ }
693708 }
694709}
695710