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

Add NUCLEO-F767ZI development board #19373

Merged
merged 6 commits into from
Oct 13, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Marlin/src/HAL/shared/backtrace/unwmemaccess.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@
#define START_FLASH_ADDR 0x08000000
#define END_FLASH_ADDR 0x08100000

#elif MB(REMRAM_V1)
#elif MB(REMRAM_V1, NUCLEO_F767ZI)

// For STM32F765VI in RemRam v1
// SRAM (0x20000000 - 0x20080000) (512kb)
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 @@ -363,6 +363,7 @@
#define BOARD_REMRAM_V1 5001 // RemRam v1
#define BOARD_TEENSY41 5002 // Teensy 4.1
#define BOARD_T41U5XBB 5003 // T41U5XBB Teensy 4.1 breakout board
#define BOARD_NUCLEO_F767ZI 5004 // ST NUCLEO-F767ZI Dev Board

//
// Espressif ESP32 WiFi
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 @@ -634,6 +634,8 @@
#include "stm32f7/pins_THE_BORG.h" // STM32F7 env:STM32F7
#elif MB(REMRAM_V1)
#include "stm32f7/pins_REMRAM_V1.h" // STM32F7 env:STM32F7
#elif MB(NUCLEO_F767ZI)
#include "stm32f7/pins_NUCLEO_F767ZI.h" // STM32F7 env:NUCLEO_F767ZI
#elif MB(TEENSY41)
#include "teensy4/pins_TEENSY41.h" // Teensy-4.x env:teensy41
#elif MB(T41U5XBB)
Expand Down
201 changes: 201 additions & 0 deletions Marlin/src/pins/stm32f7/pins_NUCLEO_F767ZI.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
/**
* Marlin 3D Printer Firmware
* Copyright (c) 2020 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 <https://www.gnu.org/licenses/>.
*
*/
#pragma once

#ifndef STM32F767xx
#error "Oops! Select an STM32F767 environment"
#endif

#define BOARD_INFO_NAME "NUCLEO-F767ZI"
#define DEFAULT_MACHINE_NAME "Prototype Board"

#if NO_EEPROM_SELECTED
#define FLASH_EEPROM_EMULATION // Use Flash-based EEPROM emulation
#endif

#if ENABLED(FLASH_EEPROM_EMULATION)
// Decrease delays and flash wear by spreading writes across the
// 128 kB sector allocated for EEPROM emulation.
// Not yet supported on F7 hardware
// #define FLASH_EEPROM_LEVELING
#endif

/**
* Timer assignments
*
* TIM1 -
* TIM2 - Hardware PWM (Fan/Heater Pins)
* TIM3 - Hardware PWM (Servo Pins)
* TIM4 - STEP_TIMER (Marlin)
* TIM5 -
* TIM6 - TIMER_TONE (variant.h)
* TIM7 - TIMER_SERVO (variant.h)
* TIM9 - TIMER_SERIAL (platformio.ini)
* TIM10 - For some reason trips Watchdog when used for SW Serial
* TIM11 -
* TIM12 -
* TIM13 -
* TIM14 - TEMP_TIMER (Marlin)
*
*/
#define STEP_TIMER 4
#define TEMP_TIMER 14


/**
* These pin assignments are arbitrary and intending for testing purposes.
* Assignments may not be ideal, and not every assignment has been tested.
* Proceed at your own risk.
* _CN7_
* (X_STEP) PC6 | · · | PB8 (X_EN)
* (X_DIR) PB15 | · · | PB9 (X_CS)
* (LCD_D4) PB13 | · · | AVDD
* _CN8_ PB12 | · · | GND
* NC | · · | PC8 (HEATER_0) PA15 | · · | PA5 (SCLK)
* IOREF | · · | PC9 (BEEPER) PC7 | · · | PA6 (MISO)
* RESET | · · | PC10 (SERVO1_PIN) PB5 | · · | PA7 (MOSI)
* +3.3V | · · | PC11 (HEATER_BED) PB3 | · · | PD14 (SD_DETECT)
* +5V | · · | PC12 (SDSS) PA4 | · · | PD15 (LCD_ENABLE)
* GND | · · | PD2 (SERVO0_PIN) PB4 | · · | PF12 (LCD_RS)
* GND | · · | PG2  ̄ ̄ ̄
* VIN | · · | PG3
_*  ̄ ̄ ̄ _CN10
* AVDD | · · | PF13 (BTN_EN1)
* _CN9_ AGND | · · | PE9 (BTN_EN2)
* (TEMP_0) PA3 | · · | PD7 GND | · · | PE11 (BTN_ENC)
* (TEMP_BED) PC0 | · · | PD6 PB1 | · · | PF14
* PC3 | · · | PD5 PC2 | · · | PE13
* PF3 | · · | PD4 PF4 | · · | PF15
* PF5 | · · | PD3 (E_STEP) PB6 | · · | PG14 (E_EN)
* PF10 | · · | GND (E_DIR) PB2 | · · | PG9 (E_CS)
* NC | · · | PE2 GND | · · | PE8
* PA7 | · · | PE4 PD13 | · · | PE7
* PF2 | · · | PE5 PD12 | · · | GND
* (Y_STEP) PF1 | · · | PE6 (Y_EN) (Z_STEP) PD11 | · · | PE10 (Z_EN)
* (Y_DIR) PF0 | · · | PE3 (Y_CS) (Z_DIR) PE2 | · · | PE12 (Z_CS)
* GND | · · | PF8 GND | · · | PE14
* (Z_MAX) PD0 | · · | PF7 (X_MIN) PA0 | · · | PE15
* (Z_MIN) PD1 | · · | PF9 (X_MAX) PB0 | · · | PB10 (FAN)
* (Y_MAX) PG0 | · · | PG1 (Y_MIN) PE0 | · · | PB11 (FAN1)
*  ̄ ̄ ̄  ̄ ̄ ̄ ̄
*/

#define X_MIN_PIN PF7
#define X_MAX_PIN PF9
#define Y_MIN_PIN PG1
#define Y_MAX_PIN PG0
#define Z_MIN_PIN PD1
#define Z_MAX_PIN PD0

//
// Steppers
//
#define X_STEP_PIN PC6
#define X_DIR_PIN PB15
#define X_ENABLE_PIN PB8
#define X_CS_PIN PB9

#define Y_STEP_PIN PF1
#define Y_DIR_PIN PF0
#define Y_ENABLE_PIN PE6
#define Y_CS_PIN PE3

#define Z_STEP_PIN PD11
#define Z_DIR_PIN PE2
#define Z_ENABLE_PIN PE10
#define Z_CS_PIN PE12

#define E0_STEP_PIN PB6
#define E0_DIR_PIN PB2
#define E0_ENABLE_PIN PG14
#define E0_CS_PIN PG9

#if HAS_TMC_UART
#define X_SERIAL_TX_PIN PB9
#define X_SERIAL_RX_PIN PB9

#define Y_SERIAL_TX_PIN PE3
#define Y_SERIAL_RX_PIN PE3

#define Z_SERIAL_TX_PIN PE12
#define Z_SERIAL_RX_PIN PE12

#define E_SERIAL_TX_PIN PG9
#define E_SERIAL_RX_PIN PG9
#endif

//
// Temperature Sensors
//
#define TEMP_0_PIN PA3
#define TEMP_BED_PIN PC0

//
// Heaters / Fans
//
#define HEATER_0_PIN PA15 // PWM Capable, TIM2_CH1
#define HEATER_BED_PIN PB3 // PWM Capable, TIM2_CH2

#ifndef FAN_PIN
#define FAN_PIN PB10 // PWM Capable, TIM2_CH3
#endif
#define FAN1_PIN PB11 // PWM Capable, TIM2_CH4

#ifndef E0_AUTO_FAN_PIN
#define E0_AUTO_FAN_PIN FAN1_PIN
#endif

//
// Servos
//
#define SERVO0_PIN PB4 // PWM Capable, TIM3_CH1
#define SERVO1_PIN PB5 // PWM Capable, TIM3_CH2

// SPI for external SD Card (Not entirely sure this will work)
#define SCK_PIN PA5
#define MISO_PIN PA6
#define MOSI_PIN PA7
#define SS_PIN PA4
#define SDSS PA4

#define LED_PIN LED_BLUE

//
// LCD / Controller
//
#if ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER)
#define BEEPER_PIN PC7 // LCD_BEEPER
#define BTN_ENC PE11 // BTN_ENC
#define SD_DETECT_PIN PD14
#define LCD_PINS_RS PF12 // LCD_RS
#define LCD_PINS_ENABLE PD15 // LCD_EN
#define LCD_PINS_D4 PB13 // LCD_D4
// #define LCD_PINS_D5
// #define LCD_PINS_D6
// #define LCD_PINS_D7
#define BTN_EN1 PF13 // BTN_EN1
#define BTN_EN2 PE9 // BTN_EN2

#define BOARD_ST7920_DELAY_1 DELAY_NS(125)
#define BOARD_ST7920_DELAY_2 DELAY_NS(63)
#define BOARD_ST7920_DELAY_3 DELAY_NS(780)
#endif
11 changes: 11 additions & 0 deletions platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -853,6 +853,17 @@ board = remram_v1
build_flags = ${common.build_flags} -DUSE_STM32GENERIC -DSTM32GENERIC -DSTM32F7 -DMENU_USB_SERIAL -DMENU_SERIAL=SerialUSB -DHAL_IWDG_MODULE_ENABLED
src_filter = ${common.default_src_filter} +<src/HAL/STM32_F4_F7> -<src/HAL/STM32_F4_F7/STM32F4>

#
# ST NUCLEO-F767ZI Development Board
# This environment is for testing purposes prior to control boards
# being readily available based on STM32F7 MCUs
#
[env:NUCLEO_F767ZI]
platform = ${common_stm32.platform}
extends = common_stm32
board = nucleo_f767zi
build_flags = ${common_stm32.build_flags} -DTIMER_SERIAL=TIM9

#
# ARMED (STM32)
#
Expand Down