Browse Source

Fix SKR E3 board BLTOUCH + SPEAKER timer conflict (#15781)

pull/1/head
Miroslav Šustek 5 years ago
committed by Scott Lahteine
parent
commit
9201197878
  1. 2
      Marlin/src/HAL/HAL_STM32F1/SPI.cpp
  2. 2
      Marlin/src/HAL/HAL_STM32F1/timers.cpp
  3. 20
      Marlin/src/HAL/HAL_STM32F1/timers.h

2
Marlin/src/HAL/HAL_STM32F1/SPI.cpp

@ -53,7 +53,7 @@ static const spi_pins* dev_to_spi_pins(spi_dev *dev);
static void configure_gpios(spi_dev *dev, bool as_master); static void configure_gpios(spi_dev *dev, bool as_master);
static spi_baud_rate determine_baud_rate(spi_dev *dev, uint32_t freq); static spi_baud_rate determine_baud_rate(spi_dev *dev, uint32_t freq);
#if (BOARD_NR_SPI >= 3) && !defined(STM32_HIGH_DENSITY) #if BOARD_NR_SPI >= 3 && !defined(STM32_HIGH_DENSITY)
#error "The SPI library is misconfigured: 3 SPI ports only available on high density STM32 devices" #error "The SPI library is misconfigured: 3 SPI ports only available on high density STM32 devices"
#endif #endif

2
Marlin/src/HAL/HAL_STM32F1/timers.cpp

@ -57,7 +57,7 @@ void HAL_timer_start(const uint8_t timer_num, const uint32_t frequency) {
case 3: irq_num = NVIC_TIMER3; break; case 3: irq_num = NVIC_TIMER3; break;
case 4: irq_num = NVIC_TIMER4; break; case 4: irq_num = NVIC_TIMER4; break;
case 5: irq_num = NVIC_TIMER5; break; case 5: irq_num = NVIC_TIMER5; break;
#if ENABLED(STM32_HIGH_DENSITY) #ifdef STM32_HIGH_DENSITY
// 6 & 7 are basic timers, avoid them // 6 & 7 are basic timers, avoid them
case 8: irq_num = NVIC_TIMER8_CC; break; case 8: irq_num = NVIC_TIMER8_CC; break;
#endif #endif

20
Marlin/src/HAL/HAL_STM32F1/timers.h

@ -47,6 +47,20 @@ typedef uint16_t hal_timer_t;
#define STEP_TIMER_CHAN 1 // Channel of the timer to use for compare and interrupts #define STEP_TIMER_CHAN 1 // Channel of the timer to use for compare and interrupts
#define TEMP_TIMER_CHAN 1 // Channel of the timer to use for compare and interrupts #define TEMP_TIMER_CHAN 1 // Channel of the timer to use for compare and interrupts
/**
* Note: Timers may be used by platforms and libraries
*
* FAN PWMs:
* With FAN_SOFT_PWM disabled the Temperature class uses
* FANx_PIN timers to generate FAN PWM signals.
*
* Speaker:
* When SPEAKER is enabled, one timer is allocated by maple/tone.cpp.
* - If BEEPER_PIN has a timer channel (and USE_PIN_TIMER is
* defined in tone.cpp) it uses the pin's own timer.
* - Otherwise it uses Timer 8 on boards with STM32_HIGH_DENSITY
* or Timer 4 on other boards.
*/
#if defined(MCU_STM32F103CB) || defined(MCU_STM32F103C8) #if defined(MCU_STM32F103CB) || defined(MCU_STM32F103C8)
#define STEP_TIMER_NUM 4 // For C8/CB boards, use timer 4 #define STEP_TIMER_NUM 4 // For C8/CB boards, use timer 4
#else #else
@ -58,7 +72,11 @@ typedef uint16_t hal_timer_t;
#if MB(BIGTREE_SKR_MINI_E3, BIGTREE_SKR_E3_DIP, BTT_SKR_MINI_E3_V1_2, MKS_ROBIN_LITE) #if MB(BIGTREE_SKR_MINI_E3, BIGTREE_SKR_E3_DIP, BTT_SKR_MINI_E3_V1_2, MKS_ROBIN_LITE)
// SKR Mini E3 boards use PA8 as FAN_PIN, so TIMER 1 is used for Fan PWM. // SKR Mini E3 boards use PA8 as FAN_PIN, so TIMER 1 is used for Fan PWM.
#define SERVO0_TIMER_NUM 8 #ifdef STM32_HIGH_DENSITY
#define SERVO0_TIMER_NUM 8 // tone.cpp uses Timer 4
#else
#define SERVO0_TIMER_NUM 3 // tone.cpp uses Timer 8
#endif
#else #else
#define SERVO0_TIMER_NUM 1 // SERVO0 or BLTOUCH #define SERVO0_TIMER_NUM 1 // SERVO0 or BLTOUCH
#endif #endif

Loading…
Cancel
Save