Skip to content

Commit eac0ec3

Browse files
committed
[stm32h5_rcc, stm32h5_rng, stm32h5_flash, stm32h5_spi, boards] Fix small bugs. Add cortex-m33 platform header
1 parent 5ad62f0 commit eac0ec3

File tree

8 files changed

+79
-52
lines changed

8 files changed

+79
-52
lines changed

boards/stm32h563zi_nucleo/board.c

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ whal_Gpio g_whalGpio = {
7474
.pull = WHAL_STM32H5_GPIO_PULL_NONE,
7575
.altFn = 0,
7676
},
77-
[UART_TX_PIN] = { /* USART3 TX on PD8 */
77+
[UART_TX_PIN] = { /* USART2 TX on PD5 */
7878
.port = WHAL_STM32H5_GPIO_PORT_D,
7979
.pin = 5,
8080
.mode = WHAL_STM32H5_GPIO_MODE_ALTFN,
@@ -134,10 +134,10 @@ whal_Gpio g_whalGpio = {
134134

135135
/* Timer */
136136
whal_Timer g_whalTimer = {
137-
WHAL_CORTEX_M4_SYSTICK_DEVICE,
137+
WHAL_CORTEX_M33_SYSTICK_DEVICE,
138138

139139
.cfg = &(whal_SysTick_Cfg) {
140-
.cyclesPerTick = 168000000 / 1000, /* 250 MHz / 1 kHz = 1 ms tick */
140+
.cyclesPerTick = 168000000 / 1000, /* 168 MHz / 1 kHz = 1 ms tick */
141141
.clkSrc = WHAL_SYSTICK_CLKSRC_SYSCLK,
142142
.tickInt = WHAL_SYSTICK_TICKINT_ENABLED,
143143
},
@@ -187,20 +187,8 @@ whal_Flash g_whalFlash = {
187187
void Board_WaitMs(size_t ms)
188188
{
189189
uint32_t startCount = g_tick;
190-
g_waiting = 1;
191-
while (1) {
192-
uint32_t currentCount = g_tick;
193-
if (g_tickOverflow) {
194-
if ((UINT32_MAX - startCount) + currentCount > ms) {
195-
break;
196-
}
197-
} else if (currentCount - startCount > ms) {
198-
break;
199-
}
200-
}
201-
202-
g_waiting = 0;
203-
g_tickOverflow = 0;
190+
while ((g_tick - startCount) < ms)
191+
;
204192
}
205193

206194
/*

src/clock/stm32h5_rcc.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,12 @@ whal_Error whal_Stm32h5RccHsi_Deinit(whal_Clock *clkDev)
305305

306306
whal_Error whal_Stm32h5Rcc_Enable(whal_Clock *clkDev, const void *clk)
307307
{
308-
whal_Stm32h5Rcc_Clk *stClk = (whal_Stm32h5Rcc_Clk *)clk;
308+
whal_Stm32h5Rcc_Clk *stClk;
309+
310+
if (!clkDev || !clk)
311+
return WHAL_EINVAL;
312+
313+
stClk = (whal_Stm32h5Rcc_Clk *)clk;
309314

310315
whal_Reg_Update(clkDev->regmap.base, stClk->regOffset, stClk->enableMask,
311316
whal_SetBits(stClk->enableMask, stClk->enablePos, 1));
@@ -315,7 +320,12 @@ whal_Error whal_Stm32h5Rcc_Enable(whal_Clock *clkDev, const void *clk)
315320

316321
whal_Error whal_Stm32h5Rcc_Disable(whal_Clock *clkDev, const void *clk)
317322
{
318-
whal_Stm32h5Rcc_Clk *stClk = (whal_Stm32h5Rcc_Clk *)clk;
323+
whal_Stm32h5Rcc_Clk *stClk;
324+
325+
if (!clkDev || !clk)
326+
return WHAL_EINVAL;
327+
328+
stClk = (whal_Stm32h5Rcc_Clk *)clk;
319329

320330
whal_Reg_Update(clkDev->regmap.base, stClk->regOffset, stClk->enableMask,
321331
whal_SetBits(stClk->enableMask, stClk->enablePos, 0));

src/flash/stm32h5_flash.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,15 @@ whal_Error whal_Stm32h5Flash_Unlock(whal_Flash *flashDev, size_t addr,
161161
whal_Error whal_Stm32h5Flash_Read(whal_Flash *flashDev, size_t addr,
162162
uint8_t *data, size_t dataSz)
163163
{
164-
(void)flashDev;
164+
whal_Stm32h5Flash_Cfg *cfg;
165+
166+
if (!flashDev || !flashDev->cfg || !data)
167+
return WHAL_EINVAL;
168+
169+
cfg = flashDev->cfg;
170+
171+
if (addr < cfg->startAddr || addr + dataSz > cfg->startAddr + cfg->size)
172+
return WHAL_EINVAL;
165173

166174
uint8_t *flashAddr = (uint8_t *)addr;
167175
for (size_t i = 0; i < dataSz; ++i)
@@ -260,6 +268,9 @@ whal_Error whal_Stm32h5Flash_Erase(whal_Flash *flashDev, size_t addr,
260268
cfg = flashDev->cfg;
261269
regmap = &flashDev->regmap;
262270

271+
if (dataSz == 0)
272+
return WHAL_SUCCESS;
273+
263274
if (addr < cfg->startAddr || addr + dataSz > cfg->startAddr + cfg->size)
264275
return WHAL_EINVAL;
265276

src/rng/stm32h5_rng.c

Lines changed: 34 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -57,17 +57,49 @@
5757

5858
whal_Error whal_Stm32h5Rng_Init(whal_Rng *rngDev)
5959
{
60+
whal_Stm32h5Rng_Cfg *cfg;
61+
const whal_Regmap *reg;
62+
whal_Error err;
63+
6064
if (!rngDev || !rngDev->cfg)
6165
return WHAL_EINVAL;
6266

63-
return WHAL_SUCCESS;
67+
cfg = (whal_Stm32h5Rng_Cfg *)rngDev->cfg;
68+
reg = &rngDev->regmap;
69+
70+
/*
71+
* Apply NIST-certified configuration via CONDRST sequence:
72+
* 1. Write CONDRST=1 with configuration bits, RNGEN=0
73+
* 2. Write HTCR magic key then HTCR value (while CONDRST=1)
74+
* 3. Write NSCR value (while CONDRST=1)
75+
* 4. Write CONDRST=0 with RNGEN=1 to start
76+
*/
77+
whal_Reg_Write(reg->base, RNG_CR_REG,
78+
RNG_CR_NIST_CFG | RNG_CR_CONDRST_Msk);
79+
80+
whal_Reg_Write(reg->base, RNG_HTCR_REG, RNG_HTCR_MAGIC);
81+
whal_Reg_Write(reg->base, RNG_HTCR_REG, RNG_HTCR_NIST_VAL);
82+
whal_Reg_Write(reg->base, RNG_NSCR_REG, RNG_NSCR_NIST_VAL);
83+
84+
whal_Reg_Write(reg->base, RNG_CR_REG,
85+
RNG_CR_NIST_CFG | RNG_CR_RNGEN_Msk);
86+
87+
/* Wait for CONDRST to clear (reset complete) */
88+
err = whal_Reg_ReadPoll(reg->base, RNG_CR_REG,
89+
RNG_CR_CONDRST_Msk, 0, cfg->timeout);
90+
91+
return err;
6492
}
6593

6694
whal_Error whal_Stm32h5Rng_Deinit(whal_Rng *rngDev)
6795
{
6896
if (!rngDev || !rngDev->cfg)
6997
return WHAL_EINVAL;
7098

99+
/* Disable the RNG peripheral */
100+
whal_Reg_Update(rngDev->regmap.base, RNG_CR_REG, RNG_CR_RNGEN_Msk,
101+
whal_SetBits(RNG_CR_RNGEN_Msk, RNG_CR_RNGEN_Pos, 0));
102+
71103
return WHAL_SUCCESS;
72104
}
73105

@@ -89,29 +121,6 @@ whal_Error whal_Stm32h5Rng_Generate(whal_Rng *rngDev, uint8_t *rngData,
89121
(void)(cfg);
90122
#endif
91123

92-
/*
93-
* Apply NIST-certified configuration via CONDRST sequence:
94-
* 1. Write CONDRST=1 with configuration bits, RNGEN=0
95-
* 2. Write HTCR magic key then HTCR value (while CONDRST=1)
96-
* 3. Write NSCR value (while CONDRST=1)
97-
* 4. Write CONDRST=0 with RNGEN=1 to start
98-
*/
99-
whal_Reg_Write(reg->base, RNG_CR_REG,
100-
RNG_CR_NIST_CFG | RNG_CR_CONDRST_Msk);
101-
102-
whal_Reg_Write(reg->base, RNG_HTCR_REG, RNG_HTCR_MAGIC);
103-
whal_Reg_Write(reg->base, RNG_HTCR_REG, RNG_HTCR_NIST_VAL);
104-
whal_Reg_Write(reg->base, RNG_NSCR_REG, RNG_NSCR_NIST_VAL);
105-
106-
whal_Reg_Write(reg->base, RNG_CR_REG,
107-
RNG_CR_NIST_CFG | RNG_CR_RNGEN_Msk);
108-
109-
/* Wait for CONDRST to clear (reset complete) */
110-
err = whal_Reg_ReadPoll(reg->base, RNG_CR_REG,
111-
RNG_CR_CONDRST_Msk, 0, cfg->timeout);
112-
if (err)
113-
goto exit;
114-
115124
while (offset < rngDataSz) {
116125
/* Wait for a random value to be ready */
117126
WHAL_TIMEOUT_START(cfg->timeout);
@@ -137,18 +146,14 @@ whal_Error whal_Stm32h5Rng_Generate(whal_Rng *rngDev, uint8_t *rngData,
137146
}
138147

139148
/* Read 32-bit random value */
140-
uint32_t rnd = *(volatile uint32_t *)(reg->base + RNG_DR_REG);
149+
uint32_t rnd = (uint32_t)whal_Reg_Read(reg->base, RNG_DR_REG);
141150

142151
/* Copy bytes into output buffer */
143152
for (size_t i = 0; i < 4 && offset < rngDataSz; i++, offset++)
144153
rngData[offset] = (uint8_t)(rnd >> (i * 8));
145154
}
146155

147156
exit:
148-
/* Disable the RNG peripheral */
149-
whal_Reg_Update(reg->base, RNG_CR_REG, RNG_CR_RNGEN_Msk,
150-
whal_SetBits(RNG_CR_RNGEN_Msk, RNG_CR_RNGEN_Pos, 0));
151-
152157
return err;
153158
}
154159

src/spi/stm32h5_spi.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ whal_Error whal_Stm32h5Spi_StartCom(whal_Spi *spiDev, whal_Spi_ComCfg *comCfg)
172172
cpol = (comCfg->mode >> 1) & 1;
173173
cpha = comCfg->mode & 1;
174174
dsize = comCfg->wordSz - 1;
175-
fthlv = (comCfg->wordSz <= 8) ? 0 : 0; /* 1 data frame threshold */
175+
fthlv = 0; /* 1 data frame threshold */
176176

177177
/* Set baud rate, data size, FIFO threshold */
178178
whal_Reg_Update(reg->base, SPI_CFG1_REG,

wolfHAL/clock/stm32h5_rcc.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ typedef enum {
6363
typedef struct whal_Stm32h5Rcc_PllClkCfg {
6464
whal_Stm32h5Rcc_PllClockSrc clkSrc; /* PLL input source */
6565
uint16_t n; /* PLLN multiplier (3-512, VCO = input * (n+1)) */
66-
uint8_t m; /* PLLM divider (0-63, input / (m+1)) */
66+
uint8_t m; /* PLLM divider (1-63, input / m) */
6767
uint8_t p; /* PLLP divider (0-127, output / (p+1)) */
6868
uint8_t q; /* PLLQ divider (0-127, output / (q+1)) */
6969
uint8_t r; /* PLLR divider (0-127, output / (r+1)) */

wolfHAL/platform/arm/cortex_m33.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#ifndef WHAL_CORTEX_M33_H
2+
#define WHAL_CORTEX_M33_H
3+
4+
#include <wolfHAL/timer/systick.h>
5+
6+
#define WHAL_CORTEX_M33_SYSTICK_DEVICE \
7+
.regmap = { \
8+
.base = 0xE000E010, \
9+
.size = 0x400, \
10+
}, \
11+
.driver = &whal_SysTick_Driver
12+
13+
#endif /* WHAL_CORTEX_M33_H */

wolfHAL/platform/st/stm32h563xx.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#ifndef WHAL_STM32H563XX_H
22
#define WHAL_STM32H563XX_H
33

4-
#include <wolfHAL/platform/arm/cortex_m4.h>
4+
#include <wolfHAL/platform/arm/cortex_m33.h>
55

66
#include <wolfHAL/clock/stm32h5_rcc.h>
77
#include <wolfHAL/gpio/stm32h5_gpio.h>

0 commit comments

Comments
 (0)