Skip to content

Commit 67ef32c

Browse files
committed
[STM32F7XX] Fix timer interrupt handler
1 parent db49b36 commit 67ef32c

File tree

3 files changed

+51
-39
lines changed

3 files changed

+51
-39
lines changed

hal/targets/cmsis/TARGET_STM/TARGET_STM32F7/TARGET_DISCO_F746NG/hal_tick.c

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,24 +45,28 @@ void us_ticker_irq_handler(void);
4545

4646
void timer_irq_handler(void) {
4747
// Channel 1 for mbed timeout
48-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC1) == SET) {
49-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
50-
us_ticker_irq_handler();
48+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) {
49+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) {
50+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
51+
us_ticker_irq_handler();
52+
}
5153
}
5254

5355
// Channel 2 for HAL tick
54-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC2) == SET) {
55-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
56-
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
57-
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
58-
// Increment HAL variable
59-
HAL_IncTick();
60-
// Prepare next interrupt
61-
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
62-
PreviousVal = val;
56+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC2) == SET) {
57+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC2) == SET) {
58+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
59+
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
60+
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
61+
// Increment HAL variable
62+
HAL_IncTick();
63+
// Prepare next interrupt
64+
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
65+
PreviousVal = val;
6366
#if DEBUG_TICK > 0
64-
HAL_GPIO_TogglePin(GPIOG, GPIO_PIN_6);
67+
HAL_GPIO_TogglePin(GPIOG, GPIO_PIN_6);
6568
#endif
69+
}
6670
}
6771
}
6872
}

hal/targets/cmsis/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/hal_tick.c

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,24 +45,28 @@ void us_ticker_irq_handler(void);
4545

4646
void timer_irq_handler(void) {
4747
// Channel 1 for mbed timeout
48-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC1) == SET) {
49-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
50-
us_ticker_irq_handler();
48+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) {
49+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) {
50+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
51+
us_ticker_irq_handler();
52+
}
5153
}
5254

5355
// Channel 2 for HAL tick
54-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC2) == SET) {
55-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
56-
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
57-
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
58-
// Increment HAL variable
59-
HAL_IncTick();
60-
// Prepare next interrupt
61-
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
62-
PreviousVal = val;
56+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC2) == SET) {
57+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC2) == SET) {
58+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
59+
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
60+
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
61+
// Increment HAL variable
62+
HAL_IncTick();
63+
// Prepare next interrupt
64+
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
65+
PreviousVal = val;
6366
#if DEBUG_TICK > 0
64-
HAL_GPIO_TogglePin(GPIOG, GPIO_PIN_6);
67+
HAL_GPIO_TogglePin(GPIOG, GPIO_PIN_6);
6568
#endif
69+
}
6670
}
6771
}
6872
}

hal/targets/cmsis/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F767ZI/hal_tick.c

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,24 +45,28 @@ void us_ticker_irq_handler(void);
4545

4646
void timer_irq_handler(void) {
4747
// Channel 1 for mbed timeout
48-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC1) == SET) {
49-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
50-
us_ticker_irq_handler();
48+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) {
49+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) {
50+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
51+
us_ticker_irq_handler();
52+
}
5153
}
5254

5355
// Channel 2 for HAL tick
54-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC2) == SET) {
55-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
56-
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
57-
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
58-
// Increment HAL variable
59-
HAL_IncTick();
60-
// Prepare next interrupt
61-
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
62-
PreviousVal = val;
56+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC2) == SET) {
57+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC2) == SET) {
58+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
59+
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
60+
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
61+
// Increment HAL variable
62+
HAL_IncTick();
63+
// Prepare next interrupt
64+
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
65+
PreviousVal = val;
6366
#if DEBUG_TICK > 0
64-
HAL_GPIO_TogglePin(GPIOG, GPIO_PIN_6);
67+
HAL_GPIO_TogglePin(GPIOG, GPIO_PIN_6);
6568
#endif
69+
}
6670
}
6771
}
6872
}

0 commit comments

Comments
 (0)