Skip to content

STM32F767 clock init crashes board #2692

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
maxgerhardt opened this issue Mar 18, 2025 · 1 comment · Fixed by #2693
Closed

STM32F767 clock init crashes board #2692

maxgerhardt opened this issue Mar 18, 2025 · 1 comment · Fixed by #2693
Labels
bug 🐛 Something isn't working
Milestone

Comments

@maxgerhardt
Copy link
Contributor

maxgerhardt commented Mar 18, 2025

Describe the bug

When using the Nucleo-F767ZI board, or all other STMF767 boards as I can see, will fail to boot into a STM32Duino firmware because the SystemClock_Config() for those boards triggers an assert().

Specifically, this code does not initialize the RCC_OscInitStruct.PLL.PLLR value to a legal value

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = 16;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
RCC_OscInitStruct.PLL.PLLM = 8;
RCC_OscInitStruct.PLL.PLLN = 216;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 9;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
Error_Handler();
}

Due to RCC_OscInitTypeDef RCC_OscInitStruct = {}; it will have value 0.

But then this assert will trigger

#if defined (RCC_PLLCFGR_PLLR)
assert_param(IS_RCC_PLLR_VALUE(RCC_OscInitStruct->PLL.PLLR));
#endif

Because A) For that chip, RCC_PLLCFGR_PLLR is defined and B) "0" is not valid for PLLR

#if defined (STM32F765xx) || defined (STM32F767xx) || defined (STM32F769xx) || defined (STM32F777xx) || defined (STM32F779xx)
#define IS_RCC_PLLR_VALUE(VALUE) ((2 <= (VALUE)) && ((VALUE) <= 7))

To Reproduce
Blinky code on Nucleo F767 does not work. Chip crashes on startup.

#define LED_PIN PB0  // Default user LED (LD1)

void setup() {
    Serial.begin(115200);
    pinMode(LED_PIN, OUTPUT);
    Serial.println("Setup Complete");
}

void loop() {
    digitalWrite(LED_PIN, HIGH);  // Turn LED on
    delay(500);
    digitalWrite(LED_PIN, LOW);   // Turn LED off
    delay(500);
}

Steps to reproduce the behavior:

  1. Plug in Nucleo F767
  2. Upload Blinky
  3. Nothing happens

Expected behavior
Clock init code should not crash chip.

Screenshots
Call stack of crash

Image

assert_failed (file=file@entry=0x8006534 “/Users/.platformio/packages/framework-arduinoststm32/system/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c”, line=line@entry=601) at /Users/.platformio/packages/framework-arduinoststm32/libraries/SrcWrapper/src/stm32/stm32_def.c:33

33 _Error_Handler((const char *)file, line);

Desktop (please complete the following information):

  • OS: Windows
  • Arduino IDE version: 2.3.4
  • STM32 core version: 2.10.1
  • Tools menu settings if not the default: Default
  • Upload method: SWD

Board (please complete the following information):

  • Name: Nucleo F767ZI
  • Hardware Revision: -/-
  • Extra hardware used if any: None

Additional context
Originally reported via PlatformIO forum.

@fpistm fpistm added the bug 🐛 Something isn't working label Mar 19, 2025
@fpistm fpistm added this to the 2.11.0 milestone Mar 19, 2025
@fpistm
Copy link
Member

fpistm commented Mar 19, 2025

Hi @maxgerhardt
Thanks for pointing this.
I guess by default you enable USE_FULL_ASSERT.

Do not hesitate to contribute and provide a PR when you got the fix.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug 🐛 Something isn't working
Projects
Development

Successfully merging a pull request may close this issue.

2 participants