@@ -852,12 +852,17 @@ void HardwareTimer::setInterruptPriority(uint32_t preemptPriority, uint32_t subP
852
852
*/
853
853
void HardwareTimer::attachInterrupt (void (*callback)(HardwareTimer *))
854
854
{
855
- callbacks[0 ] = callback;
856
- if (callback != NULL ) {
857
- // Clear flag before enabling IT
858
- __HAL_TIM_CLEAR_FLAG (&(_timerObj.handle ), TIM_FLAG_UPDATE);
859
- // Enable update interrupt only if callback is valid
860
- __HAL_TIM_ENABLE_IT (&(_timerObj.handle ), TIM_IT_UPDATE);
855
+ if (callbacks[0 ] != NULL ) {
856
+ // Callback previously configured : do not clear neither enable IT, it is just a change of callback
857
+ callbacks[0 ] = callback;
858
+ } else {
859
+ callbacks[0 ] = callback;
860
+ if (callback != NULL ) {
861
+ // Clear flag before enabling IT
862
+ __HAL_TIM_CLEAR_FLAG (&(_timerObj.handle ), TIM_FLAG_UPDATE);
863
+ // Enable update interrupt only if callback is valid
864
+ __HAL_TIM_ENABLE_IT (&(_timerObj.handle ), TIM_IT_UPDATE);
865
+ }
861
866
}
862
867
}
863
868
@@ -889,12 +894,17 @@ void HardwareTimer::attachInterrupt(uint32_t channel, void (*callback)(HardwareT
889
894
Error_Handler (); // only channel 1..4 have an interrupt
890
895
}
891
896
892
- callbacks[channel] = callback;
893
- if (callback != NULL ) {
894
- // Clear flag before enabling IT
895
- __HAL_TIM_CLEAR_FLAG (&(_timerObj.handle ), interrupt);
896
- // Enable interrupt corresponding to channel, only if callback is valid
897
- __HAL_TIM_ENABLE_IT (&(_timerObj.handle ), interrupt);
897
+ if (callbacks[channel] != NULL ) {
898
+ // Callback previously configured : do not clear neither enable IT, it is just a change of callback
899
+ callbacks[channel] = callback;
900
+ } else {
901
+ callbacks[channel] = callback;
902
+ if (callback != NULL ) {
903
+ // Clear flag before enabling IT
904
+ __HAL_TIM_CLEAR_FLAG (&(_timerObj.handle ), interrupt);
905
+ // Enable interrupt corresponding to channel, only if callback is valid
906
+ __HAL_TIM_ENABLE_IT (&(_timerObj.handle ), interrupt);
907
+ }
898
908
}
899
909
}
900
910
0 commit comments