-
Notifications
You must be signed in to change notification settings - Fork 1k
Description
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
Arduino_Core_STM32/variants/STM32F7xx/F765Z(G-I)T_F767Z(G-I)T_F777ZIT/variant_NUCLEO_F767ZI.cpp
Lines 206 to 218 in 8e173d6
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
Arduino_Core_STM32/system/Drivers/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
Lines 600 to 602 in 8e173d6
#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
Arduino_Core_STM32/system/Drivers/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_rcc_ex.h
Lines 3504 to 3505 in 8e173d6
#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:
- Plug in Nucleo F767
- Upload Blinky
- Nothing happens
Expected behavior
Clock init code should not crash chip.
Screenshots
Call stack of crash
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
Labels
Type
Projects
Status