Skip to content

Commit 307a13c

Browse files
committed
[STM32F3XX] Fix timer interrupt handler
1 parent bb56598 commit 307a13c

File tree

6 files changed

+104
-80
lines changed

6 files changed

+104
-80
lines changed

hal/targets/cmsis/TARGET_STM/TARGET_STM32F3/TARGET_DISCO_F303VC/hal_tick.c

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

4242
void timer_irq_handler(void) {
4343
// Channel 1 for mbed timeout
44-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC1) == SET) {
45-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
46-
us_ticker_irq_handler();
44+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) {
45+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) {
46+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
47+
us_ticker_irq_handler();
48+
}
4749
}
4850

4951
// Channel 2 for HAL tick
50-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC2) == SET) {
51-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
52-
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
53-
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
54-
// Increment HAL variable
55-
HAL_IncTick();
56-
// Prepare next interrupt
57-
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
58-
PreviousVal = val;
52+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC2) == SET) {
53+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC2) == SET) {
54+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
55+
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
56+
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
57+
// Increment HAL variable
58+
HAL_IncTick();
59+
// Prepare next interrupt
60+
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
61+
PreviousVal = val;
5962
#if 0 // For DEBUG only
60-
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
63+
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
6164
#endif
65+
}
6266
}
6367
}
6468
}

hal/targets/cmsis/TARGET_STM/TARGET_STM32F3/TARGET_DISCO_F334C8/hal_tick.c

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

4242
void timer_irq_handler(void) {
4343
// Channel 1 for mbed timeout
44-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC1) == SET) {
45-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
46-
us_ticker_irq_handler();
44+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) {
45+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) {
46+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
47+
us_ticker_irq_handler();
48+
}
4749
}
4850

4951
// Channel 2 for HAL tick
50-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC2) == SET) {
51-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
52-
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
53-
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
54-
// Increment HAL variable
55-
HAL_IncTick();
56-
// Prepare next interrupt
57-
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
58-
PreviousVal = val;
52+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC2) == SET) {
53+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC2) == SET) {
54+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
55+
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
56+
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
57+
// Increment HAL variable
58+
HAL_IncTick();
59+
// Prepare next interrupt
60+
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
61+
PreviousVal = val;
5962
#if 0 // For DEBUG only
60-
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
63+
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
6164
#endif
65+
}
6266
}
6367
}
6468
}

hal/targets/cmsis/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F302R8/hal_tick.c

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

4242
void timer_irq_handler(void) {
4343
// Channel 1 for mbed timeout
44-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC1) == SET) {
45-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
46-
us_ticker_irq_handler();
44+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) {
45+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) {
46+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
47+
us_ticker_irq_handler();
48+
}
4749
}
4850

4951
// Channel 2 for HAL tick
50-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC2) == SET) {
51-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
52-
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
53-
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
54-
// Increment HAL variable
55-
HAL_IncTick();
56-
// Prepare next interrupt
57-
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
58-
PreviousVal = val;
52+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC2) == SET) {
53+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC2) == SET) {
54+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
55+
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
56+
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
57+
// Increment HAL variable
58+
HAL_IncTick();
59+
// Prepare next interrupt
60+
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
61+
PreviousVal = val;
5962
#if 0 // For DEBUG only
60-
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
63+
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
6164
#endif
65+
}
6266
}
6367
}
6468
}

hal/targets/cmsis/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303K8/hal_tick.c

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

4242
void timer_irq_handler(void) {
4343
// Channel 1 for mbed timeout
44-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC1) == SET) {
45-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
46-
us_ticker_irq_handler();
44+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) {
45+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) {
46+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
47+
us_ticker_irq_handler();
48+
}
4749
}
4850

4951
// Channel 2 for HAL tick
50-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC2) == SET) {
51-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
52-
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
53-
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
54-
// Increment HAL variable
55-
HAL_IncTick();
56-
// Prepare next interrupt
57-
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
58-
PreviousVal = val;
52+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC2) == SET) {
53+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC2) == SET) {
54+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
55+
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
56+
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
57+
// Increment HAL variable
58+
HAL_IncTick();
59+
// Prepare next interrupt
60+
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
61+
PreviousVal = val;
5962
#if 0 // For DEBUG only
60-
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
63+
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
6164
#endif
65+
}
6266
}
6367
}
6468
}

hal/targets/cmsis/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303RE/hal_tick.c

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -41,24 +41,28 @@ void us_ticker_irq_handler(void);
4141

4242
void timer_irq_handler(void) {
4343
// Channel 1 for mbed timeout
44-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC1) == SET) {
45-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
46-
us_ticker_irq_handler();
44+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) {
45+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) {
46+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
47+
us_ticker_irq_handler();
48+
}
4749
}
4850

4951
// Channel 2 for HAL tick
50-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC2) == SET) {
51-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
52-
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
53-
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
54-
// Increment HAL variable
55-
HAL_IncTick();
56-
// Prepare next interrupt
57-
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
58-
PreviousVal = val;
59-
#if 0 // For DEBUG only
60-
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
61-
#endif
52+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC2) == SET) {
53+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC2) == SET) {
54+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
55+
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
56+
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
57+
// Increment HAL variable
58+
HAL_IncTick();
59+
// Prepare next interrupt
60+
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
61+
PreviousVal = val;
62+
#if 0 // For DEBUG only
63+
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
64+
#endif
65+
}
6266
}
6367
}
6468
}

hal/targets/cmsis/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F334R8/hal_tick.c

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

4242
void timer_irq_handler(void) {
4343
// Channel 1 for mbed timeout
44-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC1) == SET) {
45-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
46-
us_ticker_irq_handler();
44+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC1) == SET) {
45+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC1) == SET) {
46+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC1);
47+
us_ticker_irq_handler();
48+
}
4749
}
4850

4951
// Channel 2 for HAL tick
50-
if (__HAL_TIM_GET_ITSTATUS(&TimMasterHandle, TIM_IT_CC2) == SET) {
51-
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
52-
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
53-
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
54-
// Increment HAL variable
55-
HAL_IncTick();
56-
// Prepare next interrupt
57-
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
58-
PreviousVal = val;
52+
if (__HAL_TIM_GET_FLAG(&TimMasterHandle, TIM_FLAG_CC2) == SET) {
53+
if (__HAL_TIM_GET_IT_SOURCE(&TimMasterHandle, TIM_IT_CC2) == SET) {
54+
__HAL_TIM_CLEAR_IT(&TimMasterHandle, TIM_IT_CC2);
55+
uint32_t val = __HAL_TIM_GetCounter(&TimMasterHandle);
56+
if ((val - PreviousVal) >= HAL_TICK_DELAY) {
57+
// Increment HAL variable
58+
HAL_IncTick();
59+
// Prepare next interrupt
60+
__HAL_TIM_SetCompare(&TimMasterHandle, TIM_CHANNEL_2, val + HAL_TICK_DELAY);
61+
PreviousVal = val;
5962
#if 0 // For DEBUG only
60-
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
63+
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_6);
6164
#endif
65+
}
6266
}
6367
}
6468
}

0 commit comments

Comments
 (0)