Skip to content

Commit

Permalink
New board STM32F407 (#14994)
Browse files Browse the repository at this point in the history
  • Loading branch information
chzj333 authored and thinkyhead committed Aug 20, 2019
1 parent bb4a252 commit 0b47558
Show file tree
Hide file tree
Showing 6 changed files with 358 additions and 11 deletions.
23 changes: 14 additions & 9 deletions Marlin/src/HAL/HAL_STM32/HAL_spi_STM32.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
*/
#if defined(ARDUINO_ARCH_STM32) && !defined(STM32GENERIC)


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

#include <SPI.h>
Expand Down Expand Up @@ -73,16 +72,22 @@ void spiInit(uint8_t spiRate) {
// Use datarates Marlin uses
uint32_t clock;
switch (spiRate) {
case SPI_FULL_SPEED: clock = 20000000; break; // 13.9mhz=20000000 6.75mhz=10000000 3.38mhz=5000000 .833mhz=1000000
case SPI_HALF_SPEED: clock = 5000000; break;
case SPI_QUARTER_SPEED: clock = 2500000; break;
case SPI_EIGHTH_SPEED: clock = 1250000; break;
case SPI_SPEED_5: clock = 625000; break;
case SPI_SPEED_6: clock = 300000; break;
default:
clock = 4000000; // Default from the SPI library
case SPI_FULL_SPEED: clock = 20000000; break; // 13.9mhz=20000000 6.75mhz=10000000 3.38mhz=5000000 .833mhz=1000000
case SPI_HALF_SPEED: clock = 5000000; break;
case SPI_QUARTER_SPEED: clock = 2500000; break;
case SPI_EIGHTH_SPEED: clock = 1250000; break;
case SPI_SPEED_5: clock = 625000; break;
case SPI_SPEED_6: clock = 300000; break;
default:
clock = 4000000; // Default from the SPI library
}
spiConfig = SPISettings(clock, MSBFIRST, SPI_MODE0);
#if defined(MISO_PIN) && defined(SDSS) && defined(MOSI_PIN) && defined(SCK_PIN)
SPI.setMISO(MISO_PIN);
SPI.setSSEL(SDSS);

This comment has been minimized.

Copy link
@ktand

ktand Aug 28, 2019

Contributor

@chzj333 @thinkyhead

This line causes SPI.begin() call to fail and end up in an endless loop in Arduino Core STM32's Error_Handler(), if the SDSS pin is NOT a hardware CS pin, as it's the case with for example the ARMED board.

Why is the section needed at all? All the SPI pins (except SDSS) will be initialized by the Arduino Core STM32 in the default constructor of SPIClass using the pin definitions in the board's variant.h file:

SPIClass::SPIClass() : _CSPinConfig(NO_CONFIG)
{
  _spi.pin_miso = digitalPinToPinName(MISO);
  _spi.pin_mosi = digitalPinToPinName(MOSI);
  _spi.pin_sclk = digitalPinToPinName(SCK);
  _spi.pin_ssel = NC;
}

The SDSS will be controlled by Marlin so it does not need to be controlled by the SPIClass.

void Sd2Card::chipDeselect() {
  extDigitalWrite(chipSelectPin_, HIGH);
  spiSend(0xFF); // Ensure MISO goes high impedance
}

void Sd2Card::chipSelect() {
  spiInit(spiRate_);
  extDigitalWrite(chipSelectPin_, LOW);
}

Who knows, it might even cause problems if it is controlled by both Marlin and the STM32 SPI class.

This comment has been minimized.

Copy link
@thinkyhead

thinkyhead Aug 29, 2019

Member

SPI is one thing we definitely need to sort out and make sensible. It's getting closer with #14832, but STM32 is kind of a moving target these days.

SPI.setMOSI(MOSI_PIN);
SPI.setSCLK(SCK_PIN);
#endif
SPI.begin();
}

Expand Down
1 change: 1 addition & 0 deletions Marlin/src/core/boards.h
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,7 @@
#define BOARD_BLACK_STM32F407ZE 4205 // BLACK_STM32F407ZE
#define BOARD_STEVAL 4206 // STEVAL-3DP001V1 3D PRINTER BOARD
#define BOARD_BIGTREE_SKR_PRO_V1_1 4207 // BigTreeTech SKR Pro v1.1 (STM32F407ZG)
#define BOARD_BIGTREE_BTT002_V1_0 4208 // BigTreeTech BTT002 v1.0 (STM32F407VE)

//
// ARM Cortex M7
Expand Down
2 changes: 2 additions & 0 deletions Marlin/src/pins/pins.h
Original file line number Diff line number Diff line change
Expand Up @@ -502,6 +502,8 @@
#include "stm32/pins_STEVAL.h" // STM32F4 env:STM32F4
#elif MB(BIGTREE_SKR_PRO_V1_1)
#include "stm32/pins_BIGTREE_SKR_PRO_V1.1.h" // STM32F4 env:BIGTREE_SKR_PRO
#elif MB(BIGTREE_BTT002_V1_0)
#include "stm32/pins_BIGTREE_BTT002_V1.0.h" // STM32F4 env:BIGTREE_BTTOO2

//
// ARM Cortex M7
Expand Down
254 changes: 254 additions & 0 deletions Marlin/src/pins/stm32/pins_BIGTREE_BTT002_V1.0.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,254 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
*
* Based on Sprinter and grbl.
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#pragma once

#ifndef TARGET_STM32F4
#error "Oops! Select an STM32F4 board in 'Tools > Board.'"
#elif HOTENDS > 3 || E_STEPPERS > 3
#error "BIGTREE SKR Pro V1.1 supports up to 3 hotends / E-steppers."
#endif

#define BOARD_NAME "BIGTREE Btt002 1.0"

#define SRAM_EEPROM_EMULATION

// Ignore temp readings during development.
//#define BOGUS_TEMPERATURE_GRACE_PERIOD 2000

//
// Servos
//
#define SERVO0_PIN PC3

//
// Limit Switches
//
#define X_MIN_PIN PD3
#define X_MAX_PIN PD3
#define Y_MIN_PIN PD2
#define Y_MAX_PIN PD2
#define Z_MIN_PIN PD1
#define Z_MAX_PIN PD1

//
// Z Probe must be this pins ##
//
#ifndef Z_MIN_PROBE_PIN
#define Z_MIN_PROBE_PIN PD1
#endif

//
// Steppers
//
#define X_STEP_PIN PA9
#define X_DIR_PIN PA10
#define X_ENABLE_PIN PA8
#ifndef X_CS_PIN
#define X_CS_PIN PE2
#endif

#define Y_STEP_PIN PC8
#define Y_DIR_PIN PC9
#define Y_ENABLE_PIN PC7
#ifndef Y_CS_PIN
#define Y_CS_PIN PE3
#endif

#define Z_STEP_PIN PD15
#define Z_DIR_PIN PC6
#define Z_ENABLE_PIN PD14
#ifndef Z_CS_PIN
#define Z_CS_PIN PE4
#endif

#define E0_STEP_PIN PD12
#define E0_DIR_PIN PD13
#define E0_ENABLE_PIN PD11
#ifndef E0_CS_PIN
#define E0_CS_PIN PD7
#endif

/*
//SKR_PRO_V1.1
#define E1_STEP_PIN PD15
#define E1_DIR_PIN PE7
#define E1_ENABLE_PIN PA3
#ifndef E1_CS_PIN
#define E1_CS_PIN PG15
#endif
#define E2_STEP_PIN PD13
#define E2_DIR_PIN PG9
#define E2_ENABLE_PIN PF0
#ifndef E2_CS_PIN
#define E2_CS_PIN PG12
#endif
*/
//
// Software SPI pins for TMC2130 stepper drivers
//
#if ENABLED(TMC_USE_SW_SPI)
#ifndef TMC_SW_MOSI
#define TMC_SW_MOSI PB15
#endif
#ifndef TMC_SW_MISO
#define TMC_SW_MISO PB14
#endif
#ifndef TMC_SW_SCK
#define TMC_SW_SCK PB13
#endif
#endif

#if HAS_TMC220x
/**
* TMC2208/TMC2209 stepper drivers
*
* Hardware serial communication ports.
* If undefined software serial is used according to the pins below
*/
//#define X_HARDWARE_SERIAL Serial1
//#define X2_HARDWARE_SERIAL Serial1
//#define Y_HARDWARE_SERIAL Serial1
//#define Y2_HARDWARE_SERIAL Serial1
//#define Z_HARDWARE_SERIAL Serial1
//#define Z2_HARDWARE_SERIAL Serial1
//#define E0_HARDWARE_SERIAL Serial1
//#define E1_HARDWARE_SERIAL Serial1
//#define E2_HARDWARE_SERIAL Serial1
//#define E3_HARDWARE_SERIAL Serial1
//#define E4_HARDWARE_SERIAL Serial1

//
// Software serial ##
//
#define X_SERIAL_TX_PIN PE2
#define X_SERIAL_RX_PIN PE2

#define Y_SERIAL_TX_PIN PE3
#define Y_SERIAL_RX_PIN PE3

#define Z_SERIAL_TX_PIN PE4
#define Z_SERIAL_RX_PIN PE4

#define E0_SERIAL_TX_PIN PD7
#define E0_SERIAL_RX_PIN PD7

//#define E1_SERIAL_TX_PIN PD1
//#define E1_SERIAL_RX_PIN PD1

//#define E2_SERIAL_TX_PIN PD6
//#define E2_SERIAL_RX_PIN PD6
#endif

//
// Temperature Sensors
//
#define TEMP_0_PIN PA2 // T1 <-> E0
#define TEMP_1_PIN PA0 // T2 <-> E1
//#define TEMP_2_PIN PC2 // T3 <-> E2 SKR_PRO
#define TEMP_BED_PIN PA1 // T0 <-> Bed

//
// Heaters / Fans
//
#define HEATER_0_PIN PE6 // Heater0
//#define HEATER_1_PIN PD14 // Heater1
//#define HEATER_2_PIN PB0 // Heater1
#define HEATER_BED_PIN PE5 // Hotbed
#define FAN_PIN PB9 // Fan0
#define FAN1_PIN PB8 // Fan1
//#define FAN2_PIN PE6 // Fan2

// HAL SPI pins group
#define SCK_PIN PA5 // SPI SCLK
#define MYSSEL PA4 // SPI SSEL
#define MISO_PIN PA6 // SPI MISO
#define MOSI_PIN PA7 // SPI MOSI

//
// Misc. Functions
//
#define SDSS PA4

/**
* -------------------------------------SKR_MK3-----------------------------------------------
* _____ _____ |
* PA3 | · · | GND 5V | · · | GND |
* NRESET | · · | PC4(SD_DET) (LCD_D7) PE13 | · · | PE12 (LCD_D6) |
* (MOSI)PA7 | · · | PB0(BTN_EN2) (LCD_D5) PE11 | · · | PE10 (LCD_D4) |
* (SD_SS)PA4 | · · | PC5(BTN_EN1) (LCD_RS) PE8 | · · | PE9 (LCD_EN) |
* (SCK)PA5 | · · | PA6(MISO) (BTN_ENC) PB1 | · · | PE7 (BEEPER) |
*  ̄ ̄  ̄ ̄ |
* EXP2 EXP1 |
* ---------------------------------------------------------------------------------------------
*/
//
// LCDs and Controllers
//
#if HAS_SPI_LCD
#define BEEPER_PIN PE7
#define BTN_ENC PB1

#if ENABLED(CR10_STOCKDISPLAY)
#define LCD_PINS_RS PE12

#define BTN_EN1 PE9
#define BTN_EN2 PE10

#define LCD_PINS_ENABLE PE13
#define LCD_PINS_D4 PE11

#else

#define LCD_PINS_RS PE8

#define BTN_EN1 PC5
#define BTN_EN2 PB0
#define SD_DETECT_PIN PC4

#define LCD_SDSS PA4

#define LCD_PINS_ENABLE PE9
#define LCD_PINS_D4 PE10

#if ENABLED(ULTIPANEL)
#define LCD_PINS_D5 PE11
#define LCD_PINS_D6 PE12
#define LCD_PINS_D7 PE13
#endif

#endif

// Alter timing for graphical display
#if HAS_GRAPHICAL_LCD
#ifndef ST7920_DELAY_1
#define ST7920_DELAY_1 DELAY_NS(96)
#endif
#ifndef ST7920_DELAY_2
#define ST7920_DELAY_2 DELAY_NS(48)
#endif
#ifndef ST7920_DELAY_3
#define ST7920_DELAY_3 DELAY_NS(600)
#endif
#endif

#endif // HAS_SPI_LCD
65 changes: 65 additions & 0 deletions buildroot/share/PlatformIO/boards/BigTree_Btt002.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
{
"build": {
"core": "stm32",
"cpu": "cortex-m4",
"extra_flags": "-DSTM32F407xx",
"f_cpu": "168000000L",
"hwids": [
[
"0x1EAF",
"0x0003"
],
[
"0x0483",
"0x3748"
]
],
"ldscript": "stm32f407xg.ld",
"mcu": "stm32f407vet6",
"variant": "BIGTREE_GENERIC_STM32F407_5X"
},
"debug": {
"jlink_device": "STM32F407VE",
"openocd_target": "stm32f4x",
"svd_path": "STM32F40x.svd",
"tools": {
"stlink": {
"server": {
"arguments": [
"-f",
"scripts/interface/stlink.cfg",
"-c",
"transport select hla_swd",
"-f",
"scripts/target/stm32f4x.cfg",
"-c",
"reset_config none"
],
"executable": "bin/openocd",
"package": "tool-openocd"
}
}
}
},
"frameworks": [
"arduino",
"stm32cube"
],
"name": "STM32F407VE (64k RAM. 512k Flash)",
"upload": {
"disable_flushing": false,
"maximum_ram_size": 65536,
"maximum_size": 524288,
"protocol": "stlink",
"protocols": [
"stlink",
"dfu",
"jlink"
],
"require_upload_port": true,
"use_1200bps_touch": false,
"wait_for_upload_port": false
},
"url": "http://www.st.com/en/microcontrollers/stm32f407zg.html",
"vendor": "Generic"
}
Loading

0 comments on commit 0b47558

Please sign in to comment.