Skip to content

Commit ad47719

Browse files
committed
[boards] Fix off-by-one in SysTick cyclesPerTick reload values
Cortex-M SysTick reloads every (LOAD + 1) cycles, so cyclesPerTick must be (clock / ticks_per_second) - 1 to produce the intended period. All ten board configs were one cycle high, causing systick to run slightly slow. Closes #38
1 parent 86c23b0 commit ad47719

10 files changed

Lines changed: 10 additions & 10 deletions

File tree

boards/pic32cz_curiosity_ultra/board.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ whal_Timer g_whalTimer = {
7676
.driver = WHAL_CORTEX_M7_SYSTICK_DRIVER,
7777

7878
.cfg = &(whal_SysTick_Cfg) {
79-
.cyclesPerTick = 300000000 / 1000,
79+
.cyclesPerTick = (300000000 / 1000) - 1, /* SysTick reloads every LOAD+1 cycles */
8080
.clkSrc = WHAL_SYSTICK_CLKSRC_SYSCLK,
8181
.tickInt = WHAL_SYSTICK_TICKINT_ENABLED,
8282
},

boards/stm32c031_nucleo/board.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ whal_Timer g_whalTimer = {
9292
.driver = WHAL_CORTEX_M0PLUS_SYSTICK_DRIVER,
9393

9494
.cfg = &(whal_SysTick_Cfg) {
95-
.cyclesPerTick = 48000000 / 1000, /* 48 MHz / 1 kHz = 1 ms tick */
95+
.cyclesPerTick = (48000000 / 1000) - 1, /* 48 MHz / 1 kHz = 1 ms tick (SysTick reloads every LOAD+1 cycles) */
9696
.clkSrc = WHAL_SYSTICK_CLKSRC_SYSCLK,
9797
.tickInt = WHAL_SYSTICK_TICKINT_ENABLED,
9898
},

boards/stm32f091rc_nucleo/board.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ whal_Timer g_whalTimer = {
104104
.driver = WHAL_CORTEX_M0_SYSTICK_DRIVER,
105105

106106
.cfg = &(whal_SysTick_Cfg) {
107-
.cyclesPerTick = 48000000 / 1000,
107+
.cyclesPerTick = (48000000 / 1000) - 1, /* SysTick reloads every LOAD+1 cycles */
108108
.clkSrc = WHAL_SYSTICK_CLKSRC_SYSCLK,
109109
.tickInt = WHAL_SYSTICK_TICKINT_ENABLED,
110110
},

boards/stm32f302r8_nucleo/board.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ whal_Timer g_whalTimer = {
107107
.driver = WHAL_CORTEX_M4_SYSTICK_DRIVER,
108108

109109
.cfg = &(whal_SysTick_Cfg) {
110-
.cyclesPerTick = 48000000 / 1000,
110+
.cyclesPerTick = (48000000 / 1000) - 1, /* SysTick reloads every LOAD+1 cycles */
111111
.clkSrc = WHAL_SYSTICK_CLKSRC_SYSCLK,
112112
.tickInt = WHAL_SYSTICK_TICKINT_ENABLED,
113113
},

boards/stm32f411_blackpill/board.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ whal_Timer g_whalTimer = {
9898
.driver = WHAL_CORTEX_M4_SYSTICK_DRIVER,
9999

100100
.cfg = &(whal_SysTick_Cfg) {
101-
.cyclesPerTick = 100000000 / 1000, /* 100 MHz / 1 kHz = 1 ms tick */
101+
.cyclesPerTick = (100000000 / 1000) - 1, /* 100 MHz / 1 kHz = 1 ms tick (SysTick reloads every LOAD+1 cycles) */
102102
.clkSrc = WHAL_SYSTICK_CLKSRC_SYSCLK,
103103
.tickInt = WHAL_SYSTICK_TICKINT_ENABLED,
104104
},

boards/stm32h563zi_nucleo/board.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ whal_Timer g_whalTimer = {
148148
.driver = WHAL_CORTEX_M33_SYSTICK_DRIVER,
149149

150150
.cfg = &(whal_SysTick_Cfg) {
151-
.cyclesPerTick = 168000000 / 1000, /* 168 MHz / 1 kHz = 1 ms tick */
151+
.cyclesPerTick = (168000000 / 1000) - 1, /* 168 MHz / 1 kHz = 1 ms tick (SysTick reloads every LOAD+1 cycles) */
152152
.clkSrc = WHAL_SYSTICK_CLKSRC_SYSCLK,
153153
.tickInt = WHAL_SYSTICK_TICKINT_ENABLED,
154154
},

boards/stm32l152re_nucleo/board.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ whal_Timer g_whalTimer = {
119119
.driver = WHAL_CORTEX_M3_SYSTICK_DRIVER,
120120

121121
.cfg = &(whal_SysTick_Cfg) {
122-
.cyclesPerTick = 32000000 / 1000,
122+
.cyclesPerTick = (32000000 / 1000) - 1, /* SysTick reloads every LOAD+1 cycles */
123123
.clkSrc = WHAL_SYSTICK_CLKSRC_SYSCLK,
124124
.tickInt = WHAL_SYSTICK_TICKINT_ENABLED,
125125
},

boards/stm32n657a0_nucleo/board.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ whal_Timer g_whalTimer = {
195195
.driver = WHAL_CORTEX_M55_SYSTICK_DRIVER,
196196

197197
.cfg = &(whal_SysTick_Cfg) {
198-
.cyclesPerTick = 64000000 / 1000, /* 64 MHz / 1 kHz = 1 ms tick */
198+
.cyclesPerTick = (64000000 / 1000) - 1, /* 64 MHz / 1 kHz = 1 ms tick (SysTick reloads every LOAD+1 cycles) */
199199
.clkSrc = WHAL_SYSTICK_CLKSRC_SYSCLK,
200200
.tickInt = WHAL_SYSTICK_TICKINT_ENABLED,
201201
},

boards/stm32wb55xx_nucleo/board.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ whal_Timer g_whalTimer = {
136136
.driver = WHAL_CORTEX_M4_SYSTICK_DRIVER,
137137

138138
.cfg = &(whal_SysTick_Cfg) {
139-
.cyclesPerTick = 64000000 / 1000,
139+
.cyclesPerTick = (64000000 / 1000) - 1, /* SysTick reloads every LOAD+1 cycles */
140140
.clkSrc = WHAL_SYSTICK_CLKSRC_SYSCLK,
141141
.tickInt = WHAL_SYSTICK_TICKINT_ENABLED,
142142
},

boards/stm32wba55cg_nucleo/board.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ whal_Timer g_whalTimer = {
144144
.driver = WHAL_CORTEX_M33_SYSTICK_DRIVER,
145145

146146
.cfg = &(whal_SysTick_Cfg) {
147-
.cyclesPerTick = 100000000 / 1000,
147+
.cyclesPerTick = (100000000 / 1000) - 1, /* SysTick reloads every LOAD+1 cycles */
148148
.clkSrc = WHAL_SYSTICK_CLKSRC_SYSCLK,
149149
.tickInt = WHAL_SYSTICK_TICKINT_ENABLED,
150150
},

0 commit comments

Comments
 (0)