@@ -601,8 +601,15 @@ STATIC mp_obj_t pyb_timer_init_helper(pyb_timer_obj_t *self, mp_uint_t n_args, c
601
601
}
602
602
603
603
// set IRQ priority (if not a special timer)
604
- if (self -> tim_id != 3 && self -> tim_id != 5 ) {
604
+ if (self -> tim_id != 5 ) {
605
605
HAL_NVIC_SetPriority (self -> irqn , IRQ_PRI_TIMX , IRQ_SUBPRI_TIMX );
606
+ if (self -> tim_id == 1 ) {
607
+ HAL_NVIC_SetPriority (TIM1_CC_IRQn , IRQ_PRI_TIMX , IRQ_SUBPRI_TIMX );
608
+ #if defined(TIM8 )
609
+ } else if (self -> tim_id == 8 ) {
610
+ HAL_NVIC_SetPriority (TIM8_CC_IRQn , IRQ_PRI_TIMX , IRQ_SUBPRI_TIMX );
611
+ #endif
612
+ }
606
613
}
607
614
608
615
// init TIM
@@ -932,7 +939,7 @@ STATIC mp_obj_t pyb_timer_channel(mp_uint_t n_args, const mp_obj_t *pos_args, mp
932
939
if (chan -> callback == mp_const_none ) {
933
940
HAL_TIM_PWM_Start (& self -> tim , TIMER_CHANNEL (chan ));
934
941
} else {
935
- HAL_TIM_PWM_Start_IT ( & self -> tim , TIMER_CHANNEL ( chan ) );
942
+ pyb_timer_channel_callback ( chan , chan -> callback );
936
943
}
937
944
// Start the complimentary channel too (if its supported)
938
945
if (IS_TIM_CCXN_INSTANCE (self -> tim .Instance , TIMER_CHANNEL (chan ))) {
@@ -970,7 +977,7 @@ STATIC mp_obj_t pyb_timer_channel(mp_uint_t n_args, const mp_obj_t *pos_args, mp
970
977
if (chan -> callback == mp_const_none ) {
971
978
HAL_TIM_OC_Start (& self -> tim , TIMER_CHANNEL (chan ));
972
979
} else {
973
- HAL_TIM_OC_Start_IT ( & self -> tim , TIMER_CHANNEL ( chan ) );
980
+ pyb_timer_channel_callback ( chan , chan -> callback );
974
981
}
975
982
// Start the complimentary channel too (if its supported)
976
983
if (IS_TIM_CCXN_INSTANCE (self -> tim .Instance , TIMER_CHANNEL (chan ))) {
@@ -997,7 +1004,7 @@ STATIC mp_obj_t pyb_timer_channel(mp_uint_t n_args, const mp_obj_t *pos_args, mp
997
1004
if (chan -> callback == mp_const_none ) {
998
1005
HAL_TIM_IC_Start (& self -> tim , TIMER_CHANNEL (chan ));
999
1006
} else {
1000
- HAL_TIM_IC_Start_IT ( & self -> tim , TIMER_CHANNEL ( chan ) );
1007
+ pyb_timer_channel_callback ( chan , chan -> callback );
1001
1008
}
1002
1009
break ;
1003
1010
}
@@ -1294,7 +1301,16 @@ STATIC mp_obj_t pyb_timer_channel_callback(mp_obj_t self_in, mp_obj_t callback)
1294
1301
self -> callback = mp_const_none ;
1295
1302
} else if (mp_obj_is_callable (callback )) {
1296
1303
self -> callback = callback ;
1297
- HAL_NVIC_EnableIRQ (self -> timer -> irqn );
1304
+ uint8_t tim_id = self -> timer -> tim_id ;
1305
+ if (tim_id == 1 ) {
1306
+ HAL_NVIC_EnableIRQ (TIM1_CC_IRQn );
1307
+ #if defined(TIM8 ) // STM32F401 doesn't have a TIM8
1308
+ } else if (tim_id == 8 ) {
1309
+ HAL_NVIC_EnableIRQ (TIM8_CC_IRQn );
1310
+ #endif
1311
+ } else {
1312
+ HAL_NVIC_EnableIRQ (self -> timer -> irqn );
1313
+ }
1298
1314
// start timer, so that it interrupts on overflow
1299
1315
switch (self -> mode ) {
1300
1316
case CHANNEL_MODE_PWM_NORMAL :
0 commit comments