Skip to content
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

STM32: Prevent possible crashes before HAL init #22508

Merged
merged 12 commits into from
Aug 9, 2021
2 changes: 0 additions & 2 deletions Marlin/src/HAL/STM32/HAL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,6 @@ TERN_(POSTMORTEM_DEBUGGING, extern void install_min_serial());

// HAL initialization task
void HAL_init() {
FastIO_init();

// Ensure F_CPU is a constant expression.
// If the compiler breaks here, it means that delay code that should compute at compile time will not work.
// So better safe than sorry here.
Expand Down
2 changes: 1 addition & 1 deletion Marlin/src/HAL/STM32/fastio.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

#include "../../inc/MarlinConfig.h"

GPIO_TypeDef* FastIOPortMap[LastPort + 1];
GPIO_TypeDef* FastIOPortMap[LastPort + 1] = { 0 };

void FastIO_init() {
LOOP_L_N(i, NUM_DIGITAL_PINS)
Expand Down
1 change: 1 addition & 0 deletions Marlin/src/HAL/STM32/fastio.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ extern GPIO_TypeDef * FastIOPortMap[];
// ------------------------

void FastIO_init(); // Must be called before using fast io macros
#define FASTIO_INIT() FastIO_init()

// ------------------------
// Defines
Expand Down
6 changes: 3 additions & 3 deletions Marlin/src/HAL/STM32F1/pinsDebug.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,15 @@
#pragma once

/**
* Support routines for STM32GENERIC (Maple)
* Support routines for MAPLE_STM32F1
*/

/**
* Translation of routines & variables used by pinsDebug.h
*/

#ifndef BOARD_NR_GPIO_PINS // Only in STM32GENERIC (Maple)
#error "Expected BOARD_NR_GPIO_PINS not found"
#ifndef BOARD_NR_GPIO_PINS // Only in MAPLE_STM32F1
#error "Expected BOARD_NR_GPIO_PINS not found"
#endif

#include "fastio.h"
Expand Down
4 changes: 4 additions & 0 deletions Marlin/src/MarlinCore.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1131,6 +1131,10 @@ inline void tmc_standby_setup() {
* - Set Marlin to RUNNING State
*/
void setup() {
#ifdef FASTIO_INIT
FASTIO_INIT();
#endif
thinkyhead marked this conversation as resolved.
Show resolved Hide resolved

#ifdef BOARD_PREINIT
BOARD_PREINIT(); // Low-level init (before serial init)
#endif
Expand Down
9 changes: 1 addition & 8 deletions Marlin/src/pins/stm32f1/pins_LONGER3D_LK.h
Original file line number Diff line number Diff line change
Expand Up @@ -99,19 +99,12 @@
// Avoid nozzle heat and fan start before serial init
#define BOARD_OPENDRAIN_MOSFETS

#define BOARD_INIT_OD_PINS() { \
#define BOARD_PREINIT() { \
OUT_WRITE_OD(HEATER_0_PIN, 0); \
OUT_WRITE_OD(HEATER_BED_PIN, 0); \
OUT_WRITE_OD(FAN_PIN, 0); \
}

#ifdef MAPLE_STM32F1
// Only Maple Framework allow that early
#define BOARD_PREINIT BOARD_INIT_OD_PINS
#else
#define BOARD_INIT BOARD_INIT_OD_PINS
#endif

//
// PWM for a servo probe
// Other servo devices are not supported on this board!
Expand Down