Skip to content

Add STM32F446VE controller board #522

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

Closed
wants to merge 1 commit into from
Closed
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
48 changes: 48 additions & 0 deletions boards.txt
Original file line number Diff line number Diff line change
Expand Up @@ -758,6 +758,54 @@ GenF4.menu.upload_method.bmpMethod=BMP (Black Magic Probe)
GenF4.menu.upload_method.bmpMethod.upload.protocol=gdb_bmp
GenF4.menu.upload_method.bmpMethod.upload.tool=bmp_upload

###############################
Vake403d.name=VAkE 403d
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is Vake403d the manufacturer name or generic branding name ?
or is the board name ?
I guess it should be best to add it to 3dprinter entry

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just saw in your OP the board name is VAkE v1.0
I've update my branch with this name. Let me know if it's ok.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The boads name is VAkE but will first be tested in a 3D printer called Vake403d.
The update of the branch is fine, thx.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So, I guess the best is to use the PCB name (board name).
Vake403d is one use case of this board? right?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is how I've update it:
https://github.com/fpistm/Arduino_Core_STM32/blob/50713653535c1c8dbcd38fd9ca42253fc0186f5f/boards.txt#L935-L944

# VAkE v1.0
3dprinter.menu.pnum.VAKE_F446VE=VAkE v1.0
3dprinter.menu.pnum.VAKE_F446VE.upload.maximum_size=524288
3dprinter.menu.pnum.VAKE_F446VE.upload.maximum_data_size=131072
3dprinter.menu.pnum.VAKE_F446VE.build.mcu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
3dprinter.menu.pnum.VAKE_F446VE.build.board=VAKE403
3dprinter.menu.pnum.VAKE_F446VE.build.series=STM32F4xx
3dprinter.menu.pnum.VAKE_F446VE.build.product_line=STM32F446xx
3dprinter.menu.pnum.VAKE_F446VE.build.variant=VAKE_F446VE
3dprinter.menu.pnum.VAKE_F446VE.build.cmsis_lib_gcc=arm_cortexM4l_math


Vake403d.build.vid=0x1EAF
Vake403d.build.pid=0x0004
Vake403d.vid.0=0x1EAF
Vake403d.pid.0=0x0004

Vake403d.build.core=arduino
Vake403d.build.board=Vake403
Vake403d.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}

# Vake F446VE
# Support: Serial1 (USART1 on PA10, PA9)
# Default SPI: SPI
Vake403d.menu.pnum.VAKE_F446VE=Vake F446VE
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is It really the board name?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should I change "Vake F446VE" to "VAkE" ? VAkE is infact the name of the PCB, VAke403d the name of the test printer for the PCB and since it's based on the F446...it started it's live a "Vake F446VE"

Vake403d.menu.pnum.VAKE_F446VE.upload.maximum_size=524288
Vake403d.menu.pnum.VAKE_F446VE.upload.maximum_data_size=131072
Vake403d.menu.pnum.VAKE_F446VE.build.mcu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
Vake403d.menu.pnum.VAKE_F446VE.build.board=VAKE403
Vake403d.menu.pnum.VAKE_F446VE.build.series=STM32F4xx
Vake403d.menu.pnum.VAKE_F446VE.build.product_line=STM32F446xx
Vake403d.menu.pnum.VAKE_F446VE.build.variant=VAKE_F446VE
Vake403d.menu.pnum.VAKE_F446VE.build.f_cpu=180000000L
Vake403d.menu.pnum.VAKE_F446VE.build.cmsis_lib_gcc=arm_cortexM4l_math

# Upload menu
Vake403d.menu.upload_method.STLink=STLink
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since #514 STM32CubeProgrammer replace those upload method.

Vake403d.menu.upload_method.STLink.upload.protocol=STLink
Vake403d.menu.upload_method.STLink.upload.tool=stlink_upload

Vake403d.menu.upload_method.serialMethod=Serial UART1 [TX/PA9, RX/PA10, BOOT0=1, BOOT1=0]
Vake403d.menu.upload_method.serialMethod.upload.protocol=maple_serial
Vake403d.menu.upload_method.serialMethod.upload.tool=serial_upload
Vake403d.menu.upload_method.serialMethod.build.extra_flags_serial_auto=-DMENU_SERIAL_AUTO=SerialUART1

Vake403d.menu.usb.SerialUSB=Serial [Virtual COM port, PA11/PA12 pins]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems you worked before on STM32GENERIC core 😉
Theses definitions are not for this core.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've removed the definitions. Note : next version will have the capability to use serial to upload new binaries without the need for an ST link programmer.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is already the case thanks the STM32CubeProgrammer use STM32 built-in bootloader.

Vake403d.menu.usb.SerialUSB.build.extra_flags_usb=-DMENU_USB_SERIAL
Vake403d.menu.usb.SerialMSC=Mass storage [testing, see documentation]
Vake403d.menu.usb.SerialMSC.build.extra_flags_usb=-DMENU_USB_MASS_STORAGE
Vake403d.menu.usb.Disabled=Disabled, no USB

Vake403d.menu.serial.Automatic=Automatically selected based on upload method
Vake403d.menu.serial.SerialUSB=SerialUSB
Vake403d.menu.serial.SerialUSB.build.extra_flags_serial=-DMENU_SERIAL=SerialUSB
Vake403d.menu.serial.SerialUART1=SerialUART1
Vake403d.menu.serial.SerialUART1.build.extra_flags_serial=-DMENU_SERIAL=SerialUART1

###############################
# Sparky Flight Controllers

Expand Down
469 changes: 469 additions & 0 deletions variants/VAKE_F446VE/PeripheralPins.c

Large diffs are not rendered by default.

50 changes: 50 additions & 0 deletions variants/VAKE_F446VE/PinNamesVar.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/* SYS_WKUP */
#ifdef PWR_WAKEUP_PIN1
SYS_WKUP1 = PA_0, /* SYS_WKUP0 */
#endif
#ifdef PWR_WAKEUP_PIN2
SYS_WKUP2 = PC_13, /* SYS_WKUP1 */
#endif
#ifdef PWR_WAKEUP_PIN3
SYS_WKUP3 = NC,
#endif
#ifdef PWR_WAKEUP_PIN4
SYS_WKUP4 = NC,
#endif
#ifdef PWR_WAKEUP_PIN5
SYS_WKUP5 = NC,
#endif
#ifdef PWR_WAKEUP_PIN6
SYS_WKUP6 = NC,
#endif
#ifdef PWR_WAKEUP_PIN7
SYS_WKUP7 = NC,
#endif
#ifdef PWR_WAKEUP_PIN8
SYS_WKUP8 = NC,
#endif
/* USB */
#ifdef USBCON
// USB_OTG_FS_SOF = PA_8,
// USB_OTG_FS_VBUS = PA_9,
// USB_OTG_FS_ID = PA_10,
USB_OTG_FS_DM = PA_11,
USB_OTG_FS_DP = PA_12,
// USB_OTG_HS_ULPI_D0 = PA_3,
// USB_OTG_HS_SOF = PA_4,
// USB_OTG_HS_ULPI_CK = PA_5,
// USB_OTG_HS_ULPI_D1 = PB_0,
// USB_OTG_HS_ULPI_D2 = PB_1,
// USB_OTG_HS_ULPI_D4 = PB_2,
// USB_OTG_HS_ULPI_D7 = PB_5,
// USB_OTG_HS_ULPI_D3 = PB_10,
// USB_OTG_HS_ID = PB_12,
// USB_OTG_HS_ULPI_D5 = PB_12,
// USB_OTG_HS_ULPI_D6 = PB_13,
// USB_OTG_HS_VBUS = PB_13,
// USB_OTG_HS_DM = PB_14,
// USB_OTG_HS_DP = PB_15,
// USB_OTG_HS_ULPI_STP = PC_0,
// USB_OTG_HS_ULPI_DIR = PC_2,
// USB_OTG_HS_ULPI_NXT = PC_3,
#endif
169 changes: 169 additions & 0 deletions variants/VAKE_F446VE/ldscript.ld
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
/*
*****************************************************************************
**

** File : LinkerScript.ld
**
** Abstract : Linker script for STM32F446VETx Device with
** 512KByte FLASH, 128KByte RAM
**
** Set heap size, stack size and stack location according
** to application requirements.
**
** Set memory bank area and size if external memory is used.
**
** Target : STMicroelectronics STM32
**
**
** Distribution: The file is distributed as is, without any warranty
** of any kind.
**
** (c)Copyright Ac6.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This licensing is not correct.
See e7af82b

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updated

** You may use this file as-is or modify it according to the needs of your
** project. Distribution of this file (unmodified or modified) is not
** permitted. Ac6 permit registered System Workbench for MCU users the
** rights to distribute the assembled, compiled & linked contents of this
** file as part of an application binary file, provided that it is built
** using the System Workbench for MCU toolchain.
**
*****************************************************************************
*/

/* Entry Point */
ENTRY(Reset_Handler)

/* Highest address of the user mode stack */
_estack = 0x20020000; /* end of RAM */
/* Generate a link error if heap and stack don't fit into RAM */
_Min_Heap_Size = 0x200; /* required amount of heap */
_Min_Stack_Size = 0x400; /* required amount of stack */

/* Specify the memory areas */
MEMORY
{
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 128K
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 512K
}

/* Define output sections */
SECTIONS
{
/* The startup code goes first into FLASH */
.isr_vector :
{
. = ALIGN(4);
KEEP(*(.isr_vector)) /* Startup code */
. = ALIGN(4);
} >FLASH

/* The program code and other data goes into FLASH */
.text :
{
. = ALIGN(4);
*(.text) /* .text sections (code) */
*(.text*) /* .text* sections (code) */
*(.glue_7) /* glue arm to thumb code */
*(.glue_7t) /* glue thumb to arm code */
*(.eh_frame)

KEEP (*(.init))
KEEP (*(.fini))

. = ALIGN(4);
_etext = .; /* define a global symbols at end of code */
} >FLASH

/* Constant data goes into FLASH */
.rodata :
{
. = ALIGN(4);
*(.rodata) /* .rodata sections (constants, strings, etc.) */
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
. = ALIGN(4);
} >FLASH

.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH
.ARM : {
__exidx_start = .;
*(.ARM.exidx*)
__exidx_end = .;
} >FLASH

.preinit_array :
{
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP (*(.preinit_array*))
PROVIDE_HIDDEN (__preinit_array_end = .);
} >FLASH
.init_array :
{
PROVIDE_HIDDEN (__init_array_start = .);
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array*))
PROVIDE_HIDDEN (__init_array_end = .);
} >FLASH
.fini_array :
{
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP (*(SORT(.fini_array.*)))
KEEP (*(.fini_array*))
PROVIDE_HIDDEN (__fini_array_end = .);
} >FLASH

/* used by the startup to initialize data */
_sidata = LOADADDR(.data);

/* Initialized data sections goes into RAM, load LMA copy after code */
.data :
{
. = ALIGN(4);
_sdata = .; /* create a global symbol at data start */
*(.data) /* .data sections */
*(.data*) /* .data* sections */

. = ALIGN(4);
_edata = .; /* define a global symbol at data end */
} >RAM AT> FLASH


/* Uninitialized data section */
. = ALIGN(4);
.bss :
{
/* This is used by the startup in order to initialize the .bss secion */
_sbss = .; /* define a global symbol at bss start */
__bss_start__ = _sbss;
*(.bss)
*(.bss*)
*(COMMON)

. = ALIGN(4);
_ebss = .; /* define a global symbol at bss end */
__bss_end__ = _ebss;
} >RAM

/* User_heap_stack section, used to check that there is enough RAM left */
._user_heap_stack :
{
. = ALIGN(8);
PROVIDE ( end = . );
PROVIDE ( _end = . );
. = . + _Min_Heap_Size;
. = . + _Min_Stack_Size;
. = ALIGN(8);
} >RAM



/* Remove information from the standard libraries */
/DISCARD/ :
{
libc.a ( * )
libm.a ( * )
libgcc.a ( * )
}

.ARM.attributes 0 : { *(.ARM.attributes) }
}


Loading