Skip to content

Commit

Permalink
Fix STM32 + SoftwareSerial compile (MarlinFirmware#17831)
Browse files Browse the repository at this point in the history
  • Loading branch information
sjasonsmith authored and HairingX committed Jun 16, 2021
1 parent edce856 commit ce674a3
Show file tree
Hide file tree
Showing 6 changed files with 23 additions and 15 deletions.
10 changes: 1 addition & 9 deletions Marlin/src/HAL/STM32/HAL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,6 @@
#include "../../inc/MarlinConfig.h"
#include "../shared/Delay.h"

#if HAS_TMC_SW_SERIAL
#include "SoftwareSerial.h"
#endif

#if ENABLED(SRAM_EEPROM_EMULATION)
#if STM32F7xx
#include <stm32f7xx_ll_pwr.h>
Expand Down Expand Up @@ -82,11 +78,7 @@ void HAL_init() {
while (!LL_PWR_IsActiveFlag_BRR()); // Wait until backup regulator is initialized
#endif

#if HAS_TMC_SW_SERIAL
SoftwareSerial::setInterruptPriority(SWSERIAL_TIMER_IRQ_PRIO, 0);
#endif

TERN_(HAS_TMC_SW_SERIAL, SoftwareSerial::setInterruptPriority(SWSERIAL_TIMER_IRQ_PRIO, 0));
SetSoftwareSerialTimerInterruptPriority();
}

void HAL_clear_reset_source() { __HAL_RCC_CLEAR_RESET_FLAGS(); }
Expand Down
14 changes: 11 additions & 3 deletions Marlin/src/HAL/STM32/timers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,16 +31,20 @@

#define NUM_HARDWARE_TIMERS 2

#ifndef SWSERIAL_TIMER_IRQ_PRIO
#define SWSERIAL_TIMER_IRQ_PRIO 1
#endif
#ifndef STEP_TIMER_IRQ_PRIO
#define STEP_TIMER_IRQ_PRIO 2
#endif
#ifndef TEMP_TIMER_IRQ_PRIO
#define TEMP_TIMER_IRQ_PRIO 14 // 14 = after hardware ISRs
#endif

#if HAS_TMC_SW_SERIAL
#include <SoftwareSerial.h>
#ifndef SWSERIAL_TIMER_IRQ_PRIO
#define SWSERIAL_TIMER_IRQ_PRIO 1
#endif
#endif

#ifdef STM32F0xx
#define HAL_TIMER_RATE (F_CPU) // Frequency of timer peripherals
#define MCU_STEP_TIMER 16
Expand Down Expand Up @@ -175,4 +179,8 @@ TIM_TypeDef * HAL_timer_device(const uint8_t timer_num) {
return nullptr;
}

void SetSoftwareSerialTimerInterruptPriority() {
TERN_(HAS_TMC_SW_SERIAL, SoftwareSerial::setInterruptPriority(SWSERIAL_TIMER_IRQ_PRIO, 0));
}

#endif // ARDUINO_ARCH_STM32 && !STM32GENERIC
3 changes: 3 additions & 0 deletions Marlin/src/HAL/STM32/timers.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,9 @@ void HAL_timer_enable_interrupt(const uint8_t timer_num);
void HAL_timer_disable_interrupt(const uint8_t timer_num);
bool HAL_timer_interrupt_enabled(const uint8_t timer_num);

// Exposed here to allow all timer priority information to reside in timers.cpp
void SetSoftwareSerialTimerInterruptPriority();

//TIM_TypeDef* HAL_timer_device(const uint8_t timer_num); no need to be public for now. not public = not used externally

// FORCE_INLINE because these are used in performance-critical situations
Expand Down
4 changes: 3 additions & 1 deletion buildroot/share/tests/BIGTREE_BTT002-tests
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@ set -e
restore_configs
opt_set MOTHERBOARD BOARD_BTT_BTT002_V1_0
opt_set SERIAL_PORT 1
exec_test $1 $2 "BigTreeTech BTT002 Default Configuration"
opt_set X_DRIVER_TYPE TMC2209
opt_set Y_DRIVER_TYPE TMC2130
exec_test $1 $2 "BigTreeTech BTT002 Default Configuration plus TMC steppers"

# clean up
restore_configs
4 changes: 3 additions & 1 deletion buildroot/share/tests/BIGTREE_SKR_PRO-tests
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@ opt_set TEMP_SENSOR_2 1
opt_set E0_AUTO_FAN_PIN PC10
opt_set E1_AUTO_FAN_PIN PC11
opt_set E2_AUTO_FAN_PIN PC12
exec_test $1 $2 "BigTreeTech SKR Pro 3 Extruders with Auto-Fan"
opt_set X_DRIVER_TYPE TMC2209
opt_set Y_DRIVER_TYPE TMC2130
exec_test $1 $2 "BigTreeTech SKR Pro 3 Extruders with Auto-Fan and mixed TMC drivers"

# clean up
restore_configs
3 changes: 2 additions & 1 deletion platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -769,9 +769,10 @@ build_flags = ${common.build_flags}
-DHAVE_HWSERIAL3
-DPIN_SERIAL2_RX=PD_6
-DPIN_SERIAL2_TX=PD_5
-IMarlin/src/HAL/STM32
build_unflags = -std=gnu++11
extra_scripts = pre:buildroot/share/PlatformIO/scripts/generic_create_variant.py
lib_ignore = Adafruit NeoPixel, SailfishLCD, SlowSoftI2CMaster
lib_ignore = Adafruit NeoPixel, SailfishLCD, SlowSoftI2CMaster, SoftwareSerial
src_filter = ${common.default_src_filter} +<src/HAL/STM32>

#
Expand Down

0 comments on commit ce674a3

Please sign in to comment.