Skip to content

STM32F767 clock init crashes board #2692

Closed
@maxgerhardt

Description

@maxgerhardt

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bug 🐛Something isn't working

    Type

    Projects

    Status

    Done

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions