mirror of
				https://github.com/valentineus/kp3s-lgvl.git
				synced 2025-11-04 01:39:44 +03:00 
			
		
		
		
	Initial commit
This commit is contained in:
		
							
								
								
									
										1
									
								
								buildroot/bin/.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								buildroot/bin/.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
* text=auto eol=lf
 | 
			
		||||
							
								
								
									
										30
									
								
								buildroot/bin/format_code
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								buildroot/bin/format_code
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
#
 | 
			
		||||
# format_code [dir/file...]
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
HERE=`dirname $0`
 | 
			
		||||
 | 
			
		||||
while [[ $# -gt 0 ]]; do
 | 
			
		||||
 | 
			
		||||
  val="$1"
 | 
			
		||||
 | 
			
		||||
  if [ -d "$val" ]; then
 | 
			
		||||
 | 
			
		||||
    find $val -name *.cpp -exec "$HERE/uncrust" '{}' \;
 | 
			
		||||
 | 
			
		||||
  elif [ -d "./Marlin/src/$val" ]; then
 | 
			
		||||
 | 
			
		||||
    find "./Marlin/src/$val" -name *.cpp -exec "$HERE/uncrust" '{}' \;
 | 
			
		||||
 | 
			
		||||
  elif [ -f "./Marlin/src/$val" ]; then
 | 
			
		||||
 | 
			
		||||
    uncrust "./Marlin/src/$val"
 | 
			
		||||
 | 
			
		||||
  elif [ -f "$val" ]; then
 | 
			
		||||
 | 
			
		||||
    uncrust "$val"
 | 
			
		||||
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
done
 | 
			
		||||
							
								
								
									
										144
									
								
								buildroot/bin/generate_version
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										144
									
								
								buildroot/bin/generate_version
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,144 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
#
 | 
			
		||||
# generate_version
 | 
			
		||||
#
 | 
			
		||||
# Make a Version.h file to accompany CUSTOM_VERSION_FILE
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
DIR=${1:-"Marlin"}
 | 
			
		||||
 | 
			
		||||
# MRCC3=$( git merge-base HEAD upstream/bugfix-2.0.x 2>/dev/null )
 | 
			
		||||
# MRCC2=$( git merge-base HEAD upstream/bugfix-1.1.x 2>/dev/null )
 | 
			
		||||
# MRCC1=$( git merge-base HEAD upstream/1.1.x 2>/dev/null )
 | 
			
		||||
 | 
			
		||||
# BASE='?'
 | 
			
		||||
# if [[ -n $MRCC3 && $MRCC3 != $MRCC2 ]]; then
 | 
			
		||||
#   BASE=bugfix-2.0.x
 | 
			
		||||
# elif [[ -n $MRCC2 ]]; then
 | 
			
		||||
#   BASE=bugfix-1.1.x
 | 
			
		||||
# elif [[ -n $MRCC1 ]]; then
 | 
			
		||||
#   BASE=1.1.x
 | 
			
		||||
# fi
 | 
			
		||||
 | 
			
		||||
BUILDATE=$(date '+%s')
 | 
			
		||||
DISTDATE=$(date '+%Y-%m-%d %H:%M')
 | 
			
		||||
 | 
			
		||||
BRANCH=$(git -C "${DIR}" symbolic-ref -q --short HEAD)
 | 
			
		||||
VERSION=$(git -C "${DIR}" describe --tags --first-parent 2>/dev/null)
 | 
			
		||||
 | 
			
		||||
[ -z "${BRANCH}" ] && BRANCH=$(echo "${TRAVIS_BRANCH}")
 | 
			
		||||
[ -z "${VERSION}" ] && VERSION=$(git -C "${DIR}" describe --tags --first-parent --always 2>/dev/null)
 | 
			
		||||
 | 
			
		||||
SHORT_BUILD_VERSION=$(echo "${BRANCH}")
 | 
			
		||||
DETAILED_BUILD_VERSION=$(echo "${BRANCH}-${VERSION}")
 | 
			
		||||
 | 
			
		||||
# Gets some misc options from their defaults
 | 
			
		||||
DEFAULT_MACHINE_UUID=$(awk -F'"' \
 | 
			
		||||
  '/#define DEFAULT_MACHINE_UUID/{ print $2 }' < "${DIR}/Version.h")
 | 
			
		||||
MACHINE_NAME=$(awk -F'"' \
 | 
			
		||||
  '/#define MACHINE_NAME/{ print $2 }' < "${DIR}/Version.h")
 | 
			
		||||
PROTOCOL_VERSION=$(awk -F'"' \
 | 
			
		||||
  '/#define PROTOCOL_VERSION/{ print $2 }' < "${DIR}/Version.h")
 | 
			
		||||
SOURCE_CODE_URL=$(awk -F'"' \
 | 
			
		||||
  '/#define SOURCE_CODE_URL/{ print $2 }' < "${DIR}/Version.h")
 | 
			
		||||
WEBSITE_URL=$(awk -F'"' \
 | 
			
		||||
  '/#define WEBSITE_URL/{ print $2 }' < "${DIR}/Version.h")
 | 
			
		||||
 | 
			
		||||
cat > "${DIR}/Version.h" <<EOF
 | 
			
		||||
/**
 | 
			
		||||
 * 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
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * THIS FILE IS AUTOMATICALLY GENERATED DO NOT MANUALLY EDIT IT.
 | 
			
		||||
 * IT DOES NOT GET COMMITTED TO THE REPOSITORY.
 | 
			
		||||
 *
 | 
			
		||||
 * Branch: ${BRANCH}
 | 
			
		||||
 * Version: ${VERSION}
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * Marlin release version identifier
 | 
			
		||||
  */
 | 
			
		||||
#ifndef SHORT_BUILD_VERSION
 | 
			
		||||
  #define SHORT_BUILD_VERSION "${SHORT_BUILD_VERSION}"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * Verbose version identifier which should contain a reference to the location
 | 
			
		||||
  * from where the binary was downloaded or the source code was compiled.
 | 
			
		||||
  */
 | 
			
		||||
#ifndef DETAILED_BUILD_VERSION
 | 
			
		||||
  #define DETAILED_BUILD_VERSION "${DETAILED_BUILD_VERSION}"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * The STRING_DISTRIBUTION_DATE represents when the binary file was built,
 | 
			
		||||
  * here we define this default string as the date where the latest release
 | 
			
		||||
  * version was tagged.
 | 
			
		||||
  */
 | 
			
		||||
#ifndef STRING_DISTRIBUTION_DATE
 | 
			
		||||
  #define STRING_DISTRIBUTION_DATE "${DISTDATE}"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * The protocol for communication to the host. Protocol indicates communication
 | 
			
		||||
  * standards such as the use of ASCII, "echo:" and "error:" line prefixes, etc.
 | 
			
		||||
  * (Other behaviors are given by the firmware version and capabilities report.)
 | 
			
		||||
  */
 | 
			
		||||
#ifndef PROTOCOL_VERSION
 | 
			
		||||
  #define PROTOCOL_VERSION "${PROTOCOL_VERSION}"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * Defines a generic printer name to be output to the LCD after booting Marlin.
 | 
			
		||||
  */
 | 
			
		||||
#ifndef MACHINE_NAME
 | 
			
		||||
  #define MACHINE_NAME "${MACHINE_NAME}"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * The SOURCE_CODE_URL is the location where users will find the Marlin Source
 | 
			
		||||
  * Code which is installed on the device. In most cases —unless the manufacturer
 | 
			
		||||
  * has a distinct Github fork— the Source Code URL should just be the main
 | 
			
		||||
  * Marlin repository.
 | 
			
		||||
  */
 | 
			
		||||
#ifndef SOURCE_CODE_URL
 | 
			
		||||
  #define SOURCE_CODE_URL "${SOURCE_CODE_URL}"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * Default generic printer UUID.
 | 
			
		||||
  */
 | 
			
		||||
#ifndef DEFAULT_MACHINE_UUID
 | 
			
		||||
  #define DEFAULT_MACHINE_UUID "${DEFAULT_MACHINE_UUID}"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
  * The WEBSITE_URL is the location where users can get more information such as
 | 
			
		||||
  * documentation about a specific Marlin release.
 | 
			
		||||
  */
 | 
			
		||||
#ifndef WEBSITE_URL
 | 
			
		||||
  #define WEBSITE_URL "${WEBSITE_URL}"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
							
								
								
									
										3
									
								
								buildroot/bin/opt_add
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								buildroot/bin/opt_add
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
eval "echo '#define ${@}' | cat - Marlin/Configuration.h > temp && mv temp Marlin/Configuration.h"
 | 
			
		||||
							
								
								
									
										13
									
								
								buildroot/bin/opt_disable
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								buildroot/bin/opt_disable
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# exit on first failure
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
SED=$(which gsed || which sed)
 | 
			
		||||
 | 
			
		||||
for opt in "$@" ; do
 | 
			
		||||
  # Logic for returning nonzero based on answer here: https://stackoverflow.com/a/15966279/104648
 | 
			
		||||
  eval "${SED} -i '/\([[:blank:]]*\)\(\/\/\)*\([[:blank:]]*\)\(#define \b${opt}\b\)/{s//\1\3\/\/\4/;h};\${x;/./{x;q0};x;q9}' Marlin/Configuration.h" ||
 | 
			
		||||
  eval "${SED} -i '/\([[:blank:]]*\)\(\/\/\)*\([[:blank:]]*\)\(#define \b${opt}\b\)/{s//\1\3\/\/\4/;h};\${x;/./{x;q0};x;q9}' Marlin/Configuration_adv.h" ||
 | 
			
		||||
  (echo "ERROR: opt_disable Can't find ${opt}" >&2 && exit 9)
 | 
			
		||||
done
 | 
			
		||||
							
								
								
									
										13
									
								
								buildroot/bin/opt_enable
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								buildroot/bin/opt_enable
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# exit on first failure
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
SED=$(which gsed || which sed)
 | 
			
		||||
 | 
			
		||||
for opt in "$@" ; do
 | 
			
		||||
  # Logic for returning nonzero based on answer here: https://stackoverflow.com/a/15966279/104648
 | 
			
		||||
  eval "${SED} -i '/\(\/\/\)*[[:blank:]]*\(#define \b${opt}\b\)/{s//\2/;h};\${x;/./{x;q0};x;q9}' Marlin/Configuration.h" ||
 | 
			
		||||
  eval "${SED} -i '/\(\/\/\)*[[:blank:]]*\(#define \b${opt}\b\)/{s//\2/;h};\${x;/./{x;q0};x;q9}' Marlin/Configuration_adv.h" ||
 | 
			
		||||
  (echo "ERROR: opt_enable Can't find ${opt}" >&2 && exit 9)
 | 
			
		||||
done
 | 
			
		||||
							
								
								
									
										12
									
								
								buildroot/bin/opt_set
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								buildroot/bin/opt_set
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
# exit on first failure
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
SED=$(which gsed || which sed)
 | 
			
		||||
 | 
			
		||||
# Logic for returning nonzero based on answer here: https://stackoverflow.com/a/15966279/104648
 | 
			
		||||
eval "${SED} -i '/\(\/\/\)*\([[:blank:]]*\)\(#define\s\+\b${1}\b\).*$/{s//\2\3 ${2}/;h};\${x;/./{x;q0};x;q9}' Marlin/Configuration.h" ||
 | 
			
		||||
eval "${SED} -i '/\(\/\/\)*\([[:blank:]]*\)\(#define\s\+\b${1}\b\).*$/{s//\2\3 ${2}/;h};\${x;/./{x;q0};x;q9}' Marlin/Configuration_adv.h" ||
 | 
			
		||||
eval "echo '#define ${@}' >>Marlin/Configuration_adv.h" ||
 | 
			
		||||
(echo "ERROR: opt_set Can't set or add ${1}" >&2 && exit 9)
 | 
			
		||||
							
								
								
									
										11
									
								
								buildroot/bin/pins_set
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								buildroot/bin/pins_set
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
IFS='/' read -r -a PINPATH <<< "$1"
 | 
			
		||||
DIR=${PINPATH[0]}
 | 
			
		||||
NAM=${PINPATH[1]}
 | 
			
		||||
PIN=$2
 | 
			
		||||
VAL=$3
 | 
			
		||||
 | 
			
		||||
SED=$(which gsed || which sed)
 | 
			
		||||
eval "${SED} -i '/\(\/\/\)*\(#define \+${PIN}\b\).*$/{s//\2 ${VAL}/;h};\${x;/./{x;q0};x;q9}' Marlin/src/pins/$DIR/pins_${NAM}.h" ||
 | 
			
		||||
(echo "ERROR: pins_set Can't find ${PIN}" >&2 && exit 9)
 | 
			
		||||
							
								
								
									
										5
									
								
								buildroot/bin/restore_configs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								buildroot/bin/restore_configs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
git checkout Marlin/Configuration*.h 2>/dev/null
 | 
			
		||||
git checkout Marlin/src/pins/ramps/pins_RAMPS.h 2>/dev/null
 | 
			
		||||
rm -f Marlin/_Bootscreen.h Marlin/_Statusscreen.h
 | 
			
		||||
							
								
								
									
										16
									
								
								buildroot/bin/uncrust
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								buildroot/bin/uncrust
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
#
 | 
			
		||||
# Run uncrustify for a file in-place
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
TMPDIR=`mktemp -d`
 | 
			
		||||
 | 
			
		||||
# Reformat a single file to tmp/
 | 
			
		||||
uncrustify -l CPP -c ./buildroot/share/extras/uncrustify.cfg -f "$1" >$TMPDIR/uncrustify.out
 | 
			
		||||
 | 
			
		||||
# Replace the original file
 | 
			
		||||
cp "$TMPDIR/uncrustify.out" "$1"
 | 
			
		||||
 | 
			
		||||
# Clean up, deliberately
 | 
			
		||||
rm "$TMPDIR/uncrustify.out"
 | 
			
		||||
rmdir "$TMPDIR"
 | 
			
		||||
							
								
								
									
										21
									
								
								buildroot/bin/use_example_configs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								buildroot/bin/use_example_configs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
IFS=: read -r PART1 PART2 <<< "$@"
 | 
			
		||||
[ -n "${PART2}" ] && { REPO="$PART1" ; RDIR="${PART2// /%20}" ; } \
 | 
			
		||||
                  || { REPO=bugfix-2.0.x   ; RDIR="${PART1// /%20}" ; }
 | 
			
		||||
EXAMPLES="https://raw.githubusercontent.com/MarlinFirmware/Configurations/$REPO/config/examples"
 | 
			
		||||
 | 
			
		||||
which curl >/dev/null && TOOL='curl -L -s -S -f -o wgot'
 | 
			
		||||
which wget >/dev/null && TOOL='wget -q -O wgot'
 | 
			
		||||
 | 
			
		||||
restore_configs
 | 
			
		||||
 | 
			
		||||
cd Marlin
 | 
			
		||||
 | 
			
		||||
$TOOL "$EXAMPLES/$RDIR/Configuration.h"     >/dev/null 2>&1 && mv wgot Configuration.h
 | 
			
		||||
$TOOL "$EXAMPLES/$RDIR/Configuration_adv.h" >/dev/null 2>&1 && mv wgot Configuration_adv.h
 | 
			
		||||
$TOOL "$EXAMPLES/$RDIR/_Bootscreen.h"       >/dev/null 2>&1 && mv wgot _Bootscreen.h
 | 
			
		||||
$TOOL "$EXAMPLES/$RDIR/_Statusscreen.h"     >/dev/null 2>&1 && mv wgot _Statusscreen.h
 | 
			
		||||
 | 
			
		||||
rm -f wgot
 | 
			
		||||
cd - >/dev/null
 | 
			
		||||
							
								
								
									
										23
									
								
								buildroot/etc/.astylerc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								buildroot/etc/.astylerc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
--style=google
 | 
			
		||||
--keep-one-line-blocks
 | 
			
		||||
 | 
			
		||||
--indent=spaces=2
 | 
			
		||||
--indent-preproc-block
 | 
			
		||||
--indent-preproc-define
 | 
			
		||||
--indent-col1-comments
 | 
			
		||||
 | 
			
		||||
--remove-brackets
 | 
			
		||||
--break-after-logical
 | 
			
		||||
--delete-empty-lines
 | 
			
		||||
 | 
			
		||||
--pad-oper
 | 
			
		||||
--pad-header
 | 
			
		||||
--unpad-paren
 | 
			
		||||
--align-pointer=type
 | 
			
		||||
--align-reference=type
 | 
			
		||||
 | 
			
		||||
--attach-classes
 | 
			
		||||
--attach-inlines
 | 
			
		||||
--keep-one-line-statements
 | 
			
		||||
 | 
			
		||||
--indent-namespaces
 | 
			
		||||
							
								
								
									
										207
									
								
								buildroot/etc/udev/rules.d/99-platformio-udev.rules
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										207
									
								
								buildroot/etc/udev/rules.d/99-platformio-udev.rules
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,207 @@
 | 
			
		||||
# Copyright (c) 2014-present PlatformIO <contact@platformio.org>
 | 
			
		||||
#
 | 
			
		||||
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
# you may not use this file except in compliance with the License.
 | 
			
		||||
# You may obtain a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#    https://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
 | 
			
		||||
#####################################################################################
 | 
			
		||||
#
 | 
			
		||||
# INSTALLATION
 | 
			
		||||
#
 | 
			
		||||
# Please visit > https://docs.platformio.org/en/latest/faq.html#platformio-udev-rules
 | 
			
		||||
#
 | 
			
		||||
#####################################################################################
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Boards
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# CP210X USB UART
 | 
			
		||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0666"
 | 
			
		||||
 | 
			
		||||
# FT232R USB UART
 | 
			
		||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", MODE:="0666"
 | 
			
		||||
 | 
			
		||||
# Prolific Technology, Inc. PL2303 Serial Port
 | 
			
		||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", MODE:="0666"
 | 
			
		||||
 | 
			
		||||
# QinHeng Electronics HL-340 USB-Serial adapter
 | 
			
		||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", MODE:="0666"
 | 
			
		||||
 | 
			
		||||
# Arduino boards
 | 
			
		||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="[08][02]*", MODE:="0666"
 | 
			
		||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2a03", ATTRS{idProduct}=="[08][02]*", MODE:="0666"
 | 
			
		||||
 | 
			
		||||
# Arduino SAM-BA
 | 
			
		||||
ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", ENV{ID_MM_DEVICE_IGNORE}="1"
 | 
			
		||||
ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", ENV{MTP_NO_PROBE}="1"
 | 
			
		||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", MODE:="0666"
 | 
			
		||||
KERNEL=="ttyACM*", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", MODE:="0666"
 | 
			
		||||
 | 
			
		||||
# Digistump boards
 | 
			
		||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666"
 | 
			
		||||
KERNEL=="ttyACM*", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666", ENV{ID_MM_DEVICE_IGNORE}="1"
 | 
			
		||||
 | 
			
		||||
# STM32 discovery boards, with onboard st/linkv2
 | 
			
		||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374?", MODE:="0666"
 | 
			
		||||
 | 
			
		||||
# USBtiny
 | 
			
		||||
SUBSYSTEMS=="usb", ATTRS{idProduct}=="0c9f", ATTRS{idVendor}=="1781", MODE="0666"
 | 
			
		||||
 | 
			
		||||
# USBasp V2.0
 | 
			
		||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", MODE:="0666"
 | 
			
		||||
 | 
			
		||||
# Teensy boards
 | 
			
		||||
ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789]?", ENV{ID_MM_DEVICE_IGNORE}="1"
 | 
			
		||||
ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789]?", ENV{MTP_NO_PROBE}="1"
 | 
			
		||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789]?", MODE:="0666"
 | 
			
		||||
KERNEL=="ttyACM*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789]?", MODE:="0666"
 | 
			
		||||
 | 
			
		||||
#TI Stellaris Launchpad
 | 
			
		||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1cbe", ATTRS{idProduct}=="00fd", MODE="0666"
 | 
			
		||||
 | 
			
		||||
#TI MSP430 Launchpad
 | 
			
		||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="f432", MODE="0666"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Debuggers
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# Black Magic Probe
 | 
			
		||||
SUBSYSTEM=="tty", ATTRS{interface}=="Black Magic GDB Server"
 | 
			
		||||
SUBSYSTEM=="tty", ATTRS{interface}=="Black Magic UART Port"
 | 
			
		||||
 | 
			
		||||
# opendous and estick
 | 
			
		||||
ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="204f", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# Original FT232/FT245 VID:PID
 | 
			
		||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# Original FT2232 VID:PID
 | 
			
		||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# Original FT4232 VID:PID
 | 
			
		||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6011", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# Original FT232H VID:PID
 | 
			
		||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6014", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# DISTORTEC JTAG-lock-pick Tiny 2
 | 
			
		||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="8220", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# TUMPA, TUMPA Lite
 | 
			
		||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="8a98", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="8a99", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# XDS100v2
 | 
			
		||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="a6d0", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# Xverve Signalyzer Tool (DT-USB-ST), Signalyzer LITE (DT-USB-SLITE)
 | 
			
		||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bca0", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bca1", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# TI/Luminary Stellaris Evaluation Board FTDI (several)
 | 
			
		||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bcd9", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# TI/Luminary Stellaris In-Circuit Debug Interface FTDI (ICDI) Board
 | 
			
		||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bcda", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# egnite Turtelizer 2
 | 
			
		||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="bdc8", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# Section5 ICEbear
 | 
			
		||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="c140", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="c141", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# Amontec JTAGkey and JTAGkey-tiny
 | 
			
		||||
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="cff8", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# TI ICDI
 | 
			
		||||
ATTRS{idVendor}=="0451", ATTRS{idProduct}=="c32a", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# STLink v1
 | 
			
		||||
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3744", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# STLink v2
 | 
			
		||||
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# STLink v2-1
 | 
			
		||||
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# Hilscher NXHX Boards
 | 
			
		||||
ATTRS{idVendor}=="0640", ATTRS{idProduct}=="0028", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# Hitex STR9-comStick
 | 
			
		||||
ATTRS{idVendor}=="0640", ATTRS{idProduct}=="002c", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# Hitex STM32-PerformanceStick
 | 
			
		||||
ATTRS{idVendor}=="0640", ATTRS{idProduct}=="002d", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# Altera USB Blaster
 | 
			
		||||
ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6001", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# Amontec JTAGkey-HiSpeed
 | 
			
		||||
ATTRS{idVendor}=="0fbb", ATTRS{idProduct}=="1000", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# SEGGER J-Link
 | 
			
		||||
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0101", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0102", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0103", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0104", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0105", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0107", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0108", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1010", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1011", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1012", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1013", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1014", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1015", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1016", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1017", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1018", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# Raisonance RLink
 | 
			
		||||
ATTRS{idVendor}=="138e", ATTRS{idProduct}=="9000", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# Debug Board for Neo1973
 | 
			
		||||
ATTRS{idVendor}=="1457", ATTRS{idProduct}=="5118", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# Olimex ARM-USB-OCD
 | 
			
		||||
ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="0003", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# Olimex ARM-USB-OCD-TINY
 | 
			
		||||
ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="0004", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# Olimex ARM-JTAG-EW
 | 
			
		||||
ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="001e", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# Olimex ARM-USB-OCD-TINY-H
 | 
			
		||||
ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="002a", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# Olimex ARM-USB-OCD-H
 | 
			
		||||
ATTRS{idVendor}=="15ba", ATTRS{idProduct}=="002b", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# USBprog with OpenOCD firmware
 | 
			
		||||
ATTRS{idVendor}=="1781", ATTRS{idProduct}=="0c63", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# TI/Luminary Stellaris In-Circuit Debug Interface (ICDI) Board
 | 
			
		||||
ATTRS{idVendor}=="1cbe", ATTRS{idProduct}=="00fd", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# Marvell Sheevaplug
 | 
			
		||||
ATTRS{idVendor}=="9e88", ATTRS{idProduct}=="9e8f", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# Keil Software, Inc. ULink
 | 
			
		||||
ATTRS{idVendor}=="c251", ATTRS{idProduct}=="2710", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
 | 
			
		||||
# CMSIS-DAP compatible adapters
 | 
			
		||||
ATTRS{product}=="*CMSIS-DAP*", MODE="660", GROUP="plugdev", TAG+="uaccess"
 | 
			
		||||
							
								
								
									
										46
									
								
								buildroot/share/PlatformIO/boards/BigTree_Btt002.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								buildroot/share/PlatformIO/boards/BigTree_Btt002.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
{
 | 
			
		||||
  "build": {
 | 
			
		||||
    "core": "stm32",
 | 
			
		||||
    "cpu": "cortex-m4",
 | 
			
		||||
    "extra_flags": "-DSTM32F4 -DSTM32F407xx -DSTM32F40_41xxx",
 | 
			
		||||
    "f_cpu": "168000000L",
 | 
			
		||||
    "hwids": [
 | 
			
		||||
      [
 | 
			
		||||
        "0x1EAF",
 | 
			
		||||
        "0x0003"
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        "0x0483",
 | 
			
		||||
        "0x3748"
 | 
			
		||||
      ]
 | 
			
		||||
    ],
 | 
			
		||||
    "mcu": "stm32f407vgt6",
 | 
			
		||||
    "variant": "BIGTREE_BTT002"
 | 
			
		||||
  },
 | 
			
		||||
  "debug": {
 | 
			
		||||
    "jlink_device": "STM32F407VG",
 | 
			
		||||
    "openocd_target": "stm32f4x",
 | 
			
		||||
    "svd_path": "STM32F40x.svd"
 | 
			
		||||
  },
 | 
			
		||||
  "frameworks": [
 | 
			
		||||
    "arduino"
 | 
			
		||||
  ],
 | 
			
		||||
  "name": "STM32F407VG (192k RAM. 1024k Flash)",
 | 
			
		||||
  "upload": {
 | 
			
		||||
    "disable_flushing": false,
 | 
			
		||||
    "maximum_ram_size": 131072,
 | 
			
		||||
    "maximum_size": 1048576,
 | 
			
		||||
    "protocol": "stlink",
 | 
			
		||||
    "protocols": [
 | 
			
		||||
      "stlink",
 | 
			
		||||
      "dfu",
 | 
			
		||||
      "jlink"
 | 
			
		||||
    ],
 | 
			
		||||
    "offset_address": "0x8008000",
 | 
			
		||||
    "require_upload_port": true,
 | 
			
		||||
    "use_1200bps_touch": false,
 | 
			
		||||
    "wait_for_upload_port": false
 | 
			
		||||
  },
 | 
			
		||||
  "url": "https://www.st.com/en/microcontrollers-microprocessors/stm32f407vg.html",
 | 
			
		||||
  "vendor": "Generic"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										46
									
								
								buildroot/share/PlatformIO/boards/BigTree_GTR_v1.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								buildroot/share/PlatformIO/boards/BigTree_GTR_v1.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
{
 | 
			
		||||
  "build": {
 | 
			
		||||
    "core": "stm32",
 | 
			
		||||
    "cpu": "cortex-m4",
 | 
			
		||||
    "extra_flags": "-DSTM32F4 -DSTM32F407xx -DSTM32F40_41xxx",
 | 
			
		||||
    "f_cpu": "168000000L",
 | 
			
		||||
    "hwids": [
 | 
			
		||||
      [
 | 
			
		||||
        "0x1EAF",
 | 
			
		||||
        "0x0003"
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        "0x0483",
 | 
			
		||||
        "0x3748"
 | 
			
		||||
      ]
 | 
			
		||||
    ],
 | 
			
		||||
    "mcu": "stm32f407zgt6",
 | 
			
		||||
    "variant": "BIGTREE_GTR_V1"
 | 
			
		||||
  },
 | 
			
		||||
  "debug": {
 | 
			
		||||
    "jlink_device": "STM32F407ZG",
 | 
			
		||||
    "openocd_target": "stm32f4x",
 | 
			
		||||
    "svd_path": "STM32F40x.svd"
 | 
			
		||||
  },
 | 
			
		||||
  "frameworks": [
 | 
			
		||||
    "arduino"
 | 
			
		||||
  ],
 | 
			
		||||
  "name": "STM32F407ZG (192k RAM. 1024k Flash)",
 | 
			
		||||
  "upload": {
 | 
			
		||||
    "disable_flushing": false,
 | 
			
		||||
    "maximum_ram_size": 196608,
 | 
			
		||||
    "maximum_size": 1048576,
 | 
			
		||||
    "protocol": "stlink",
 | 
			
		||||
    "protocols": [
 | 
			
		||||
      "stlink",
 | 
			
		||||
      "dfu",
 | 
			
		||||
      "jlink"
 | 
			
		||||
    ],
 | 
			
		||||
    "offset_address": "0x8008000",
 | 
			
		||||
    "require_upload_port": true,
 | 
			
		||||
    "use_1200bps_touch": false,
 | 
			
		||||
    "wait_for_upload_port": false
 | 
			
		||||
  },
 | 
			
		||||
  "url": "https://www.st.com/en/microcontrollers-microprocessors/stm32f407zg.html",
 | 
			
		||||
  "vendor": "Generic"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										46
									
								
								buildroot/share/PlatformIO/boards/BigTree_SKR_Pro.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								buildroot/share/PlatformIO/boards/BigTree_SKR_Pro.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
{
 | 
			
		||||
  "build": {
 | 
			
		||||
    "core": "stm32",
 | 
			
		||||
    "cpu": "cortex-m4",
 | 
			
		||||
    "extra_flags": "-DSTM32F4 -DSTM32F407xx -DSTM32F40_41xxx",
 | 
			
		||||
    "f_cpu": "168000000L",
 | 
			
		||||
    "hwids": [
 | 
			
		||||
      [
 | 
			
		||||
        "0x1EAF",
 | 
			
		||||
        "0x0003"
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        "0x0483",
 | 
			
		||||
        "0x3748"
 | 
			
		||||
      ]
 | 
			
		||||
    ],
 | 
			
		||||
    "mcu": "stm32f407zgt6",
 | 
			
		||||
    "variant": "BIGTREE_SKR_PRO_1v1"
 | 
			
		||||
  },
 | 
			
		||||
  "debug": {
 | 
			
		||||
    "jlink_device": "STM32F407ZG",
 | 
			
		||||
    "openocd_target": "stm32f4x",
 | 
			
		||||
    "svd_path": "STM32F40x.svd"
 | 
			
		||||
  },
 | 
			
		||||
  "frameworks": [
 | 
			
		||||
    "arduino"
 | 
			
		||||
  ],
 | 
			
		||||
  "name": "STM32F407ZG (192k RAM. 1024k Flash)",
 | 
			
		||||
  "upload": {
 | 
			
		||||
    "disable_flushing": false,
 | 
			
		||||
    "maximum_ram_size": 196608,
 | 
			
		||||
    "maximum_size": 1048576,
 | 
			
		||||
    "protocol": "stlink",
 | 
			
		||||
    "protocols": [
 | 
			
		||||
      "stlink",
 | 
			
		||||
      "dfu",
 | 
			
		||||
      "jlink"
 | 
			
		||||
    ],
 | 
			
		||||
    "offset_address": "0x8008000",
 | 
			
		||||
    "require_upload_port": true,
 | 
			
		||||
    "use_1200bps_touch": false,
 | 
			
		||||
    "wait_for_upload_port": false
 | 
			
		||||
  },
 | 
			
		||||
  "url": "https://www.st.com/en/microcontrollers-microprocessors/stm32f407zg.html",
 | 
			
		||||
  "vendor": "Generic"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										48
									
								
								buildroot/share/PlatformIO/boards/CHITU_F103.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								buildroot/share/PlatformIO/boards/CHITU_F103.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
{
 | 
			
		||||
  "build": {
 | 
			
		||||
    "core": "maple",
 | 
			
		||||
    "cpu": "cortex-m3",
 | 
			
		||||
    "extra_flags": "-DSTM32F103xE -DSTM32F1",
 | 
			
		||||
    "f_cpu": "72000000L",
 | 
			
		||||
    "hwids": [
 | 
			
		||||
      [
 | 
			
		||||
        "0x1EAF",
 | 
			
		||||
        "0x0003"
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        "0x1EAF",
 | 
			
		||||
        "0x0004"
 | 
			
		||||
      ]
 | 
			
		||||
    ],
 | 
			
		||||
    "mcu": "stm32f103zet6",
 | 
			
		||||
    "variant": "CHITU_F103",
 | 
			
		||||
    "ldscript": "chitu_f103.ld"
 | 
			
		||||
  },
 | 
			
		||||
  "debug": {
 | 
			
		||||
    "jlink_device": "STM32F103ZE",
 | 
			
		||||
    "openocd_target": "stm32f1x",
 | 
			
		||||
    "svd_path": "STM32F103xx.svd"
 | 
			
		||||
  },
 | 
			
		||||
  "frameworks": [
 | 
			
		||||
    "arduino"
 | 
			
		||||
  ],
 | 
			
		||||
  "name": "CHITU STM32F103Z (64k RAM. 512k Flash)",
 | 
			
		||||
  "upload": {
 | 
			
		||||
    "disable_flushing": false,
 | 
			
		||||
    "maximum_ram_size": 60536,
 | 
			
		||||
    "maximum_size": 480288,
 | 
			
		||||
    "protocol": "stlink",
 | 
			
		||||
    "protocols": [
 | 
			
		||||
      "jlink",
 | 
			
		||||
      "stlink",
 | 
			
		||||
      "blackmagic",
 | 
			
		||||
      "serial",
 | 
			
		||||
      "dfu"
 | 
			
		||||
    ],
 | 
			
		||||
    "require_upload_port": true,
 | 
			
		||||
    "use_1200bps_touch": false,
 | 
			
		||||
    "wait_for_upload_port": false
 | 
			
		||||
  },
 | 
			
		||||
  "url": "https://www.st.com/en/microcontrollers-microprocessors/stm32f103ze.html",
 | 
			
		||||
  "vendor": "Generic"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										64
									
								
								buildroot/share/PlatformIO/boards/FLYF407ZG.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								buildroot/share/PlatformIO/boards/FLYF407ZG.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
			
		||||
{
 | 
			
		||||
  "build": {
 | 
			
		||||
    "core": "stm32",
 | 
			
		||||
    "cpu": "cortex-m4",
 | 
			
		||||
    "extra_flags": "-DSTM32F407xx",
 | 
			
		||||
    "f_cpu": "168000000L",
 | 
			
		||||
    "hwids": [
 | 
			
		||||
      [
 | 
			
		||||
        "0x1EAF",
 | 
			
		||||
        "0x0003"
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        "0x0483",
 | 
			
		||||
        "0x3748"
 | 
			
		||||
      ]
 | 
			
		||||
    ],
 | 
			
		||||
    "mcu": "stm32f407zgt6",
 | 
			
		||||
    "variant": "FLY_F407ZG"
 | 
			
		||||
  },
 | 
			
		||||
  "debug": {
 | 
			
		||||
    "jlink_device": "STM32F407ZG",
 | 
			
		||||
    "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": "STM32F407ZGT6(192k RAM. 1024k Flash)",
 | 
			
		||||
  "upload": {
 | 
			
		||||
    "disable_flushing": false,
 | 
			
		||||
    "maximum_ram_size": 196608,
 | 
			
		||||
    "maximum_size": 1048576,
 | 
			
		||||
    "protocol": "dfu",
 | 
			
		||||
    "protocols": [
 | 
			
		||||
      "stlink",
 | 
			
		||||
      "dfu",
 | 
			
		||||
      "jlink"
 | 
			
		||||
    ],
 | 
			
		||||
    "require_upload_port": true,
 | 
			
		||||
    "use_1200bps_touch": false,
 | 
			
		||||
    "wait_for_upload_port": false
 | 
			
		||||
  },
 | 
			
		||||
  "url": "https://www.st.com/en/microcontrollers-microprocessors/stm32f407ZG.html",
 | 
			
		||||
  "vendor": "Generic"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										66
									
								
								buildroot/share/PlatformIO/boards/FYSETC_CHEETAH_V20.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								buildroot/share/PlatformIO/boards/FYSETC_CHEETAH_V20.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,66 @@
 | 
			
		||||
{
 | 
			
		||||
  "build": {
 | 
			
		||||
    "core": "stm32",
 | 
			
		||||
    "cpu": "cortex-m4",
 | 
			
		||||
    "extra_flags": "-DSTM32F401xx",
 | 
			
		||||
    "f_cpu": "84000000L",
 | 
			
		||||
    "hwids": [
 | 
			
		||||
      [
 | 
			
		||||
        "0x1EAF",
 | 
			
		||||
        "0x0003"
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        "0x0483",
 | 
			
		||||
        "0x3748"
 | 
			
		||||
      ]
 | 
			
		||||
    ],
 | 
			
		||||
    "ldscript": "stm32f401rc.ld",
 | 
			
		||||
    "mcu": "stm32f401rct6",
 | 
			
		||||
    "variant": "FYSETC_CHEETAH_V20"
 | 
			
		||||
  },
 | 
			
		||||
  "debug": {
 | 
			
		||||
    "jlink_device": "STM32F401RC",
 | 
			
		||||
    "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": "STM32F401RC (64k RAM. 256k Flash)",
 | 
			
		||||
  "upload": {
 | 
			
		||||
    "disable_flushing": false,
 | 
			
		||||
    "maximum_ram_size": 65536,
 | 
			
		||||
    "maximum_size": 262144,
 | 
			
		||||
    "protocol": "stlink",
 | 
			
		||||
    "protocols": [
 | 
			
		||||
      "stlink",
 | 
			
		||||
      "dfu",
 | 
			
		||||
      "jlink"
 | 
			
		||||
    ],
 | 
			
		||||
	"offset_address": "0x800C000",
 | 
			
		||||
    "require_upload_port": true,
 | 
			
		||||
    "use_1200bps_touch": false,
 | 
			
		||||
    "wait_for_upload_port": false
 | 
			
		||||
  },
 | 
			
		||||
  "url": "https://www.fysetc.com",
 | 
			
		||||
  "vendor": "Generic"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										65
									
								
								buildroot/share/PlatformIO/boards/LERDGE.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								buildroot/share/PlatformIO/boards/LERDGE.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,65 @@
 | 
			
		||||
{
 | 
			
		||||
  "build": {
 | 
			
		||||
    "core": "stm32",
 | 
			
		||||
    "cpu": "cortex-m4",
 | 
			
		||||
    "extra_flags": "-DSTM32F407xx",
 | 
			
		||||
    "f_cpu": "168000000L",
 | 
			
		||||
    "hwids": [
 | 
			
		||||
      [
 | 
			
		||||
        "0x1EAF",
 | 
			
		||||
        "0x0003"
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        "0x0483",
 | 
			
		||||
        "0x3748"
 | 
			
		||||
      ]
 | 
			
		||||
    ],
 | 
			
		||||
    "mcu": "stm32f407zgt6",
 | 
			
		||||
    "variant": "LERDGE",
 | 
			
		||||
    "ldscript": "LERDGE.ld"
 | 
			
		||||
  },
 | 
			
		||||
  "debug": {
 | 
			
		||||
    "jlink_device": "STM32F407ZG",
 | 
			
		||||
    "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": "STM32F407ZGT6(192k RAM. 1024k Flash)",
 | 
			
		||||
  "upload": {
 | 
			
		||||
    "disable_flushing": false,
 | 
			
		||||
    "maximum_ram_size": 196608,
 | 
			
		||||
    "maximum_size": 1048576,
 | 
			
		||||
    "protocol": "stlink",
 | 
			
		||||
    "protocols": [
 | 
			
		||||
      "stlink",
 | 
			
		||||
      "dfu",
 | 
			
		||||
      "jlink"
 | 
			
		||||
    ],
 | 
			
		||||
    "require_upload_port": true,
 | 
			
		||||
    "use_1200bps_touch": false,
 | 
			
		||||
    "wait_for_upload_port": false
 | 
			
		||||
  },
 | 
			
		||||
  "url": "https://www.st.com/en/microcontrollers-microprocessors/stm32f407ZG.html",
 | 
			
		||||
  "vendor": "Generic"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										53
									
								
								buildroot/share/PlatformIO/boards/MEEB_3DP.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								buildroot/share/PlatformIO/boards/MEEB_3DP.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
			
		||||
{
 | 
			
		||||
  "build": {
 | 
			
		||||
    "core": "maple",
 | 
			
		||||
    "cpu": "cortex-m3",
 | 
			
		||||
    "extra_flags": "-DSTM32F103xE -DSTM32F1",
 | 
			
		||||
    "f_cpu": "72000000L",
 | 
			
		||||
    "hwids": [
 | 
			
		||||
      [
 | 
			
		||||
        "0x1EAF",
 | 
			
		||||
        "0x0003"
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        "0x1EAF",
 | 
			
		||||
        "0x0004"
 | 
			
		||||
      ]
 | 
			
		||||
    ],
 | 
			
		||||
    "libopencm3": {
 | 
			
		||||
      "ldscript": "stm32f103xc.ld"
 | 
			
		||||
    },
 | 
			
		||||
    "mcu": "stm32f103rct6",
 | 
			
		||||
    "variant": "MEEB_3DP"
 | 
			
		||||
  },
 | 
			
		||||
  "debug": {
 | 
			
		||||
    "jlink_device": "STM32F103RC",
 | 
			
		||||
    "openocd_target": "stm32f1x",
 | 
			
		||||
    "svd_path": "STM32F103xx.svd"
 | 
			
		||||
  },
 | 
			
		||||
  "frameworks": [
 | 
			
		||||
    "arduino",
 | 
			
		||||
    "cmsis",
 | 
			
		||||
    "libopencm3",
 | 
			
		||||
    "stm32cube"
 | 
			
		||||
  ],
 | 
			
		||||
  "name": "3D Printer control board for MEEB with 512k flash/rs422 bus/tmc2208 drivers",
 | 
			
		||||
  "upload": {
 | 
			
		||||
    "disable_flushing": false,
 | 
			
		||||
    "maximum_ram_size": 49152,
 | 
			
		||||
    "maximum_size": 524288,
 | 
			
		||||
    "protocol": "dfu",
 | 
			
		||||
    "protocols": [
 | 
			
		||||
      "jlink",
 | 
			
		||||
      "stlink",
 | 
			
		||||
      "blackmagic",
 | 
			
		||||
      "serial",
 | 
			
		||||
      "dfu"
 | 
			
		||||
    ],
 | 
			
		||||
    "require_upload_port": true,
 | 
			
		||||
    "use_1200bps_touch": false,
 | 
			
		||||
    "wait_for_upload_port": false
 | 
			
		||||
  },
 | 
			
		||||
  "url": "https://github.com/ccrobot-online/MEEB_3DP",
 | 
			
		||||
  "vendor": "CCROBOT-ONLINE"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										65
									
								
								buildroot/share/PlatformIO/boards/STEVAL_STM32F401VE.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								buildroot/share/PlatformIO/boards/STEVAL_STM32F401VE.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,65 @@
 | 
			
		||||
{
 | 
			
		||||
  "build": {
 | 
			
		||||
    "core": "stm32",
 | 
			
		||||
    "cpu": "cortex-m4",
 | 
			
		||||
    "extra_flags": "-DSTM32F401xx",
 | 
			
		||||
    "f_cpu": "84000000L",
 | 
			
		||||
    "hwids": [
 | 
			
		||||
      [
 | 
			
		||||
        "0x1EAF",
 | 
			
		||||
        "0x0003"
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        "0x0483",
 | 
			
		||||
        "0x3748"
 | 
			
		||||
      ]
 | 
			
		||||
    ],
 | 
			
		||||
    "ldscript": "stm32f401xe.ld",
 | 
			
		||||
    "mcu": "stm32f401vet6",
 | 
			
		||||
    "variant": "STEVAL_F401VE"
 | 
			
		||||
  },
 | 
			
		||||
  "debug": {
 | 
			
		||||
    "jlink_device": "STM32F401VE",
 | 
			
		||||
    "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": "STM32F401VE (96k RAM. 512k Flash)",
 | 
			
		||||
  "upload": {
 | 
			
		||||
    "disable_flushing": false,
 | 
			
		||||
    "maximum_ram_size": 98304,
 | 
			
		||||
    "maximum_size": 514288,
 | 
			
		||||
    "protocol": "stlink",
 | 
			
		||||
    "protocols": [
 | 
			
		||||
      "stlink",
 | 
			
		||||
      "dfu",
 | 
			
		||||
      "jlink"
 | 
			
		||||
    ],
 | 
			
		||||
    "require_upload_port": true,
 | 
			
		||||
    "use_1200bps_touch": false,
 | 
			
		||||
    "wait_for_upload_port": false
 | 
			
		||||
  },
 | 
			
		||||
  "url": "https://www.st.com/en/evaluation-tools/steval-3dp001v1.html",
 | 
			
		||||
  "vendor": "Generic"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										59
									
								
								buildroot/share/PlatformIO/boards/archim.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								buildroot/share/PlatformIO/boards/archim.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
{
 | 
			
		||||
  "build": {
 | 
			
		||||
    "core": "arduino",
 | 
			
		||||
    "cpu": "cortex-m3",
 | 
			
		||||
    "extra_flags": "-D__SAM3X8E__ -DARDUINO_ARCH_SAM -DARDUINO_SAM_DUE",
 | 
			
		||||
    "f_cpu": "84000000L",
 | 
			
		||||
    "hwids": [
 | 
			
		||||
      [
 | 
			
		||||
        "0x27B1",
 | 
			
		||||
        "0x0001"
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        "0x2341",
 | 
			
		||||
        "0x003E"
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        "0x2341",
 | 
			
		||||
        "0x003D"
 | 
			
		||||
      ]
 | 
			
		||||
    ],
 | 
			
		||||
    "ldscript": "linker_scripts/gcc/flash.ld",
 | 
			
		||||
    "mcu": "at91sam3x8e",
 | 
			
		||||
    "usb_product": "Archim",
 | 
			
		||||
    "variant": "archim"
 | 
			
		||||
  },
 | 
			
		||||
  "connectivity": [
 | 
			
		||||
    "can"
 | 
			
		||||
  ],
 | 
			
		||||
  "debug": {
 | 
			
		||||
    "jlink_device": "ATSAM3X8E",
 | 
			
		||||
    "openocd_chipname": "at91sam3X8E",
 | 
			
		||||
    "openocd_target": "at91sam3XXX",
 | 
			
		||||
    "svd_path": "ATSAM3X8E.svd"
 | 
			
		||||
  },
 | 
			
		||||
  "frameworks": [
 | 
			
		||||
    "arduino",
 | 
			
		||||
    "simba"
 | 
			
		||||
  ],
 | 
			
		||||
  "name": "Archim",
 | 
			
		||||
  "upload": {
 | 
			
		||||
    "disable_flushing": true,
 | 
			
		||||
    "maximum_ram_size": 98304,
 | 
			
		||||
    "maximum_size": 524288,
 | 
			
		||||
    "native_usb": true,
 | 
			
		||||
    "protocol": "sam-ba",
 | 
			
		||||
    "protocols": [
 | 
			
		||||
      "sam-ba",
 | 
			
		||||
      "jlink",
 | 
			
		||||
      "blackmagic",
 | 
			
		||||
      "atmel-ice",
 | 
			
		||||
      "stlink"
 | 
			
		||||
    ],
 | 
			
		||||
    "require_upload_port": true,
 | 
			
		||||
    "use_1200bps_touch": true,
 | 
			
		||||
    "wait_for_upload_port": true
 | 
			
		||||
  },
 | 
			
		||||
  "url": "https://ultimachine.com",
 | 
			
		||||
  "vendor": "UltiMachine"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										21
									
								
								buildroot/share/PlatformIO/boards/at90usb1286.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								buildroot/share/PlatformIO/boards/at90usb1286.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
{
 | 
			
		||||
  "build": {
 | 
			
		||||
    "core": "teensy",
 | 
			
		||||
    "extra_flags": "-DTEENSY2PP  -fsingle-precision-constant",
 | 
			
		||||
    "f_cpu": "16000000L",
 | 
			
		||||
    "mcu": "at90usb1286"
 | 
			
		||||
  },
 | 
			
		||||
  "frameworks": [
 | 
			
		||||
    "arduino"
 | 
			
		||||
  ],
 | 
			
		||||
  "platform": "teensy",
 | 
			
		||||
  "name": "Atmel AT90USB1286 based",
 | 
			
		||||
  "upload": {
 | 
			
		||||
    "maximum_ram_size": 8192,
 | 
			
		||||
    "maximum_size": 122880,
 | 
			
		||||
    "require_upload_port": true,
 | 
			
		||||
    "protocol": ""
 | 
			
		||||
  },
 | 
			
		||||
  "url": "https://github.com/MarlinFirmware/Marlin",
 | 
			
		||||
  "vendor": "various"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										64
									
								
								buildroot/share/PlatformIO/boards/blackSTM32F407VET6.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								buildroot/share/PlatformIO/boards/blackSTM32F407VET6.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
			
		||||
{
 | 
			
		||||
  "build": {
 | 
			
		||||
    "core": "stm32",
 | 
			
		||||
    "cpu": "cortex-m4",
 | 
			
		||||
    "extra_flags": "-DSTM32F407xx",
 | 
			
		||||
    "f_cpu": "168000000L",
 | 
			
		||||
    "hwids": [
 | 
			
		||||
      [
 | 
			
		||||
        "0x1EAF",
 | 
			
		||||
        "0x0003"
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        "0x0483",
 | 
			
		||||
        "0x3748"
 | 
			
		||||
      ]
 | 
			
		||||
    ],
 | 
			
		||||
    "mcu": "stm32f407vet6",
 | 
			
		||||
    "variant": "MARLIN_F407VE"
 | 
			
		||||
  },
 | 
			
		||||
  "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 (192k RAM. 512k Flash)",
 | 
			
		||||
  "upload": {
 | 
			
		||||
    "disable_flushing": false,
 | 
			
		||||
    "maximum_ram_size": 131072,
 | 
			
		||||
    "maximum_size": 514288,
 | 
			
		||||
    "protocol": "stlink",
 | 
			
		||||
    "protocols": [
 | 
			
		||||
      "stlink",
 | 
			
		||||
      "dfu",
 | 
			
		||||
      "jlink"
 | 
			
		||||
    ],
 | 
			
		||||
    "require_upload_port": true,
 | 
			
		||||
    "use_1200bps_touch": false,
 | 
			
		||||
    "wait_for_upload_port": false
 | 
			
		||||
  },
 | 
			
		||||
  "url": "https://www.st.com/en/microcontrollers-microprocessors/stm32f407ve.html",
 | 
			
		||||
  "vendor": "Generic"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										34
									
								
								buildroot/share/PlatformIO/boards/fysetc_f6.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								buildroot/share/PlatformIO/boards/fysetc_f6.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
{
 | 
			
		||||
  "build": {
 | 
			
		||||
    "core": "arduino",
 | 
			
		||||
    "extra_flags": "-DARDUINO_AVR_MEGA2560",
 | 
			
		||||
    "f_cpu": "16000000L",
 | 
			
		||||
    "hwids": [
 | 
			
		||||
      [
 | 
			
		||||
        "0x27b2",
 | 
			
		||||
        "0x0002"
 | 
			
		||||
      ]
 | 
			
		||||
    ],
 | 
			
		||||
    "mcu": "atmega2560",
 | 
			
		||||
    "variant": "fysetcf6"
 | 
			
		||||
  },
 | 
			
		||||
  "debug": {
 | 
			
		||||
    "simavr_target": "atmega2560",
 | 
			
		||||
    "avr-stub": {
 | 
			
		||||
      "speed": 115200
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "frameworks": [
 | 
			
		||||
    "arduino"
 | 
			
		||||
  ],
 | 
			
		||||
  "name": "FYSETC F6",
 | 
			
		||||
  "upload": {
 | 
			
		||||
    "maximum_ram_size": 8192,
 | 
			
		||||
    "maximum_size": 258048,
 | 
			
		||||
    "protocol": "wiring",
 | 
			
		||||
    "require_upload_port": true,
 | 
			
		||||
    "speed": 115200
 | 
			
		||||
  },
 | 
			
		||||
  "url": "https://www.fysetc.com/",
 | 
			
		||||
  "vendor": "FYSETC"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										56
									
								
								buildroot/share/PlatformIO/boards/genericSTM32F407VGT6.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								buildroot/share/PlatformIO/boards/genericSTM32F407VGT6.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
			
		||||
{
 | 
			
		||||
  "build": {
 | 
			
		||||
    "core": "stm32",
 | 
			
		||||
    "cpu": "cortex-m4",
 | 
			
		||||
    "extra_flags": "-DSTM32F407xx -DSTM32F4",
 | 
			
		||||
    "f_cpu": "168000000L",
 | 
			
		||||
    "hwids": [
 | 
			
		||||
      [
 | 
			
		||||
        "0x1EAF",
 | 
			
		||||
        "0x0003"
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        "0x0483",
 | 
			
		||||
        "0x3748"
 | 
			
		||||
      ]
 | 
			
		||||
    ],
 | 
			
		||||
    "mcu": "stm32f407vgt6",
 | 
			
		||||
    "product_line": "STM32F407xx",
 | 
			
		||||
    "variant": "Generic_F4x7Vx"
 | 
			
		||||
  },
 | 
			
		||||
  "debug": {
 | 
			
		||||
    "default_tools": [
 | 
			
		||||
      "stlink"
 | 
			
		||||
    ],
 | 
			
		||||
    "jlink_device": "STM32F407VG",
 | 
			
		||||
    "openocd_extra_args": [
 | 
			
		||||
      "-c",
 | 
			
		||||
      "reset_config none"
 | 
			
		||||
    ],
 | 
			
		||||
    "openocd_target": "stm32f4x",
 | 
			
		||||
    "svd_path": "STM32F40x.svd"
 | 
			
		||||
  },
 | 
			
		||||
  "frameworks": [
 | 
			
		||||
    "arduino",
 | 
			
		||||
    "cmsis",
 | 
			
		||||
    "stm32cube",
 | 
			
		||||
    "libopencm3"
 | 
			
		||||
  ],
 | 
			
		||||
  "name": "STM32F407VG (128k RAM, 64k CCM RAM, 1024k Flash",
 | 
			
		||||
  "upload": {
 | 
			
		||||
    "disable_flushing": false,
 | 
			
		||||
    "maximum_ram_size": 131072,
 | 
			
		||||
    "maximum_size": 1048576,
 | 
			
		||||
    "protocol": "stlink",
 | 
			
		||||
    "protocols": [
 | 
			
		||||
      "stlink",
 | 
			
		||||
      "dfu",
 | 
			
		||||
      "jlink"
 | 
			
		||||
    ],
 | 
			
		||||
    "require_upload_port": true,
 | 
			
		||||
    "use_1200bps_touch": false,
 | 
			
		||||
    "wait_for_upload_port": false
 | 
			
		||||
  },
 | 
			
		||||
  "url": "https://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32-high-performance-mcus/stm32f4-series/stm32f407-417/stm32f407vg.html",
 | 
			
		||||
  "vendor": "Generic"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										35
									
								
								buildroot/share/PlatformIO/boards/malyanM200.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								buildroot/share/PlatformIO/boards/malyanM200.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
  "build": {
 | 
			
		||||
    "core": "maple",
 | 
			
		||||
    "cpu": "cortex-m3",
 | 
			
		||||
    "extra_flags": "-DARDUINO_GENERIC_STM32F103C -DMCU_STM32F103CB",
 | 
			
		||||
    "f_cpu": "72000000L",
 | 
			
		||||
    "hwids": [
 | 
			
		||||
        ["0x1EAF", "0x0003"],
 | 
			
		||||
        ["0x1EAF", "0x0004"]
 | 
			
		||||
    ],
 | 
			
		||||
    "ldscript": "jtagOffset.ld",
 | 
			
		||||
    "mcu": "stm32f103cb",
 | 
			
		||||
    "variant": "malyanM200",
 | 
			
		||||
    "vec_tab_addr": "0x8002000"
 | 
			
		||||
  },
 | 
			
		||||
  "debug": {
 | 
			
		||||
    "jlink_device": "STM32F103CB",
 | 
			
		||||
    "openocd_target": "stm32f1x",
 | 
			
		||||
    "svd_path": "STM32F103xx.svd"
 | 
			
		||||
  },
 | 
			
		||||
  "platform": "ststm32",
 | 
			
		||||
  "frameworks": ["arduino"],
 | 
			
		||||
  "name": "Malyan STM32F103CB (20k RAM. 128k Flash)",
 | 
			
		||||
  "upload": {
 | 
			
		||||
    "disable_flushing": false,
 | 
			
		||||
    "maximum_ram_size": 20480,
 | 
			
		||||
    "maximum_size": 131072,
 | 
			
		||||
    "protocol": "serial",
 | 
			
		||||
    "require_upload_port": true,
 | 
			
		||||
    "use_1200bps_touch": false,
 | 
			
		||||
    "wait_for_upload_port": false
 | 
			
		||||
  },
 | 
			
		||||
  "url": "https://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103cb.html",
 | 
			
		||||
  "vendor": "Generic"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										41
									
								
								buildroot/share/PlatformIO/boards/malyanM200v2.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								buildroot/share/PlatformIO/boards/malyanM200v2.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
{
 | 
			
		||||
  "build": {
 | 
			
		||||
    "cpu": "cortex-m0",
 | 
			
		||||
    "extra_flags": "-DSTM32F070xB",
 | 
			
		||||
    "f_cpu": "48000000L",
 | 
			
		||||
    "mcu": "stm32f070rbt6",
 | 
			
		||||
    "variant": "MALYANMx00_F070CB",
 | 
			
		||||
    "vec_tab_addr": "0x8002000"
 | 
			
		||||
  },
 | 
			
		||||
  "debug": {
 | 
			
		||||
    "jlink_device": "STM32F070RB",
 | 
			
		||||
    "default_tools": [
 | 
			
		||||
      "stlink"
 | 
			
		||||
    ],
 | 
			
		||||
    "onboard_tools": [
 | 
			
		||||
      "stlink"
 | 
			
		||||
    ],
 | 
			
		||||
    "openocd_board": "st_nucleo_f0",
 | 
			
		||||
    "openocd_target": "stm32f0x"
 | 
			
		||||
  },
 | 
			
		||||
  "platform": "ststm32",
 | 
			
		||||
  "frameworks": [
 | 
			
		||||
    "mbed",
 | 
			
		||||
    "stm32cube",
 | 
			
		||||
    "arduino"
 | 
			
		||||
  ],
 | 
			
		||||
  "name": "Malyan M200 V2/Delta",
 | 
			
		||||
  "upload": {
 | 
			
		||||
    "maximum_ram_size": 16384,
 | 
			
		||||
    "maximum_size": 131072,
 | 
			
		||||
    "protocol": "mbed",
 | 
			
		||||
    "protocols": [
 | 
			
		||||
      "jlink",
 | 
			
		||||
      "stlink",
 | 
			
		||||
      "blackmagic",
 | 
			
		||||
      "mbed"
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "url": "https://developer.mbed.org/platforms/ST-Nucleo-F070RB/",
 | 
			
		||||
  "vendor": "Malyan"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										35
									
								
								buildroot/share/PlatformIO/boards/marlin_fysetc_s6.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								buildroot/share/PlatformIO/boards/marlin_fysetc_s6.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
  "build": {
 | 
			
		||||
    "cpu": "cortex-m4",
 | 
			
		||||
    "extra_flags": "-DSTM32F446xx",
 | 
			
		||||
    "f_cpu": "180000000L",
 | 
			
		||||
    "mcu": "stm32f446ret6",
 | 
			
		||||
    "variant": "MARLIN_FYSETC_S6"
 | 
			
		||||
  },
 | 
			
		||||
  "connectivity": [
 | 
			
		||||
    "can"
 | 
			
		||||
  ],
 | 
			
		||||
  "debug": {
 | 
			
		||||
    "jlink_device": "STM32F446RE",
 | 
			
		||||
    "openocd_target": "stm32f4x",
 | 
			
		||||
    "svd_path": "STM32F446x.svd"
 | 
			
		||||
  },
 | 
			
		||||
  "frameworks": [
 | 
			
		||||
    "arduino",
 | 
			
		||||
    "stm32cube"
 | 
			
		||||
  ],
 | 
			
		||||
  "name": "3D Printer control board",
 | 
			
		||||
  "upload": {
 | 
			
		||||
    "maximum_ram_size": 131072,
 | 
			
		||||
    "maximum_size": 524288,
 | 
			
		||||
    "protocol": "stlink",
 | 
			
		||||
    "protocols": [
 | 
			
		||||
      "jlink",
 | 
			
		||||
      "stlink",
 | 
			
		||||
      "blackmagic",
 | 
			
		||||
      "serial"
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "url": "https://www.st.com/en/microcontrollers-microprocessors/stm32f446.html",
 | 
			
		||||
  "vendor": "FYSETC"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/STM32F103RC_MEEB_3DP.ld
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/STM32F103RC_MEEB_3DP.ld
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
  ram (rwx) : ORIGIN = 0x20000000, LENGTH = 48K - 40
 | 
			
		||||
  rom (rx)  : ORIGIN = 0x08002000, LENGTH = 512K - 8K - 4K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Provide memory region aliases for common.inc */
 | 
			
		||||
REGION_ALIAS("REGION_TEXT", rom);
 | 
			
		||||
REGION_ALIAS("REGION_DATA", ram);
 | 
			
		||||
REGION_ALIAS("REGION_BSS", ram);
 | 
			
		||||
REGION_ALIAS("REGION_RODATA", rom);
 | 
			
		||||
 | 
			
		||||
/* Let common.inc handle the real work. */
 | 
			
		||||
INCLUDE common.inc
 | 
			
		||||
@@ -0,0 +1,14 @@
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
  ram (rwx) : ORIGIN = 0x20000000, LENGTH = 48K - 40
 | 
			
		||||
  rom (rx)  : ORIGIN = 0x08007000, LENGTH = 256K - 28K - 4K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Provide memory region aliases for common.inc */
 | 
			
		||||
REGION_ALIAS("REGION_TEXT", rom);
 | 
			
		||||
REGION_ALIAS("REGION_DATA", ram);
 | 
			
		||||
REGION_ALIAS("REGION_BSS", ram);
 | 
			
		||||
REGION_ALIAS("REGION_RODATA", rom);
 | 
			
		||||
 | 
			
		||||
/* Let common.inc handle the real work. */
 | 
			
		||||
INCLUDE common.inc
 | 
			
		||||
@@ -0,0 +1,14 @@
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
  ram (rwx) : ORIGIN = 0x20000000, LENGTH = 48K - 40
 | 
			
		||||
  rom (rx)  : ORIGIN = 0x08007000, LENGTH = 512K - 28K - 4K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Provide memory region aliases for common.inc */
 | 
			
		||||
REGION_ALIAS("REGION_TEXT", rom);
 | 
			
		||||
REGION_ALIAS("REGION_DATA", ram);
 | 
			
		||||
REGION_ALIAS("REGION_BSS", ram);
 | 
			
		||||
REGION_ALIAS("REGION_RODATA", rom);
 | 
			
		||||
 | 
			
		||||
/* Let common.inc handle the real work. */
 | 
			
		||||
INCLUDE common.inc
 | 
			
		||||
@@ -0,0 +1,14 @@
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
  ram (rwx) : ORIGIN = 0x20000000, LENGTH = 48K - 40
 | 
			
		||||
  rom (rx)  : ORIGIN = 0x08007000, LENGTH = 512K - 28K - 4K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Provide memory region aliases for common.inc */
 | 
			
		||||
REGION_ALIAS("REGION_TEXT", rom);
 | 
			
		||||
REGION_ALIAS("REGION_DATA", ram);
 | 
			
		||||
REGION_ALIAS("REGION_BSS", ram);
 | 
			
		||||
REGION_ALIAS("REGION_RODATA", rom);
 | 
			
		||||
 | 
			
		||||
/* Let common.inc handle the real work. */
 | 
			
		||||
INCLUDE common.inc
 | 
			
		||||
							
								
								
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/STM32F103VE_longer.ld
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/STM32F103VE_longer.ld
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
  ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K - 40
 | 
			
		||||
  rom (rx)  : ORIGIN = 0x08010000, LENGTH = 512K - 64K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Provide memory region aliases for common.inc */
 | 
			
		||||
REGION_ALIAS("REGION_TEXT", rom);
 | 
			
		||||
REGION_ALIAS("REGION_DATA", ram);
 | 
			
		||||
REGION_ALIAS("REGION_BSS", ram);
 | 
			
		||||
REGION_ALIAS("REGION_RODATA", rom);
 | 
			
		||||
 | 
			
		||||
/* Let common.inc handle the real work. */
 | 
			
		||||
INCLUDE common.inc
 | 
			
		||||
							
								
								
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/chitu_f103.ld
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/chitu_f103.ld
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
  ram (rwx) : ORIGIN = 0x20000000, LENGTH = 60K
 | 
			
		||||
  rom (rx)  : ORIGIN = 0x08008800, LENGTH = 512K - 34K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Provide memory region aliases for common.inc */
 | 
			
		||||
REGION_ALIAS("REGION_TEXT", rom);
 | 
			
		||||
REGION_ALIAS("REGION_DATA", ram);
 | 
			
		||||
REGION_ALIAS("REGION_BSS", ram);
 | 
			
		||||
REGION_ALIAS("REGION_RODATA", rom);
 | 
			
		||||
 | 
			
		||||
/* Let common.inc handle the real work. */
 | 
			
		||||
INCLUDE common.inc
 | 
			
		||||
							
								
								
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/creality.ld
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/creality.ld
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
  ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K - 40
 | 
			
		||||
  rom (rx)  : ORIGIN = 0x08007000, LENGTH = 512K - 28K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Provide memory region aliases for common.inc */
 | 
			
		||||
REGION_ALIAS("REGION_TEXT", rom);
 | 
			
		||||
REGION_ALIAS("REGION_DATA", ram);
 | 
			
		||||
REGION_ALIAS("REGION_BSS", ram);
 | 
			
		||||
REGION_ALIAS("REGION_RODATA", rom);
 | 
			
		||||
 | 
			
		||||
/* Let common.inc handle the real work. */
 | 
			
		||||
INCLUDE common.inc
 | 
			
		||||
							
								
								
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/fly_mini.ld
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/fly_mini.ld
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
  ram (rwx) : ORIGIN = 0x20000000, LENGTH = 48K - 40
 | 
			
		||||
  rom (rx)  : ORIGIN = 0x08005000, LENGTH = 256K - 20K - 4K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Provide memory region aliases for common.inc */
 | 
			
		||||
REGION_ALIAS("REGION_TEXT", rom);
 | 
			
		||||
REGION_ALIAS("REGION_DATA", ram);
 | 
			
		||||
REGION_ALIAS("REGION_BSS", ram);
 | 
			
		||||
REGION_ALIAS("REGION_RODATA", rom);
 | 
			
		||||
 | 
			
		||||
/* Let common.inc handle the real work. */
 | 
			
		||||
INCLUDE common.inc
 | 
			
		||||
							
								
								
									
										18
									
								
								buildroot/share/PlatformIO/ldscripts/fysetc_stm32f103rc.ld
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								buildroot/share/PlatformIO/ldscripts/fysetc_stm32f103rc.ld
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Linker script for Generic STM32F103RC boards, using the generic bootloader (which takes the lower 8k of memory)
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
	ram (rwx) : ORIGIN = 0x20000000, LENGTH = 48K
 | 
			
		||||
	rom (rx)  : ORIGIN = 0x08008000, LENGTH = 256K - 32K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Provide memory region aliases for common.inc */
 | 
			
		||||
REGION_ALIAS("REGION_TEXT", rom);
 | 
			
		||||
REGION_ALIAS("REGION_DATA", ram);
 | 
			
		||||
REGION_ALIAS("REGION_BSS", ram);
 | 
			
		||||
REGION_ALIAS("REGION_RODATA", rom);
 | 
			
		||||
 | 
			
		||||
/* Let common.inc handle the real work. */
 | 
			
		||||
INCLUDE common.inc
 | 
			
		||||
							
								
								
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/jgaurora_a5s_a1.ld
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/jgaurora_a5s_a1.ld
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
  ram (rwx) : ORIGIN = 0x20000C00, LENGTH = 64K - 3K
 | 
			
		||||
  rom (rx)  : ORIGIN = 0x0800A000, LENGTH = 512K - 40K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Provide memory region aliases for common.inc */
 | 
			
		||||
REGION_ALIAS("REGION_TEXT", rom);
 | 
			
		||||
REGION_ALIAS("REGION_DATA", ram);
 | 
			
		||||
REGION_ALIAS("REGION_BSS", ram);
 | 
			
		||||
REGION_ALIAS("REGION_RODATA", rom);
 | 
			
		||||
 | 
			
		||||
/* Let common.inc handle the real work. */
 | 
			
		||||
INCLUDE common.inc
 | 
			
		||||
							
								
								
									
										186
									
								
								buildroot/share/PlatformIO/ldscripts/lerdge.ld
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										186
									
								
								buildroot/share/PlatformIO/ldscripts/lerdge.ld
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,186 @@
 | 
			
		||||
/*
 | 
			
		||||
*****************************************************************************
 | 
			
		||||
**
 | 
			
		||||
**  File        : LinkerScript.ld
 | 
			
		||||
**
 | 
			
		||||
**  Abstract    : Linker script for STM32F407VGTx Device with
 | 
			
		||||
**                1024KByte 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.
 | 
			
		||||
**  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 = 0x20010000;    /* 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
 | 
			
		||||
{
 | 
			
		||||
FLASH (rx)      : ORIGIN = 0x8000000 + LD_FLASH_OFFSET, LENGTH = LD_MAX_SIZE - LD_FLASH_OFFSET
 | 
			
		||||
RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = LD_MAX_DATA_SIZE
 | 
			
		||||
CCMRAM (rw)      : ORIGIN = 0x10000000, LENGTH = 64K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* 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):
 | 
			
		||||
  {
 | 
			
		||||
    . = 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):
 | 
			
		||||
  {
 | 
			
		||||
    . = 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
 | 
			
		||||
 | 
			
		||||
  _siccmram = LOADADDR(.ccmram);
 | 
			
		||||
 | 
			
		||||
  /* CCM-RAM section
 | 
			
		||||
  *
 | 
			
		||||
  * IMPORTANT NOTE!
 | 
			
		||||
  * If initialized variables will be placed in this section,
 | 
			
		||||
  * the startup code needs to be modified to copy the init-values.
 | 
			
		||||
  */
 | 
			
		||||
  .ccmram :
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    _sccmram = .;       /* create a global symbol at ccmram start */
 | 
			
		||||
    *(.ccmram)
 | 
			
		||||
    *(.ccmram*)
 | 
			
		||||
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    _eccmram = .;       /* create a global symbol at ccmram end */
 | 
			
		||||
  } >CCMRAM 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(4);
 | 
			
		||||
    PROVIDE ( end = . );
 | 
			
		||||
    PROVIDE ( _end = . );
 | 
			
		||||
    . = . + _Min_Heap_Size;
 | 
			
		||||
    . = . + _Min_Stack_Size;
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
  } >RAM
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  /* Remove information from the standard libraries */
 | 
			
		||||
  /DISCARD/ :
 | 
			
		||||
  {
 | 
			
		||||
    libc.a ( * )
 | 
			
		||||
    libm.a ( * )
 | 
			
		||||
    libgcc.a ( * )
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .ARM.attributes 0 : { *(.ARM.attributes) }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/mks_robin.ld
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/mks_robin.ld
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
  ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K - 40
 | 
			
		||||
  rom (rx)  : ORIGIN = 0x08007000, LENGTH = 512K - 28K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Provide memory region aliases for common.inc */
 | 
			
		||||
REGION_ALIAS("REGION_TEXT", rom);
 | 
			
		||||
REGION_ALIAS("REGION_DATA", ram);
 | 
			
		||||
REGION_ALIAS("REGION_BSS", ram);
 | 
			
		||||
REGION_ALIAS("REGION_RODATA", rom);
 | 
			
		||||
 | 
			
		||||
/* Let common.inc handle the real work. */
 | 
			
		||||
INCLUDE common.inc
 | 
			
		||||
							
								
								
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/mks_robin_e3.ld
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/mks_robin_e3.ld
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
  ram (rwx) : ORIGIN = 0x20000000, LENGTH = 48K - 40
 | 
			
		||||
  rom (rx)  : ORIGIN = 0x08005000, LENGTH = 256K - 20K - 4K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Provide memory region aliases for common.inc */
 | 
			
		||||
REGION_ALIAS("REGION_TEXT", rom);
 | 
			
		||||
REGION_ALIAS("REGION_DATA", ram);
 | 
			
		||||
REGION_ALIAS("REGION_BSS", ram);
 | 
			
		||||
REGION_ALIAS("REGION_RODATA", rom);
 | 
			
		||||
 | 
			
		||||
/* Let common.inc handle the real work. */
 | 
			
		||||
INCLUDE common.inc
 | 
			
		||||
							
								
								
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/mks_robin_e3p.ld
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/mks_robin_e3p.ld
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
  ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K - 40
 | 
			
		||||
  rom (rx)  : ORIGIN = 0x08007000, LENGTH = 512K - 28K - 4K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Provide memory region aliases for common.inc */
 | 
			
		||||
REGION_ALIAS("REGION_TEXT", rom);
 | 
			
		||||
REGION_ALIAS("REGION_DATA", ram);
 | 
			
		||||
REGION_ALIAS("REGION_BSS", ram);
 | 
			
		||||
REGION_ALIAS("REGION_RODATA", rom);
 | 
			
		||||
 | 
			
		||||
/* Let common.inc handle the real work. */
 | 
			
		||||
INCLUDE common.inc
 | 
			
		||||
							
								
								
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/mks_robin_lite.ld
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/mks_robin_lite.ld
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
  ram (rwx) : ORIGIN = 0x20000000, LENGTH = 48K - 40
 | 
			
		||||
  rom (rx)  : ORIGIN = 0x08005000, LENGTH = 256K - 20K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Provide memory region aliases for common.inc */
 | 
			
		||||
REGION_ALIAS("REGION_TEXT", rom);
 | 
			
		||||
REGION_ALIAS("REGION_DATA", ram);
 | 
			
		||||
REGION_ALIAS("REGION_BSS", ram);
 | 
			
		||||
REGION_ALIAS("REGION_RODATA", rom);
 | 
			
		||||
 | 
			
		||||
/* Let common.inc handle the real work. */
 | 
			
		||||
INCLUDE common.inc
 | 
			
		||||
							
								
								
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/mks_robin_lite3.ld
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/mks_robin_lite3.ld
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
  ram (rwx) : ORIGIN = 0x20000000, LENGTH = 48K - 40
 | 
			
		||||
  rom (rx)  : ORIGIN = 0x08005000, LENGTH = 256K - 20K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Provide memory region aliases for common.inc */
 | 
			
		||||
REGION_ALIAS("REGION_TEXT", rom);
 | 
			
		||||
REGION_ALIAS("REGION_DATA", ram);
 | 
			
		||||
REGION_ALIAS("REGION_BSS", ram);
 | 
			
		||||
REGION_ALIAS("REGION_RODATA", rom);
 | 
			
		||||
 | 
			
		||||
/* Let common.inc handle the real work. */
 | 
			
		||||
INCLUDE common.inc
 | 
			
		||||
							
								
								
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/mks_robin_mini.ld
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/mks_robin_mini.ld
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
  ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K - 40
 | 
			
		||||
  rom (rx)  : ORIGIN = 0x08007000, LENGTH = 512K - 28K - 4K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Provide memory region aliases for common.inc */
 | 
			
		||||
REGION_ALIAS("REGION_TEXT", rom);
 | 
			
		||||
REGION_ALIAS("REGION_DATA", ram);
 | 
			
		||||
REGION_ALIAS("REGION_BSS", ram);
 | 
			
		||||
REGION_ALIAS("REGION_RODATA", rom);
 | 
			
		||||
 | 
			
		||||
/* Let common.inc handle the real work. */
 | 
			
		||||
INCLUDE common.inc
 | 
			
		||||
							
								
								
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/mks_robin_nano.ld
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/mks_robin_nano.ld
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
  ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K - 40
 | 
			
		||||
  rom (rx)  : ORIGIN = 0x08007000, LENGTH = 512K - 28K - 4K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Provide memory region aliases for common.inc */
 | 
			
		||||
REGION_ALIAS("REGION_TEXT", rom);
 | 
			
		||||
REGION_ALIAS("REGION_DATA", ram);
 | 
			
		||||
REGION_ALIAS("REGION_BSS", ram);
 | 
			
		||||
REGION_ALIAS("REGION_RODATA", rom);
 | 
			
		||||
 | 
			
		||||
/* Let common.inc handle the real work. */
 | 
			
		||||
INCLUDE common.inc
 | 
			
		||||
							
								
								
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/mks_robin_pro.ld
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								buildroot/share/PlatformIO/ldscripts/mks_robin_pro.ld
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
MEMORY
 | 
			
		||||
{
 | 
			
		||||
  ram (rwx) : ORIGIN = 0x20000000, LENGTH = 64K - 40
 | 
			
		||||
  rom (rx)  : ORIGIN = 0x08007000, LENGTH = 512K - 28K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Provide memory region aliases for common.inc */
 | 
			
		||||
REGION_ALIAS("REGION_TEXT", rom);
 | 
			
		||||
REGION_ALIAS("REGION_DATA", ram);
 | 
			
		||||
REGION_ALIAS("REGION_BSS", ram);
 | 
			
		||||
REGION_ALIAS("REGION_RODATA", rom);
 | 
			
		||||
 | 
			
		||||
/* Let common.inc handle the real work. */
 | 
			
		||||
INCLUDE common.inc
 | 
			
		||||
							
								
								
									
										9
									
								
								buildroot/share/PlatformIO/scripts/STEVAL__F401XX.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								buildroot/share/PlatformIO/scripts/STEVAL__F401XX.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
import os
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
custom_ld_script = os.path.abspath("buildroot/share/PlatformIO/variants/STEVAL_F401VE/ldscript.ld")
 | 
			
		||||
for i, flag in enumerate(env["LINKFLAGS"]):
 | 
			
		||||
    if "-Wl,-T" in flag:
 | 
			
		||||
        env["LINKFLAGS"][i] = "-Wl,-T" + custom_ld_script
 | 
			
		||||
    elif flag == "-T":
 | 
			
		||||
        env["LINKFLAGS"][i + 1] = custom_ld_script
 | 
			
		||||
							
								
								
									
										59
									
								
								buildroot/share/PlatformIO/scripts/STM32F103RC_MEEB_3DP.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								buildroot/share/PlatformIO/scripts/STM32F103RC_MEEB_3DP.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
try:
 | 
			
		||||
    import configparser
 | 
			
		||||
except ImportError:
 | 
			
		||||
    import ConfigParser as configparser
 | 
			
		||||
 | 
			
		||||
import os
 | 
			
		||||
Import("env", "projenv")
 | 
			
		||||
# access to global build environment
 | 
			
		||||
print(env)
 | 
			
		||||
# access to project build environment (is used source files in "src" folder)
 | 
			
		||||
print(projenv)
 | 
			
		||||
 | 
			
		||||
config = configparser.ConfigParser()
 | 
			
		||||
config.read("platformio.ini")
 | 
			
		||||
 | 
			
		||||
#com_port = config.get("env:STM32F103RC_meeb", "upload_port")
 | 
			
		||||
#print('Use the {0:s} to reboot the board to dfu mode.'.format(com_port))
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Upload actions
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
def before_upload(source, target, env):
 | 
			
		||||
    print("before_upload")
 | 
			
		||||
    # do some actions
 | 
			
		||||
    # use com_port
 | 
			
		||||
    #
 | 
			
		||||
    env.Execute("pwd")
 | 
			
		||||
 | 
			
		||||
def after_upload(source, target, env):
 | 
			
		||||
    print("after_upload")
 | 
			
		||||
    # do some actions
 | 
			
		||||
    #
 | 
			
		||||
    #
 | 
			
		||||
    env.Execute("pwd")
 | 
			
		||||
 | 
			
		||||
print("Current build targets", map(str, BUILD_TARGETS))
 | 
			
		||||
 | 
			
		||||
env.AddPreAction("upload", before_upload)
 | 
			
		||||
env.AddPostAction("upload", after_upload)
 | 
			
		||||
 | 
			
		||||
flash_size = 0
 | 
			
		||||
vect_tab_addr = 0
 | 
			
		||||
 | 
			
		||||
for define in env['CPPDEFINES']:
 | 
			
		||||
    if define[0] == "VECT_TAB_ADDR":
 | 
			
		||||
        vect_tab_addr = define[1]
 | 
			
		||||
    if define[0] == "STM32_FLASH_SIZE":
 | 
			
		||||
        flash_size = define[1]
 | 
			
		||||
 | 
			
		||||
print('Use the {0:s} address as the marlin app entry point.'.format(vect_tab_addr))
 | 
			
		||||
print('Use the {0:d}KB flash version of stm32f103rct6 chip.'.format(flash_size))
 | 
			
		||||
 | 
			
		||||
custom_ld_script = os.path.abspath("buildroot/share/PlatformIO/ldscripts/STM32F103RC_MEEB_3DP.ld")
 | 
			
		||||
for i, flag in enumerate(env["LINKFLAGS"]):
 | 
			
		||||
    if "-Wl,-T" in flag:
 | 
			
		||||
        env["LINKFLAGS"][i] = "-Wl,-T" + custom_ld_script
 | 
			
		||||
    elif flag == "-T":
 | 
			
		||||
        env["LINKFLAGS"][i + 1] = custom_ld_script
 | 
			
		||||
							
								
								
									
										20
									
								
								buildroot/share/PlatformIO/scripts/STM32F103RC_SKR_MINI.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								buildroot/share/PlatformIO/scripts/STM32F103RC_SKR_MINI.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
import os
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
STM32_FLASH_SIZE = 256
 | 
			
		||||
 | 
			
		||||
for define in env['CPPDEFINES']:
 | 
			
		||||
    if define[0] == "VECT_TAB_ADDR":
 | 
			
		||||
        env['CPPDEFINES'].remove(define)
 | 
			
		||||
    if define[0] == "STM32_FLASH_SIZE":
 | 
			
		||||
        STM32_FLASH_SIZE = define[1]
 | 
			
		||||
 | 
			
		||||
# Relocate firmware from 0x08000000 to 0x08007000
 | 
			
		||||
env['CPPDEFINES'].append(("VECT_TAB_ADDR", "0x08007000"))
 | 
			
		||||
 | 
			
		||||
custom_ld_script = os.path.abspath("buildroot/share/PlatformIO/ldscripts/STM32F103RC_SKR_MINI_" + str(STM32_FLASH_SIZE) + "K.ld")
 | 
			
		||||
for i, flag in enumerate(env["LINKFLAGS"]):
 | 
			
		||||
    if "-Wl,-T" in flag:
 | 
			
		||||
        env["LINKFLAGS"][i] = "-Wl,-T" + custom_ld_script
 | 
			
		||||
    elif flag == "-T":
 | 
			
		||||
        env["LINKFLAGS"][i + 1] = custom_ld_script
 | 
			
		||||
							
								
								
									
										36
									
								
								buildroot/share/PlatformIO/scripts/STM32F103RC_fysetc.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								buildroot/share/PlatformIO/scripts/STM32F103RC_fysetc.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
import os
 | 
			
		||||
from os.path import join
 | 
			
		||||
from os.path import expandvars
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
# Relocate firmware from 0x08000000 to 0x08008000
 | 
			
		||||
#for define in env['CPPDEFINES']:
 | 
			
		||||
#    if define[0] == "VECT_TAB_ADDR":
 | 
			
		||||
#        env['CPPDEFINES'].remove(define)
 | 
			
		||||
#env['CPPDEFINES'].append(("VECT_TAB_ADDR", "0x08008000"))
 | 
			
		||||
 | 
			
		||||
#custom_ld_script = os.path.abspath("buildroot/share/PlatformIO/ldscripts/fysetc_stm32f103rc.ld")
 | 
			
		||||
#for i, flag in enumerate(env["LINKFLAGS"]):
 | 
			
		||||
#    if "-Wl,-T" in flag:
 | 
			
		||||
#        env["LINKFLAGS"][i] = "-Wl,-T" + custom_ld_script
 | 
			
		||||
#    elif flag == "-T":
 | 
			
		||||
#        env["LINKFLAGS"][i + 1] = custom_ld_script
 | 
			
		||||
 | 
			
		||||
# Custom HEX from ELF
 | 
			
		||||
env.AddPostAction(
 | 
			
		||||
	join("$BUILD_DIR","${PROGNAME}.elf"),
 | 
			
		||||
	env.VerboseAction(" ".join([
 | 
			
		||||
		"$OBJCOPY", "-O ihex", "$TARGET", # TARGET=.pio/build/fysetc_STM32F1/firmware.elf
 | 
			
		||||
		"\"" + join("$BUILD_DIR","${PROGNAME}.hex") + "\"", # Note: $BUILD_DIR is a full path
 | 
			
		||||
	]), "Building $TARGET"))
 | 
			
		||||
 | 
			
		||||
# In-line command with arguments
 | 
			
		||||
UPLOAD_TOOL="stm32flash"
 | 
			
		||||
platform = env.PioPlatform()
 | 
			
		||||
if platform.get_package_dir("tool-stm32duino") != None:
 | 
			
		||||
	UPLOAD_TOOL=expandvars("\"" + join(platform.get_package_dir("tool-stm32duino"),"stm32flash","stm32flash") + "\"")
 | 
			
		||||
 | 
			
		||||
env.Replace(
 | 
			
		||||
	UPLOADER=UPLOAD_TOOL,
 | 
			
		||||
	UPLOADCMD=expandvars(UPLOAD_TOOL + " -v -i rts,-dtr,dtr -R -b 115200 -g 0x8000000 -w \"" + join("$BUILD_DIR","${PROGNAME}.hex")+"\"" + " $UPLOAD_PORT")
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										16
									
								
								buildroot/share/PlatformIO/scripts/STM32F103RE_SKR_E3_DIP.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								buildroot/share/PlatformIO/scripts/STM32F103RE_SKR_E3_DIP.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
import os
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
for define in env['CPPDEFINES']:
 | 
			
		||||
    if define[0] == "VECT_TAB_ADDR":
 | 
			
		||||
        env['CPPDEFINES'].remove(define)
 | 
			
		||||
 | 
			
		||||
# Relocate firmware from 0x08000000 to 0x08007000
 | 
			
		||||
env['CPPDEFINES'].append(("VECT_TAB_ADDR", "0x08007000"))
 | 
			
		||||
 | 
			
		||||
custom_ld_script = os.path.abspath("buildroot/share/PlatformIO/ldscripts/STM32F103RE_SKR_E3_DIP.ld")
 | 
			
		||||
for i, flag in enumerate(env["LINKFLAGS"]):
 | 
			
		||||
    if "-Wl,-T" in flag:
 | 
			
		||||
        env["LINKFLAGS"][i] = "-Wl,-T" + custom_ld_script
 | 
			
		||||
    elif flag == "-T":
 | 
			
		||||
        env["LINKFLAGS"][i + 1] = custom_ld_script
 | 
			
		||||
							
								
								
									
										33
									
								
								buildroot/share/PlatformIO/scripts/STM32F103VE_longer.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								buildroot/share/PlatformIO/scripts/STM32F103VE_longer.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
			
		||||
import os
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
# Relocate firmware from 0x08000000 to 0x08010000
 | 
			
		||||
for define in env['CPPDEFINES']:
 | 
			
		||||
    if define[0] == "VECT_TAB_ADDR":
 | 
			
		||||
        env['CPPDEFINES'].remove(define)
 | 
			
		||||
env['CPPDEFINES'].append(("VECT_TAB_ADDR", "0x08010000"))
 | 
			
		||||
 | 
			
		||||
custom_ld_script = os.path.abspath("buildroot/share/PlatformIO/ldscripts/STM32F103VE_longer.ld")
 | 
			
		||||
for i, flag in enumerate(env["LINKFLAGS"]):
 | 
			
		||||
    if "-Wl,-T" in flag:
 | 
			
		||||
        env["LINKFLAGS"][i] = "-Wl,-T" + custom_ld_script
 | 
			
		||||
    elif flag == "-T":
 | 
			
		||||
        env["LINKFLAGS"][i + 1] = custom_ld_script
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Rename ${PROGNAME}.bin and save it as 'project.bin' (No encryption on the Longer3D)
 | 
			
		||||
def encrypt(source, target, env):
 | 
			
		||||
    firmware = open(target[0].path, "rb")
 | 
			
		||||
    marlin_alfa = open(target[0].dir.path +'/project.bin', "wb")
 | 
			
		||||
    length = os.path.getsize(target[0].path)
 | 
			
		||||
    position = 0
 | 
			
		||||
    try:
 | 
			
		||||
        while position < length:
 | 
			
		||||
            byte = firmware.read(1)
 | 
			
		||||
            marlin_alfa.write(byte)
 | 
			
		||||
            position += 1
 | 
			
		||||
    finally:
 | 
			
		||||
        firmware.close()
 | 
			
		||||
        marlin_alfa.close()
 | 
			
		||||
 | 
			
		||||
env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", encrypt);
 | 
			
		||||
							
								
								
									
										34
									
								
								buildroot/share/PlatformIO/scripts/STM32F1_create_variant.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								buildroot/share/PlatformIO/scripts/STM32F1_create_variant.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
import os,shutil
 | 
			
		||||
from SCons.Script import DefaultEnvironment
 | 
			
		||||
from platformio import util
 | 
			
		||||
 | 
			
		||||
def copytree(src, dst, symlinks=False, ignore=None):
 | 
			
		||||
    for item in os.listdir(src):
 | 
			
		||||
        s = os.path.join(src, item)
 | 
			
		||||
        d = os.path.join(dst, item)
 | 
			
		||||
        if os.path.isdir(s):
 | 
			
		||||
            shutil.copytree(s, d, symlinks, ignore)
 | 
			
		||||
        else:
 | 
			
		||||
            shutil.copy2(s, d)
 | 
			
		||||
 | 
			
		||||
env = DefaultEnvironment()
 | 
			
		||||
platform = env.PioPlatform()
 | 
			
		||||
board = env.BoardConfig()
 | 
			
		||||
 | 
			
		||||
FRAMEWORK_DIR = platform.get_package_dir("framework-arduinoststm32-maple")
 | 
			
		||||
assert os.path.isdir(FRAMEWORK_DIR)
 | 
			
		||||
assert os.path.isdir("buildroot/share/PlatformIO/variants")
 | 
			
		||||
 | 
			
		||||
variant = board.get("build.variant")
 | 
			
		||||
variant_dir = os.path.join(FRAMEWORK_DIR, "STM32F1", "variants", variant)
 | 
			
		||||
 | 
			
		||||
source_dir = os.path.join("buildroot/share/PlatformIO/variants", variant)
 | 
			
		||||
assert os.path.isdir(source_dir)
 | 
			
		||||
 | 
			
		||||
if os.path.isdir(variant_dir):
 | 
			
		||||
    shutil.rmtree(variant_dir)
 | 
			
		||||
 | 
			
		||||
if not os.path.isdir(variant_dir):
 | 
			
		||||
    os.mkdir(variant_dir)
 | 
			
		||||
 | 
			
		||||
copytree(source_dir, variant_dir)
 | 
			
		||||
							
								
								
									
										2
									
								
								buildroot/share/PlatformIO/scripts/add_nanolib.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								buildroot/share/PlatformIO/scripts/add_nanolib.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
Import("env")
 | 
			
		||||
env.Append(LINKFLAGS=["--specs=nano.specs"])
 | 
			
		||||
							
								
								
									
										14
									
								
								buildroot/share/PlatformIO/scripts/anet_et4_openblt.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								buildroot/share/PlatformIO/scripts/anet_et4_openblt.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
# Generate the firmware as OpenBLT needs
 | 
			
		||||
 | 
			
		||||
import os,sys
 | 
			
		||||
from os.path import join
 | 
			
		||||
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
env.AddPostAction(
 | 
			
		||||
    "$BUILD_DIR/${PROGNAME}.elf",
 | 
			
		||||
    env.VerboseAction(" ".join([
 | 
			
		||||
        "$OBJCOPY", "-O", "srec",
 | 
			
		||||
        "\"$BUILD_DIR/${PROGNAME}.elf\"", "\"$BUILD_DIR/${PROGNAME}.srec\""
 | 
			
		||||
    ]), "Building " + join("$BUILD_DIR","${PROGNAME}.srec"))
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										127
									
								
								buildroot/share/PlatformIO/scripts/chitu_crypt.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								buildroot/share/PlatformIO/scripts/chitu_crypt.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,127 @@
 | 
			
		||||
Import("env")
 | 
			
		||||
import os
 | 
			
		||||
import random
 | 
			
		||||
import struct
 | 
			
		||||
import uuid
 | 
			
		||||
 | 
			
		||||
# Relocate firmware from 0x08000000 to 0x08008800
 | 
			
		||||
env['CPPDEFINES'].remove(("VECT_TAB_ADDR", "0x8000000"))
 | 
			
		||||
env['CPPDEFINES'].append(("VECT_TAB_ADDR", "0x08008800"))
 | 
			
		||||
 | 
			
		||||
custom_ld_script = os.path.abspath("buildroot/share/PlatformIO/ldscripts/chitu_f103.ld")
 | 
			
		||||
for i, flag in enumerate(env["LINKFLAGS"]):
 | 
			
		||||
    if "-Wl,-T" in flag:
 | 
			
		||||
        env["LINKFLAGS"][i] = "-Wl,-T" + custom_ld_script
 | 
			
		||||
    elif flag == "-T":
 | 
			
		||||
        env["LINKFLAGS"][i + 1] = custom_ld_script
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def calculate_crc(contents, seed):
 | 
			
		||||
    accumulating_xor_value = seed;
 | 
			
		||||
 | 
			
		||||
    for i in range(0, len(contents), 4):
 | 
			
		||||
        value = struct.unpack('<I', contents[ i : i + 4])[0]
 | 
			
		||||
        accumulating_xor_value = accumulating_xor_value ^ value
 | 
			
		||||
    return accumulating_xor_value
 | 
			
		||||
 | 
			
		||||
def xor_block(r0, r1, block_number, block_size, file_key):
 | 
			
		||||
    # This is the loop counter
 | 
			
		||||
    loop_counter = 0x0
 | 
			
		||||
 | 
			
		||||
    # This is the key length
 | 
			
		||||
    key_length = 0x18
 | 
			
		||||
 | 
			
		||||
    # This is an initial seed
 | 
			
		||||
    xor_seed = 0x4BAD
 | 
			
		||||
 | 
			
		||||
    # This is the block counter
 | 
			
		||||
    block_number = xor_seed * block_number
 | 
			
		||||
 | 
			
		||||
    #load the xor key from the file
 | 
			
		||||
    r7 =  file_key
 | 
			
		||||
 | 
			
		||||
    for loop_counter in range(0, block_size):
 | 
			
		||||
        # meant to make sure different bits of the key are used.
 | 
			
		||||
        xor_seed = int(loop_counter/key_length)
 | 
			
		||||
 | 
			
		||||
        # IP is a scratch register / R12
 | 
			
		||||
        ip = loop_counter - (key_length * xor_seed)
 | 
			
		||||
 | 
			
		||||
        # xor_seed = (loop_counter * loop_counter) + block_number
 | 
			
		||||
        xor_seed = (loop_counter * loop_counter) + block_number
 | 
			
		||||
 | 
			
		||||
        # shift the xor_seed left by the bits in IP.
 | 
			
		||||
        xor_seed = xor_seed >> ip
 | 
			
		||||
 | 
			
		||||
        # load a byte into IP
 | 
			
		||||
        ip = r0[loop_counter]
 | 
			
		||||
 | 
			
		||||
        # XOR the seed with r7
 | 
			
		||||
        xor_seed = xor_seed ^ r7
 | 
			
		||||
 | 
			
		||||
        # and then with IP
 | 
			
		||||
        xor_seed = xor_seed ^ ip
 | 
			
		||||
 | 
			
		||||
        #Now store the byte back
 | 
			
		||||
        r1[loop_counter] = xor_seed & 0xFF
 | 
			
		||||
 | 
			
		||||
        #increment the loop_counter
 | 
			
		||||
        loop_counter = loop_counter + 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def encrypt_file(input, output_file, file_length):
 | 
			
		||||
    input_file = bytearray(input.read())
 | 
			
		||||
    block_size = 0x800
 | 
			
		||||
    key_length = 0x18
 | 
			
		||||
 | 
			
		||||
    uid_value = uuid.uuid4()
 | 
			
		||||
    file_key = int(uid_value.hex[0:8], 16)
 | 
			
		||||
 | 
			
		||||
    xor_crc = 0xEF3D4323;
 | 
			
		||||
 | 
			
		||||
    # the input file is exepcted to be in chunks of 0x800
 | 
			
		||||
    # so round the size
 | 
			
		||||
    while len(input_file) % block_size != 0:
 | 
			
		||||
        input_file.extend(b'0x0')
 | 
			
		||||
 | 
			
		||||
    # write the file header
 | 
			
		||||
    output_file.write(struct.pack(">I", 0x443D2D3F))
 | 
			
		||||
    # encrypt the contents using a known file header key
 | 
			
		||||
 | 
			
		||||
    # write the file_key
 | 
			
		||||
    output_file.write(struct.pack("<I", file_key))
 | 
			
		||||
 | 
			
		||||
    #TODO - how to enforce that the firmware aligns to block boundaries?
 | 
			
		||||
    block_count = int(len(input_file) / block_size)
 | 
			
		||||
    print ("Block Count is ", block_count)
 | 
			
		||||
    for block_number in range(0, block_count):
 | 
			
		||||
        block_offset = (block_number * block_size)
 | 
			
		||||
        block_end = block_offset + block_size
 | 
			
		||||
        block_array = bytearray(input_file[block_offset: block_end])
 | 
			
		||||
        xor_block(block_array, block_array, block_number, block_size, file_key)
 | 
			
		||||
        for n in range (0, block_size):
 | 
			
		||||
            input_file[block_offset + n] = block_array[n]
 | 
			
		||||
 | 
			
		||||
        # update the expected CRC value.
 | 
			
		||||
        xor_crc = calculate_crc(block_array, xor_crc)
 | 
			
		||||
 | 
			
		||||
    # write CRC
 | 
			
		||||
    output_file.write(struct.pack("<I", xor_crc))
 | 
			
		||||
 | 
			
		||||
    # finally, append the encrypted results.
 | 
			
		||||
    output_file.write(input_file)
 | 
			
		||||
    return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Encrypt ${PROGNAME}.bin and save it as 'update.cbd'
 | 
			
		||||
def encrypt(source, target, env):
 | 
			
		||||
    firmware = open(target[0].path, "rb")
 | 
			
		||||
    update = open(target[0].dir.path +'/update.cbd', "wb")
 | 
			
		||||
    length = os.path.getsize(target[0].path)
 | 
			
		||||
 | 
			
		||||
    encrypt_file(firmware, update, length)
 | 
			
		||||
 | 
			
		||||
    firmware.close()
 | 
			
		||||
    update.close()
 | 
			
		||||
 | 
			
		||||
env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", encrypt);
 | 
			
		||||
							
								
								
									
										22
									
								
								buildroot/share/PlatformIO/scripts/common-cxxflags.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								buildroot/share/PlatformIO/scripts/common-cxxflags.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
#
 | 
			
		||||
# common-cxxflags.py
 | 
			
		||||
# Convenience script to apply customizations to CPP flags
 | 
			
		||||
#
 | 
			
		||||
Import("env")
 | 
			
		||||
env.Append(CXXFLAGS=[
 | 
			
		||||
  "-Wno-register"
 | 
			
		||||
  #"-Wno-incompatible-pointer-types",
 | 
			
		||||
  #"-Wno-unused-const-variable",
 | 
			
		||||
  #"-Wno-maybe-uninitialized",
 | 
			
		||||
  #"-Wno-sign-compare"
 | 
			
		||||
])
 | 
			
		||||
 | 
			
		||||
# Useful for JTAG debugging
 | 
			
		||||
#
 | 
			
		||||
# It will separe release and debug build folders.
 | 
			
		||||
# It useful when we need keep two live versions: one debug, for debugging,
 | 
			
		||||
# other release, for flashing.
 | 
			
		||||
# Without this, PIO will recompile everything twice for any small change.
 | 
			
		||||
#
 | 
			
		||||
if env.GetBuildType() == "debug":
 | 
			
		||||
	env['BUILD_DIR'] = '$PROJECT_BUILD_DIR/$PIOENV/debug'
 | 
			
		||||
@@ -0,0 +1,16 @@
 | 
			
		||||
#
 | 
			
		||||
# common-dependencies-post.py
 | 
			
		||||
# Convenience script to add build flags for Marlin Enabled Features
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
Import("env")
 | 
			
		||||
Import("projenv")
 | 
			
		||||
 | 
			
		||||
def apply_board_build_flags():
 | 
			
		||||
	if not 'BOARD_CUSTOM_BUILD_FLAGS' in env['MARLIN_FEATURES']:
 | 
			
		||||
		return
 | 
			
		||||
	projenv.Append(CCFLAGS=env['MARLIN_FEATURES']['BOARD_CUSTOM_BUILD_FLAGS'].split())
 | 
			
		||||
 | 
			
		||||
# We need to add the board build flags in a post script
 | 
			
		||||
# so the platform build script doesn't overwrite the custom CCFLAGS
 | 
			
		||||
apply_board_build_flags()
 | 
			
		||||
							
								
								
									
										120
									
								
								buildroot/share/PlatformIO/scripts/common-dependencies.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								buildroot/share/PlatformIO/scripts/common-dependencies.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,120 @@
 | 
			
		||||
/**
 | 
			
		||||
 * 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/>.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * The purpose of this file is just include Marlin Configuration files,
 | 
			
		||||
 * to discover which FEATURES are enabled, without any HAL include.
 | 
			
		||||
 * Used by common-dependencies.py
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define NUM_SERIAL 1 // Normally provided by HAL/HAL.h
 | 
			
		||||
 | 
			
		||||
#include "../../../../Marlin/src/inc/MarlinConfig.h"
 | 
			
		||||
 | 
			
		||||
//
 | 
			
		||||
// Conditionals only used for [features]
 | 
			
		||||
//
 | 
			
		||||
#if ENABLED(SR_LCD_3W_NL)
 | 
			
		||||
  // Feature checks for SR_LCD_3W_NL
 | 
			
		||||
#elif EITHER(LCD_I2C_TYPE_MCP23017, LCD_I2C_TYPE_MCP23008)
 | 
			
		||||
  #define USES_LIQUIDTWI2
 | 
			
		||||
#elif ENABLED(LCD_I2C_TYPE_PCA8574)
 | 
			
		||||
  #define USES_LIQUIDCRYSTAL_I2C
 | 
			
		||||
#elif ANY(HAS_MARLINUI_HD44780, LCD_I2C_TYPE_PCF8575, SR_LCD_2W_NL , LCM1602)
 | 
			
		||||
  #define USES_LIQUIDCRYSTAL
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if SAVED_POSITIONS
 | 
			
		||||
  #define HAS_SAVED_POSITIONS
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if ENABLED(HOST_PROMPT_SUPPORT) && DISABLED(EMERGENCY_PARSER)
 | 
			
		||||
  #define HAS_GCODE_M876
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if EXTRUDERS
 | 
			
		||||
  #define HAS_EXTRUDERS
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if ENABLED(DUET_SMART_EFFECTOR) && PIN_EXISTS(SMART_EFFECTOR_MOD)
 | 
			
		||||
  #define HAS_SMART_EFF_MOD
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if HAS_LCD_MENU
 | 
			
		||||
  #if ENABLED(BACKLASH_GCODE)
 | 
			
		||||
    #define HAS_MENU_BACKLASH
 | 
			
		||||
  #endif
 | 
			
		||||
  #if ENABLED(LEVEL_BED_CORNERS)
 | 
			
		||||
    #define HAS_MENU_BED_CORNERS
 | 
			
		||||
  #endif
 | 
			
		||||
  #if ENABLED(CANCEL_OBJECTS)
 | 
			
		||||
    #define HAS_MENU_CANCELOBJECT
 | 
			
		||||
  #endif
 | 
			
		||||
  #if ENABLED(CUSTOM_USER_MENUS)
 | 
			
		||||
    #define HAS_MENU_CUSTOM
 | 
			
		||||
  #endif
 | 
			
		||||
  #if EITHER(DELTA_CALIBRATION_MENU, DELTA_AUTO_CALIBRATION)
 | 
			
		||||
    #define HAS_MENU_DELTA_CALIBRATE
 | 
			
		||||
  #endif
 | 
			
		||||
  #if EITHER(LED_CONTROL_MENU, CASE_LIGHT_MENU)
 | 
			
		||||
    #define HAS_MENU_LED
 | 
			
		||||
  #endif
 | 
			
		||||
  #if ENABLED(ADVANCED_PAUSE_FEATURE)
 | 
			
		||||
    #define HAS_MENU_FILAMENT
 | 
			
		||||
  #endif
 | 
			
		||||
  #if ENABLED(SDSUPPORT)
 | 
			
		||||
    #define HAS_MENU_MEDIA
 | 
			
		||||
  #endif
 | 
			
		||||
  #if ENABLED(MIXING_EXTRUDER)
 | 
			
		||||
    #define HAS_MENU_MIXER
 | 
			
		||||
  #endif
 | 
			
		||||
  #if ENABLED(POWER_LOSS_RECOVERY)
 | 
			
		||||
    #define HAS_MENU_JOB_RECOVERY
 | 
			
		||||
  #endif
 | 
			
		||||
  #if HAS_POWER_MONITOR
 | 
			
		||||
    #define HAS_MENU_POWER_MONITOR
 | 
			
		||||
  #endif
 | 
			
		||||
  #if HAS_CUTTER
 | 
			
		||||
    #define HAS_MENU_CUTTER
 | 
			
		||||
  #endif
 | 
			
		||||
  #if HAS_TEMPERATURE
 | 
			
		||||
    #define HAS_MENU_TEMPERATURE
 | 
			
		||||
  #endif
 | 
			
		||||
  #if ENABLED(MMU2_MENUS)
 | 
			
		||||
    #define HAS_MENU_MMU2
 | 
			
		||||
  #endif
 | 
			
		||||
  #if ENABLED(PASSWORD_FEATURE)
 | 
			
		||||
    #define HAS_MENU_PASSWORD
 | 
			
		||||
  #endif
 | 
			
		||||
  #if HAS_TRINAMIC_CONFIG
 | 
			
		||||
    #define HAS_MENU_TMC
 | 
			
		||||
  #endif
 | 
			
		||||
  #if ENABLED(TOUCH_SCREEN_CALIBRATION)
 | 
			
		||||
    #define HAS_MENU_TOUCH_SCREEN
 | 
			
		||||
  #endif
 | 
			
		||||
  #if ENABLED(ASSISTED_TRAMMING_WIZARD)
 | 
			
		||||
    #define HAS_MENU_TRAMMING
 | 
			
		||||
  #endif
 | 
			
		||||
  #if ENABLED(AUTO_BED_LEVELING_UBL)
 | 
			
		||||
    #define HAS_MENU_UBL
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										335
									
								
								buildroot/share/PlatformIO/scripts/common-dependencies.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										335
									
								
								buildroot/share/PlatformIO/scripts/common-dependencies.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,335 @@
 | 
			
		||||
#
 | 
			
		||||
# common-dependencies.py
 | 
			
		||||
# Convenience script to check dependencies and add libs and sources for Marlin Enabled Features
 | 
			
		||||
#
 | 
			
		||||
import subprocess
 | 
			
		||||
import os
 | 
			
		||||
import re
 | 
			
		||||
try:
 | 
			
		||||
	import configparser
 | 
			
		||||
except ImportError:
 | 
			
		||||
	import ConfigParser as configparser
 | 
			
		||||
try:
 | 
			
		||||
	# PIO < 4.4
 | 
			
		||||
	from platformio.managers.package import PackageManager
 | 
			
		||||
except ImportError:
 | 
			
		||||
	# PIO >= 4.4
 | 
			
		||||
	from platformio.package.meta import PackageSpec as PackageManager
 | 
			
		||||
 | 
			
		||||
PIO_VERSION_MIN = (5, 0, 3)
 | 
			
		||||
try:
 | 
			
		||||
	from platformio import VERSION as PIO_VERSION
 | 
			
		||||
	weights = (1000, 100, 1)
 | 
			
		||||
	version_min = sum([x[0] * float(re.sub(r'[^0-9]', '.', str(x[1]))) for x in zip(weights, PIO_VERSION_MIN)])
 | 
			
		||||
	version_cur = sum([x[0] * float(re.sub(r'[^0-9]', '.', str(x[1]))) for x in zip(weights, PIO_VERSION)])
 | 
			
		||||
	if version_cur < version_min:
 | 
			
		||||
		print()
 | 
			
		||||
		print("**************************************************")
 | 
			
		||||
		print("******      An update to PlatformIO is      ******")
 | 
			
		||||
		print("******  required to build Marlin Firmware.  ******")
 | 
			
		||||
		print("******                                      ******")
 | 
			
		||||
		print("******      Minimum version: ", PIO_VERSION_MIN, "    ******")
 | 
			
		||||
		print("******      Current Version: ", PIO_VERSION, "    ******")
 | 
			
		||||
		print("******                                      ******")
 | 
			
		||||
		print("******   Update PlatformIO and try again.   ******")
 | 
			
		||||
		print("**************************************************")
 | 
			
		||||
		print()
 | 
			
		||||
		exit(1)
 | 
			
		||||
except SystemExit:
 | 
			
		||||
	exit(1)
 | 
			
		||||
except:
 | 
			
		||||
	print("Can't detect PlatformIO Version")
 | 
			
		||||
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
#print(env.Dump())
 | 
			
		||||
 | 
			
		||||
try:
 | 
			
		||||
	verbose = int(env.GetProjectOption('custom_verbose'))
 | 
			
		||||
except:
 | 
			
		||||
	verbose = 0
 | 
			
		||||
 | 
			
		||||
def blab(str):
 | 
			
		||||
	if verbose:
 | 
			
		||||
		print(str)
 | 
			
		||||
 | 
			
		||||
def parse_pkg_uri(spec):
 | 
			
		||||
	if PackageManager.__name__ == 'PackageSpec':
 | 
			
		||||
		return PackageManager(spec).name
 | 
			
		||||
	else:
 | 
			
		||||
		name, _, _ = PackageManager.parse_pkg_uri(spec)
 | 
			
		||||
		return name
 | 
			
		||||
 | 
			
		||||
FEATURE_CONFIG = {}
 | 
			
		||||
 | 
			
		||||
def add_to_feat_cnf(feature, flines):
 | 
			
		||||
 | 
			
		||||
	try:
 | 
			
		||||
		feat = FEATURE_CONFIG[feature]
 | 
			
		||||
	except:
 | 
			
		||||
		FEATURE_CONFIG[feature] = {}
 | 
			
		||||
 | 
			
		||||
	# Get a reference to the FEATURE_CONFIG under construction
 | 
			
		||||
	feat = FEATURE_CONFIG[feature]
 | 
			
		||||
 | 
			
		||||
	# Split up passed lines on commas or newlines and iterate
 | 
			
		||||
	# Add common options to the features config under construction
 | 
			
		||||
	# For lib_deps replace a previous instance of the same library
 | 
			
		||||
	atoms = re.sub(r',\\s*', '\n', flines).strip().split('\n')
 | 
			
		||||
	for line in atoms:
 | 
			
		||||
		parts = line.split('=')
 | 
			
		||||
		name = parts.pop(0)
 | 
			
		||||
		if name in ['build_flags', 'extra_scripts', 'src_filter', 'lib_ignore']:
 | 
			
		||||
			feat[name] = '='.join(parts)
 | 
			
		||||
		else:
 | 
			
		||||
			for dep in line.split(','):
 | 
			
		||||
				lib_name = re.sub(r'@([~^]|[<>]=?)?[\d.]+', '', dep.strip()).split('=').pop(0)
 | 
			
		||||
				lib_re = re.compile('(?!^' + lib_name + '\\b)')
 | 
			
		||||
				feat['lib_deps'] = list(filter(lib_re.match, feat['lib_deps'])) + [dep]
 | 
			
		||||
 | 
			
		||||
def load_config():
 | 
			
		||||
	config = configparser.ConfigParser()
 | 
			
		||||
	config.read("platformio.ini")
 | 
			
		||||
	items = config.items('features')
 | 
			
		||||
	for key in items:
 | 
			
		||||
		feature = key[0].upper()
 | 
			
		||||
		if not feature in FEATURE_CONFIG:
 | 
			
		||||
			FEATURE_CONFIG[feature] = { 'lib_deps': [] }
 | 
			
		||||
		add_to_feat_cnf(feature, key[1])
 | 
			
		||||
 | 
			
		||||
	# Add options matching custom_marlin.MY_OPTION to the pile
 | 
			
		||||
	all_opts = env.GetProjectOptions()
 | 
			
		||||
	for n in all_opts:
 | 
			
		||||
		mat = re.match(r'custom_marlin\.(.+)', n[0])
 | 
			
		||||
		if mat:
 | 
			
		||||
			try:
 | 
			
		||||
				val = env.GetProjectOption(n[0])
 | 
			
		||||
			except:
 | 
			
		||||
				val = None
 | 
			
		||||
			if val:
 | 
			
		||||
				add_to_feat_cnf(mat.group(1).upper(), val)
 | 
			
		||||
 | 
			
		||||
def get_all_known_libs():
 | 
			
		||||
	known_libs = []
 | 
			
		||||
	for feature in FEATURE_CONFIG:
 | 
			
		||||
		feat = FEATURE_CONFIG[feature]
 | 
			
		||||
		if not 'lib_deps' in feat:
 | 
			
		||||
			continue
 | 
			
		||||
		for dep in feat['lib_deps']:
 | 
			
		||||
			name = parse_pkg_uri(dep)
 | 
			
		||||
			known_libs.append(name)
 | 
			
		||||
	return known_libs
 | 
			
		||||
 | 
			
		||||
def get_all_env_libs():
 | 
			
		||||
	env_libs = []
 | 
			
		||||
	lib_deps = env.GetProjectOption('lib_deps')
 | 
			
		||||
	for dep in lib_deps:
 | 
			
		||||
		name = parse_pkg_uri(dep)
 | 
			
		||||
		env_libs.append(name)
 | 
			
		||||
	return env_libs
 | 
			
		||||
 | 
			
		||||
def set_env_field(field, value):
 | 
			
		||||
	proj = env.GetProjectConfig()
 | 
			
		||||
	proj.set("env:" + env['PIOENV'], field, value)
 | 
			
		||||
 | 
			
		||||
# All unused libs should be ignored so that if a library
 | 
			
		||||
# exists in .pio/lib_deps it will not break compilation.
 | 
			
		||||
def force_ignore_unused_libs():
 | 
			
		||||
	env_libs = get_all_env_libs()
 | 
			
		||||
	known_libs = get_all_known_libs()
 | 
			
		||||
	diff = (list(set(known_libs) - set(env_libs)))
 | 
			
		||||
	lib_ignore = env.GetProjectOption('lib_ignore') + diff
 | 
			
		||||
	blab("Ignore libraries: %s" % lib_ignore)
 | 
			
		||||
	set_env_field('lib_ignore', lib_ignore)
 | 
			
		||||
 | 
			
		||||
def apply_features_config():
 | 
			
		||||
	load_config()
 | 
			
		||||
	for feature in FEATURE_CONFIG:
 | 
			
		||||
		if not env.MarlinFeatureIsEnabled(feature):
 | 
			
		||||
			continue
 | 
			
		||||
 | 
			
		||||
		feat = FEATURE_CONFIG[feature]
 | 
			
		||||
 | 
			
		||||
		if 'lib_deps' in feat and len(feat['lib_deps']):
 | 
			
		||||
			blab("Adding lib_deps for %s... " % feature)
 | 
			
		||||
 | 
			
		||||
			# feat to add
 | 
			
		||||
			deps_to_add = {}
 | 
			
		||||
			for dep in feat['lib_deps']:
 | 
			
		||||
				name = parse_pkg_uri(dep)
 | 
			
		||||
				deps_to_add[name] = dep
 | 
			
		||||
 | 
			
		||||
			# Does the env already have the dependency?
 | 
			
		||||
			deps = env.GetProjectOption('lib_deps')
 | 
			
		||||
			for dep in deps:
 | 
			
		||||
				name = parse_pkg_uri(dep)
 | 
			
		||||
				if name in deps_to_add:
 | 
			
		||||
					del deps_to_add[name]
 | 
			
		||||
 | 
			
		||||
			# Are there any libraries that should be ignored?
 | 
			
		||||
			lib_ignore = env.GetProjectOption('lib_ignore')
 | 
			
		||||
			for dep in deps:
 | 
			
		||||
				name = parse_pkg_uri(dep)
 | 
			
		||||
				if name in deps_to_add:
 | 
			
		||||
					del deps_to_add[name]
 | 
			
		||||
 | 
			
		||||
			# Is there anything left?
 | 
			
		||||
			if len(deps_to_add) > 0:
 | 
			
		||||
				# Only add the missing dependencies
 | 
			
		||||
				set_env_field('lib_deps', deps + list(deps_to_add.values()))
 | 
			
		||||
 | 
			
		||||
		if 'build_flags' in feat:
 | 
			
		||||
			f = feat['build_flags']
 | 
			
		||||
			blab("Adding build_flags for %s: %s" % (feature, f))
 | 
			
		||||
			new_flags = env.GetProjectOption('build_flags') + [ f ]
 | 
			
		||||
			env.Replace(BUILD_FLAGS=new_flags)
 | 
			
		||||
 | 
			
		||||
		if 'extra_scripts' in feat:
 | 
			
		||||
			blab("Running extra_scripts for %s... " % feature)
 | 
			
		||||
			env.SConscript(feat['extra_scripts'], exports="env")
 | 
			
		||||
 | 
			
		||||
		if 'src_filter' in feat:
 | 
			
		||||
			blab("Adding src_filter for %s... " % feature)
 | 
			
		||||
			src_filter = ' '.join(env.GetProjectOption('src_filter'))
 | 
			
		||||
			# first we need to remove the references to the same folder
 | 
			
		||||
			my_srcs = re.findall(r'[+-](<.*?>)', feat['src_filter'])
 | 
			
		||||
			cur_srcs = re.findall(r'[+-](<.*?>)', src_filter)
 | 
			
		||||
			for d in my_srcs:
 | 
			
		||||
				if d in cur_srcs:
 | 
			
		||||
					src_filter = re.sub(r'[+-]' + d, '', src_filter)
 | 
			
		||||
 | 
			
		||||
			src_filter = feat['src_filter'] + ' ' + src_filter
 | 
			
		||||
			set_env_field('src_filter', [src_filter])
 | 
			
		||||
			env.Replace(SRC_FILTER=src_filter)
 | 
			
		||||
 | 
			
		||||
		if 'lib_ignore' in feat:
 | 
			
		||||
			blab("Adding lib_ignore for %s... " % feature)
 | 
			
		||||
			lib_ignore = env.GetProjectOption('lib_ignore') + [feat['lib_ignore']]
 | 
			
		||||
			set_env_field('lib_ignore', lib_ignore)
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Find a compiler, considering the OS
 | 
			
		||||
#
 | 
			
		||||
ENV_BUILD_PATH = os.path.join(env.Dictionary('PROJECT_BUILD_DIR'), env['PIOENV'])
 | 
			
		||||
GCC_PATH_CACHE = os.path.join(ENV_BUILD_PATH, ".gcc_path")
 | 
			
		||||
def search_compiler():
 | 
			
		||||
	try:
 | 
			
		||||
		filepath = env.GetProjectOption('custom_gcc')
 | 
			
		||||
		blab("Getting compiler from env")
 | 
			
		||||
		return filepath
 | 
			
		||||
	except:
 | 
			
		||||
		pass
 | 
			
		||||
 | 
			
		||||
	if os.path.exists(GCC_PATH_CACHE):
 | 
			
		||||
		blab("Getting g++ path from cache")
 | 
			
		||||
		with open(GCC_PATH_CACHE, 'r') as f:
 | 
			
		||||
			return f.read()
 | 
			
		||||
 | 
			
		||||
	# Find the current platform compiler by searching the $PATH
 | 
			
		||||
	# which will be in a platformio toolchain bin folder
 | 
			
		||||
	path_regex = re.escape(env['PROJECT_PACKAGES_DIR'])
 | 
			
		||||
	gcc = "g++"
 | 
			
		||||
	if env['PLATFORM'] == 'win32':
 | 
			
		||||
		path_separator = ';'
 | 
			
		||||
		path_regex += r'.*\\bin'
 | 
			
		||||
		gcc += ".exe"
 | 
			
		||||
	else:
 | 
			
		||||
		path_separator = ':'
 | 
			
		||||
		path_regex += r'/.+/bin'
 | 
			
		||||
 | 
			
		||||
	# Search for the compiler
 | 
			
		||||
	for pathdir in env['ENV']['PATH'].split(path_separator):
 | 
			
		||||
		if not re.search(path_regex, pathdir, re.IGNORECASE):
 | 
			
		||||
			continue
 | 
			
		||||
		for filepath in os.listdir(pathdir):
 | 
			
		||||
			if not filepath.endswith(gcc):
 | 
			
		||||
				continue
 | 
			
		||||
			# Use entire path to not rely on env PATH
 | 
			
		||||
			filepath = os.path.sep.join([pathdir, filepath])
 | 
			
		||||
			# Cache the g++ path to no search always
 | 
			
		||||
			if os.path.exists(ENV_BUILD_PATH):
 | 
			
		||||
				blab("Caching g++ for current env")
 | 
			
		||||
				with open(GCC_PATH_CACHE, 'w+') as f:
 | 
			
		||||
					f.write(filepath)
 | 
			
		||||
 | 
			
		||||
			return filepath
 | 
			
		||||
 | 
			
		||||
	filepath = env.get('CXX')
 | 
			
		||||
	blab("Couldn't find a compiler! Fallback to %s" % filepath)
 | 
			
		||||
	return filepath
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Use the compiler to get a list of all enabled features
 | 
			
		||||
#
 | 
			
		||||
def load_marlin_features():
 | 
			
		||||
	if 'MARLIN_FEATURES' in env:
 | 
			
		||||
		return
 | 
			
		||||
 | 
			
		||||
	# Process defines
 | 
			
		||||
	build_flags = env.get('BUILD_FLAGS')
 | 
			
		||||
	build_flags = env.ParseFlagsExtended(build_flags)
 | 
			
		||||
 | 
			
		||||
	cxx = search_compiler()
 | 
			
		||||
	cmd = ['"' + cxx + '"']
 | 
			
		||||
 | 
			
		||||
	# Build flags from board.json
 | 
			
		||||
	#if 'BOARD' in env:
 | 
			
		||||
	#	cmd += [env.BoardConfig().get("build.extra_flags")]
 | 
			
		||||
	for s in build_flags['CPPDEFINES']:
 | 
			
		||||
		if isinstance(s, tuple):
 | 
			
		||||
			cmd += ['-D' + s[0] + '=' + str(s[1])]
 | 
			
		||||
		else:
 | 
			
		||||
			cmd += ['-D' + s]
 | 
			
		||||
 | 
			
		||||
	cmd += ['-D__MARLIN_DEPS__ -w -dM -E -x c++ buildroot/share/PlatformIO/scripts/common-dependencies.h']
 | 
			
		||||
	cmd = ' '.join(cmd)
 | 
			
		||||
	blab(cmd)
 | 
			
		||||
	define_list = subprocess.check_output(cmd, shell=True).splitlines()
 | 
			
		||||
	marlin_features = {}
 | 
			
		||||
	for define in define_list:
 | 
			
		||||
		feature = define[8:].strip().decode().split(' ')
 | 
			
		||||
		feature, definition = feature[0], ' '.join(feature[1:])
 | 
			
		||||
		marlin_features[feature] = definition
 | 
			
		||||
	env['MARLIN_FEATURES'] = marlin_features
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Return True if a matching feature is enabled
 | 
			
		||||
#
 | 
			
		||||
def MarlinFeatureIsEnabled(env, feature):
 | 
			
		||||
	load_marlin_features()
 | 
			
		||||
	r = re.compile('^' + feature + '$')
 | 
			
		||||
	found = list(filter(r.match, env['MARLIN_FEATURES']))
 | 
			
		||||
 | 
			
		||||
	# Defines could still be 'false' or '0', so check
 | 
			
		||||
	some_on = False
 | 
			
		||||
	if len(found):
 | 
			
		||||
		for f in found:
 | 
			
		||||
			val = env['MARLIN_FEATURES'][f]
 | 
			
		||||
			if val in [ '', '1', 'true' ]:
 | 
			
		||||
				some_on = True
 | 
			
		||||
			elif val in env['MARLIN_FEATURES']:
 | 
			
		||||
				some_on = env.MarlinFeatureIsEnabled(val)
 | 
			
		||||
 | 
			
		||||
	return some_on
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Check for Configfiles in two common incorrect places
 | 
			
		||||
#
 | 
			
		||||
def check_configfile_locations():
 | 
			
		||||
	for p in [ env['PROJECT_DIR'], os.path.join(env['PROJECT_DIR'], "config") ]:
 | 
			
		||||
		for f in [ "Configuration.h", "Configuration_adv.h" ]:
 | 
			
		||||
			if os.path.isfile(os.path.join(p, f)):
 | 
			
		||||
				err = 'ERROR: Config files found in directory ' + str(p) + '. Please move them into the Marlin subdirectory.'
 | 
			
		||||
				raise SystemExit(err)
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Add a method for other PIO scripts to query enabled features
 | 
			
		||||
#
 | 
			
		||||
env.AddMethod(MarlinFeatureIsEnabled)
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Add dependencies for enabled Marlin features
 | 
			
		||||
#
 | 
			
		||||
check_configfile_locations()
 | 
			
		||||
apply_features_config()
 | 
			
		||||
force_ignore_unused_libs()
 | 
			
		||||
@@ -0,0 +1,58 @@
 | 
			
		||||
import os,shutil
 | 
			
		||||
from SCons.Script import DefaultEnvironment
 | 
			
		||||
from platformio import util
 | 
			
		||||
try:
 | 
			
		||||
    # PIO < 4.4
 | 
			
		||||
    from platformio.managers.package import PackageManager
 | 
			
		||||
except ImportError:
 | 
			
		||||
    # PIO >= 4.4
 | 
			
		||||
    from platformio.package.meta import PackageSpec as PackageManager
 | 
			
		||||
 | 
			
		||||
def parse_pkg_uri(spec):
 | 
			
		||||
    if PackageManager.__name__ == 'PackageSpec':
 | 
			
		||||
        return PackageManager(spec).name
 | 
			
		||||
    else:
 | 
			
		||||
        name, _, _ = PackageManager.parse_pkg_uri(spec)
 | 
			
		||||
        return name
 | 
			
		||||
 | 
			
		||||
def copytree(src, dst, symlinks=False, ignore=None):
 | 
			
		||||
    for item in os.listdir(src):
 | 
			
		||||
        s = os.path.join(src, item)
 | 
			
		||||
        d = os.path.join(dst, item)
 | 
			
		||||
        if os.path.isdir(s):
 | 
			
		||||
            shutil.copytree(s, d, symlinks, ignore)
 | 
			
		||||
        else:
 | 
			
		||||
            shutil.copy2(s, d)
 | 
			
		||||
 | 
			
		||||
env = DefaultEnvironment()
 | 
			
		||||
platform = env.PioPlatform()
 | 
			
		||||
board = env.BoardConfig()
 | 
			
		||||
variant = board.get("build.variant")
 | 
			
		||||
 | 
			
		||||
platform_packages = env.GetProjectOption('platform_packages')
 | 
			
		||||
# if there's no framework defined, take it from the class name of platform
 | 
			
		||||
framewords = {
 | 
			
		||||
    "Ststm32Platform": "framework-arduinoststm32",
 | 
			
		||||
    "AtmelavrPlatform": "framework-arduino-avr"
 | 
			
		||||
}
 | 
			
		||||
if len(platform_packages) == 0:
 | 
			
		||||
    platform_name = framewords[platform.__class__.__name__]
 | 
			
		||||
else:
 | 
			
		||||
    platform_name = parse_pkg_uri(platform_packages[0])
 | 
			
		||||
 | 
			
		||||
FRAMEWORK_DIR = platform.get_package_dir(platform_name)
 | 
			
		||||
assert os.path.isdir(FRAMEWORK_DIR)
 | 
			
		||||
assert os.path.isdir("buildroot/share/PlatformIO/variants")
 | 
			
		||||
 | 
			
		||||
variant_dir = os.path.join(FRAMEWORK_DIR, "variants", variant)
 | 
			
		||||
 | 
			
		||||
source_dir = os.path.join("buildroot/share/PlatformIO/variants", variant)
 | 
			
		||||
assert os.path.isdir(source_dir)
 | 
			
		||||
 | 
			
		||||
if os.path.isdir(variant_dir):
 | 
			
		||||
    shutil.rmtree(variant_dir)
 | 
			
		||||
 | 
			
		||||
if not os.path.isdir(variant_dir):
 | 
			
		||||
    os.mkdir(variant_dir)
 | 
			
		||||
 | 
			
		||||
copytree(source_dir, variant_dir)
 | 
			
		||||
							
								
								
									
										17
									
								
								buildroot/share/PlatformIO/scripts/creality.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								buildroot/share/PlatformIO/scripts/creality.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
import os
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
# Relocate firmware from 0x08000000 to 0x08007000
 | 
			
		||||
for define in env['CPPDEFINES']:
 | 
			
		||||
    if define[0] == "VECT_TAB_ADDR":
 | 
			
		||||
        env['CPPDEFINES'].remove(define)
 | 
			
		||||
 | 
			
		||||
env['CPPDEFINES'].append(("VECT_TAB_ADDR", "0x08007000"))
 | 
			
		||||
 | 
			
		||||
custom_ld_script = os.path.abspath("buildroot/share/PlatformIO/ldscripts/creality.ld")
 | 
			
		||||
 | 
			
		||||
for i, flag in enumerate(env['LINKFLAGS']):
 | 
			
		||||
    if "-Wl,-T" in flag:
 | 
			
		||||
        env['LINKFLAGS'][i] = "-Wl,-T" + custom_ld_script
 | 
			
		||||
    elif flag == "-T":
 | 
			
		||||
        env['LINKFLAGS'][i + 1] = custom_ld_script
 | 
			
		||||
							
								
								
									
										46
									
								
								buildroot/share/PlatformIO/scripts/download_mks_assets.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								buildroot/share/PlatformIO/scripts/download_mks_assets.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
Import("env")
 | 
			
		||||
import os
 | 
			
		||||
import requests
 | 
			
		||||
import zipfile
 | 
			
		||||
import tempfile
 | 
			
		||||
import shutil
 | 
			
		||||
 | 
			
		||||
url = "https://github.com/makerbase-mks/Mks-Robin-Nano-Marlin2.0-Firmware/archive/master.zip"
 | 
			
		||||
zip_path = os.path.join(env.Dictionary("PROJECT_LIBDEPS_DIR"), "mks-assets.zip")
 | 
			
		||||
assets_path = os.path.join(env.Dictionary("PROJECT_BUILD_DIR"), env.Dictionary("PIOENV"), "assets")
 | 
			
		||||
 | 
			
		||||
def download_mks_assets():
 | 
			
		||||
	print("Downloading MKS Assets")
 | 
			
		||||
	r = requests.get(url, stream=True)
 | 
			
		||||
	# the user may have a very clean workspace,
 | 
			
		||||
	# so create the PROJECT_LIBDEPS_DIR directory if not exits
 | 
			
		||||
	if os.path.exists(env.Dictionary("PROJECT_LIBDEPS_DIR")) == False:
 | 
			
		||||
		os.mkdir(env.Dictionary("PROJECT_LIBDEPS_DIR"))
 | 
			
		||||
	with open(zip_path, 'wb') as fd:
 | 
			
		||||
		for chunk in r.iter_content(chunk_size=128):
 | 
			
		||||
			fd.write(chunk)
 | 
			
		||||
 | 
			
		||||
def copy_mks_assets():
 | 
			
		||||
	print("Copying MKS Assets")
 | 
			
		||||
	output_path = tempfile.mkdtemp()
 | 
			
		||||
	zip_obj = zipfile.ZipFile(zip_path, 'r')
 | 
			
		||||
	zip_obj.extractall(output_path)
 | 
			
		||||
	zip_obj.close()
 | 
			
		||||
	if os.path.exists(assets_path) == True and os.path.isdir(assets_path) == False:
 | 
			
		||||
		os.unlink(assets_path)
 | 
			
		||||
	if os.path.exists(assets_path) == False:
 | 
			
		||||
		os.mkdir(assets_path)
 | 
			
		||||
	base_path = ''
 | 
			
		||||
	for filename in os.listdir(output_path):
 | 
			
		||||
		base_path = filename
 | 
			
		||||
	for filename in os.listdir(os.path.join(output_path, base_path, 'Firmware', 'mks_font')):
 | 
			
		||||
		shutil.copy(os.path.join(output_path, base_path, 'Firmware', 'mks_font', filename), assets_path)
 | 
			
		||||
	for filename in os.listdir(os.path.join(output_path, base_path, 'Firmware', 'mks_pic')):
 | 
			
		||||
		shutil.copy(os.path.join(output_path, base_path, 'Firmware', 'mks_pic', filename), assets_path)
 | 
			
		||||
	shutil.rmtree(output_path, ignore_errors=True)
 | 
			
		||||
 | 
			
		||||
if os.path.exists(zip_path) == False:
 | 
			
		||||
	download_mks_assets()
 | 
			
		||||
 | 
			
		||||
if os.path.exists(assets_path) == False:
 | 
			
		||||
	copy_mks_assets()
 | 
			
		||||
							
								
								
									
										16
									
								
								buildroot/share/PlatformIO/scripts/fly_mini.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								buildroot/share/PlatformIO/scripts/fly_mini.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
import os
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
# Relocate firmware from 0x08000000 to 0x08005000
 | 
			
		||||
for define in env['CPPDEFINES']:
 | 
			
		||||
    if define[0] == "VECT_TAB_ADDR":
 | 
			
		||||
        env['CPPDEFINES'].remove(define)
 | 
			
		||||
env['CPPDEFINES'].append(("VECT_TAB_ADDR", "0x08005000"))
 | 
			
		||||
 | 
			
		||||
custom_ld_script = os.path.abspath("buildroot/share/PlatformIO/ldscripts/fly_mini.ld")
 | 
			
		||||
for i, flag in enumerate(env["LINKFLAGS"]):
 | 
			
		||||
    if "-Wl,-T" in flag:
 | 
			
		||||
        env["LINKFLAGS"][i] = "-Wl,-T" + custom_ld_script
 | 
			
		||||
    elif flag == "-T":
 | 
			
		||||
        env["LINKFLAGS"][i + 1] = custom_ld_script
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										9
									
								
								buildroot/share/PlatformIO/scripts/fysetc_cheetah_v20.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								buildroot/share/PlatformIO/scripts/fysetc_cheetah_v20.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
import os
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
custom_ld_script = os.path.abspath("buildroot/share/PlatformIO/variants/FYSETC_CHEETAH_V20/ldscript.ld")
 | 
			
		||||
for i, flag in enumerate(env["LINKFLAGS"]):
 | 
			
		||||
    if "-Wl,-T" in flag:
 | 
			
		||||
        env["LINKFLAGS"][i] = "-Wl,-T" + custom_ld_script
 | 
			
		||||
    elif flag == "-T":
 | 
			
		||||
        env["LINKFLAGS"][i + 1] = custom_ld_script
 | 
			
		||||
							
								
								
									
										27
									
								
								buildroot/share/PlatformIO/scripts/generic_create_variant.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								buildroot/share/PlatformIO/scripts/generic_create_variant.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
import os,shutil
 | 
			
		||||
from SCons.Script import DefaultEnvironment
 | 
			
		||||
from platformio import util
 | 
			
		||||
 | 
			
		||||
env = DefaultEnvironment()
 | 
			
		||||
platform = env.PioPlatform()
 | 
			
		||||
board = env.BoardConfig()
 | 
			
		||||
 | 
			
		||||
FRAMEWORK_DIR = platform.get_package_dir("framework-arduinoststm32")
 | 
			
		||||
assert os.path.isdir(FRAMEWORK_DIR)
 | 
			
		||||
assert os.path.isdir("buildroot/share/PlatformIO/variants")
 | 
			
		||||
 | 
			
		||||
mcu_type = board.get("build.mcu")[:-2]
 | 
			
		||||
variant = board.get("build.variant")
 | 
			
		||||
series = mcu_type[:7].upper() + "xx"
 | 
			
		||||
variant_dir = os.path.join(FRAMEWORK_DIR, "variants", variant)
 | 
			
		||||
 | 
			
		||||
source_dir = os.path.join("buildroot/share/PlatformIO/variants", variant)
 | 
			
		||||
assert os.path.isdir(source_dir)
 | 
			
		||||
 | 
			
		||||
if not os.path.isdir(variant_dir):
 | 
			
		||||
    os.mkdir(variant_dir)
 | 
			
		||||
 | 
			
		||||
for file_name in os.listdir(source_dir):
 | 
			
		||||
    full_file_name = os.path.join(source_dir, file_name)
 | 
			
		||||
    if os.path.isfile(full_file_name):
 | 
			
		||||
        shutil.copy(full_file_name, variant_dir)
 | 
			
		||||
@@ -0,0 +1,48 @@
 | 
			
		||||
import os
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
# Relocate firmware from 0x08000000 to 0x0800A000
 | 
			
		||||
env['CPPDEFINES'].remove(("VECT_TAB_ADDR", "0x8000000"))
 | 
			
		||||
#alternatively, for STSTM <=5.1.0 use line below
 | 
			
		||||
#env['CPPDEFINES'].remove(("VECT_TAB_ADDR", 134217728))
 | 
			
		||||
env['CPPDEFINES'].append(("VECT_TAB_ADDR", "0x0800A000"))
 | 
			
		||||
 | 
			
		||||
custom_ld_script = os.path.abspath("buildroot/share/PlatformIO/ldscripts/jgaurora_a5s_a1.ld")
 | 
			
		||||
for i, flag in enumerate(env["LINKFLAGS"]):
 | 
			
		||||
    if "-Wl,-T" in flag:
 | 
			
		||||
        env["LINKFLAGS"][i] = "-Wl,-T" + custom_ld_script
 | 
			
		||||
    elif flag == "-T":
 | 
			
		||||
        env["LINKFLAGS"][i + 1] = custom_ld_script
 | 
			
		||||
 | 
			
		||||
#append ${PROGNAME}.bin firmware after bootloader and save it as 'jgaurora_firmware.bin'
 | 
			
		||||
def addboot(source,target,env):
 | 
			
		||||
	firmware = open(target[0].path, "rb")
 | 
			
		||||
	lengthfirmware = os.path.getsize(target[0].path)
 | 
			
		||||
	bootloader_dir = "buildroot/share/PlatformIO/scripts/jgaurora_bootloader.bin"
 | 
			
		||||
	bootloader = open(bootloader_dir, "rb")
 | 
			
		||||
	lengthbootloader = os.path.getsize(bootloader_dir)
 | 
			
		||||
	firmware_with_boothloader_dir = target[0].dir.path +'/firmware_with_bootloader.bin'
 | 
			
		||||
	if os.path.exists(firmware_with_boothloader_dir):
 | 
			
		||||
		os.remove(firmware_with_boothloader_dir)
 | 
			
		||||
	firmwareimage = open(firmware_with_boothloader_dir, "wb")
 | 
			
		||||
	position = 0
 | 
			
		||||
	while position < lengthbootloader:
 | 
			
		||||
		byte = bootloader.read(1)
 | 
			
		||||
		firmwareimage.write(byte)
 | 
			
		||||
		position += 1
 | 
			
		||||
	position = 0
 | 
			
		||||
	while position < lengthfirmware:
 | 
			
		||||
		byte = firmware.read(1)
 | 
			
		||||
		firmwareimage.write(byte)
 | 
			
		||||
		position += 1
 | 
			
		||||
	bootloader.close()
 | 
			
		||||
	firmware.close()
 | 
			
		||||
	firmwareimage.close()
 | 
			
		||||
	firmware_without_bootloader_dir = target[0].dir.path+'/firmware_for_sd_upload.bin'
 | 
			
		||||
	if os.path.exists(firmware_without_bootloader_dir):
 | 
			
		||||
		os.remove(firmware_without_bootloader_dir)
 | 
			
		||||
	os.rename(target[0].path, firmware_without_bootloader_dir)
 | 
			
		||||
	#os.rename(target[0].dir.path+'/firmware_with_bootloader.bin', target[0].dir.path+'/firmware.bin')
 | 
			
		||||
 | 
			
		||||
env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", addboot);
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								buildroot/share/PlatformIO/scripts/jgaurora_bootloader.bin
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								buildroot/share/PlatformIO/scripts/jgaurora_bootloader.bin
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										46
									
								
								buildroot/share/PlatformIO/scripts/lerdge.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								buildroot/share/PlatformIO/scripts/lerdge.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
import os,sys
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
from SCons.Script import DefaultEnvironment
 | 
			
		||||
board = DefaultEnvironment().BoardConfig()
 | 
			
		||||
 | 
			
		||||
custom_ld_script = os.path.abspath("buildroot/share/PlatformIO/ldscripts/lerdge.ld")
 | 
			
		||||
for i, flag in enumerate(env["LINKFLAGS"]):
 | 
			
		||||
    if "-Wl,-T" in flag:
 | 
			
		||||
        env["LINKFLAGS"][i] = "-Wl,-T" + custom_ld_script
 | 
			
		||||
    elif flag == "-T":
 | 
			
		||||
        env["LINKFLAGS"][i + 1] = custom_ld_script
 | 
			
		||||
 | 
			
		||||
def encryptByte(byte):
 | 
			
		||||
    byte = 0xFF & ((byte << 6) | (byte >> 2))
 | 
			
		||||
    i = 0x58 + byte
 | 
			
		||||
    j = 0x05 + byte + (i >> 8)
 | 
			
		||||
    byte = (0xF8 & i) | (0x07 & j)
 | 
			
		||||
    return byte
 | 
			
		||||
 | 
			
		||||
def encrypt_file(input, output_file, file_length):
 | 
			
		||||
    input_file = bytearray(input.read())
 | 
			
		||||
    for i in range(len(input_file)):
 | 
			
		||||
        result = encryptByte(input_file[i])
 | 
			
		||||
        input_file[i] = result
 | 
			
		||||
 | 
			
		||||
    output_file.write(input_file)
 | 
			
		||||
    return
 | 
			
		||||
 | 
			
		||||
# Encrypt ${PROGNAME}.bin and save it as build.firmware
 | 
			
		||||
def encrypt(source, target, env):
 | 
			
		||||
    print("Encrypting to:", board.get("build.firmware"))
 | 
			
		||||
    firmware = open(target[0].path, "rb")
 | 
			
		||||
    result = open(target[0].dir.path + "/" + board.get("build.firmware"), "wb")
 | 
			
		||||
    length = os.path.getsize(target[0].path)
 | 
			
		||||
 | 
			
		||||
    encrypt_file(firmware, result, length)
 | 
			
		||||
 | 
			
		||||
    firmware.close()
 | 
			
		||||
    result.close()
 | 
			
		||||
 | 
			
		||||
if 'firmware' in board.get("build").keys():
 | 
			
		||||
  env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", encrypt);
 | 
			
		||||
else:
 | 
			
		||||
  print("You need to define output file via board_build.firmware = 'filename' parameter")
 | 
			
		||||
  exit(1);
 | 
			
		||||
							
								
								
									
										32
									
								
								buildroot/share/PlatformIO/scripts/mks_encrypt.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								buildroot/share/PlatformIO/scripts/mks_encrypt.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
import os,sys
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
from SCons.Script import DefaultEnvironment
 | 
			
		||||
board = DefaultEnvironment().BoardConfig()
 | 
			
		||||
 | 
			
		||||
# Encrypt ${PROGNAME}.bin and save it as build.firmware ('Robin.bin')
 | 
			
		||||
def encrypt(source, target, env):
 | 
			
		||||
  key = [0xA3, 0xBD, 0xAD, 0x0D, 0x41, 0x11, 0xBB, 0x8D, 0xDC, 0x80, 0x2D, 0xD0, 0xD2, 0xC4, 0x9B, 0x1E, 0x26, 0xEB, 0xE3, 0x33, 0x4A, 0x15, 0xE4, 0x0A, 0xB3, 0xB1, 0x3C, 0x93, 0xBB, 0xAF, 0xF7, 0x3E]
 | 
			
		||||
 | 
			
		||||
  firmware = open(target[0].path, "rb")
 | 
			
		||||
  robin = open(target[0].dir.path +'/'+ board.get("build.firmware"), "wb")
 | 
			
		||||
  length = os.path.getsize(target[0].path)
 | 
			
		||||
  position = 0
 | 
			
		||||
  try:
 | 
			
		||||
    while position < length:
 | 
			
		||||
      byte = firmware.read(1)
 | 
			
		||||
      if position >= 320 and position < 31040:
 | 
			
		||||
        byte = chr(ord(byte) ^ key[position & 31])
 | 
			
		||||
        if sys.version_info[0] > 2:
 | 
			
		||||
          byte = bytes(byte, 'latin1')
 | 
			
		||||
      robin.write(byte)
 | 
			
		||||
      position += 1
 | 
			
		||||
  finally:
 | 
			
		||||
    firmware.close()
 | 
			
		||||
    robin.close()
 | 
			
		||||
 | 
			
		||||
if 'firmware' in board.get("build").keys():
 | 
			
		||||
  env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", encrypt);
 | 
			
		||||
else:
 | 
			
		||||
  print("You need to define output file via board_build.firmware = 'filename' parameter", file=sys.stderr)
 | 
			
		||||
  exit(1);
 | 
			
		||||
							
								
								
									
										39
									
								
								buildroot/share/PlatformIO/scripts/mks_robin.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								buildroot/share/PlatformIO/scripts/mks_robin.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
import os
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
# Relocate firmware from 0x08000000 to 0x08007000
 | 
			
		||||
for define in env['CPPDEFINES']:
 | 
			
		||||
    if define[0] == "VECT_TAB_ADDR":
 | 
			
		||||
        env['CPPDEFINES'].remove(define)
 | 
			
		||||
env['CPPDEFINES'].append(("VECT_TAB_ADDR", "0x08007000"))
 | 
			
		||||
 | 
			
		||||
custom_ld_script = os.path.abspath("buildroot/share/PlatformIO/ldscripts/mks_robin.ld")
 | 
			
		||||
for i, flag in enumerate(env["LINKFLAGS"]):
 | 
			
		||||
    if "-Wl,-T" in flag:
 | 
			
		||||
        env["LINKFLAGS"][i] = "-Wl,-T" + custom_ld_script
 | 
			
		||||
    elif flag == "-T":
 | 
			
		||||
        env["LINKFLAGS"][i + 1] = custom_ld_script
 | 
			
		||||
 | 
			
		||||
# Encrypt ${PROGNAME}.bin and save it as 'Robin.bin'
 | 
			
		||||
def encrypt(source, target, env):
 | 
			
		||||
    import sys
 | 
			
		||||
 | 
			
		||||
    key = [0xA3, 0xBD, 0xAD, 0x0D, 0x41, 0x11, 0xBB, 0x8D, 0xDC, 0x80, 0x2D, 0xD0, 0xD2, 0xC4, 0x9B, 0x1E, 0x26, 0xEB, 0xE3, 0x33, 0x4A, 0x15, 0xE4, 0x0A, 0xB3, 0xB1, 0x3C, 0x93, 0xBB, 0xAF, 0xF7, 0x3E]
 | 
			
		||||
 | 
			
		||||
    firmware = open(target[0].path, "rb")
 | 
			
		||||
    robin = open(target[0].dir.path +'/Robin.bin', "wb")
 | 
			
		||||
    length = os.path.getsize(target[0].path)
 | 
			
		||||
    position = 0
 | 
			
		||||
    try:
 | 
			
		||||
        while position < length:
 | 
			
		||||
            byte = firmware.read(1)
 | 
			
		||||
            if position >= 320 and position < 31040:
 | 
			
		||||
                byte = chr(ord(byte) ^ key[position & 31])
 | 
			
		||||
                if sys.version_info[0] > 2:
 | 
			
		||||
                    byte = bytes(byte, 'latin1')
 | 
			
		||||
            robin.write(byte)
 | 
			
		||||
            position += 1
 | 
			
		||||
    finally:
 | 
			
		||||
        firmware.close()
 | 
			
		||||
        robin.close()
 | 
			
		||||
env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", encrypt);
 | 
			
		||||
							
								
								
									
										40
									
								
								buildroot/share/PlatformIO/scripts/mks_robin_e3.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								buildroot/share/PlatformIO/scripts/mks_robin_e3.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
import os
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
# Relocate firmware from 0x08000000 to 0x08005000
 | 
			
		||||
for define in env['CPPDEFINES']:
 | 
			
		||||
    if define[0] == "VECT_TAB_ADDR":
 | 
			
		||||
        env['CPPDEFINES'].remove(define)
 | 
			
		||||
env['CPPDEFINES'].append(("VECT_TAB_ADDR", "0x08005000"))
 | 
			
		||||
 | 
			
		||||
custom_ld_script = os.path.abspath("buildroot/share/PlatformIO/ldscripts/mks_robin_e3.ld")
 | 
			
		||||
for i, flag in enumerate(env["LINKFLAGS"]):
 | 
			
		||||
    if "-Wl,-T" in flag:
 | 
			
		||||
        env["LINKFLAGS"][i] = "-Wl,-T" + custom_ld_script
 | 
			
		||||
    elif flag == "-T":
 | 
			
		||||
        env["LINKFLAGS"][i + 1] = custom_ld_script
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Encrypt ${PROGNAME}.bin and save it as 'mksLite.bin'
 | 
			
		||||
def encrypt(source, target, env):
 | 
			
		||||
    import sys
 | 
			
		||||
 | 
			
		||||
    key = [0xA3, 0xBD, 0xAD, 0x0D, 0x41, 0x11, 0xBB, 0x8D, 0xDC, 0x80, 0x2D, 0xD0, 0xD2, 0xC4, 0x9B, 0x1E, 0x26, 0xEB, 0xE3, 0x33, 0x4A, 0x15, 0xE4, 0x0A, 0xB3, 0xB1, 0x3C, 0x93, 0xBB, 0xAF, 0xF7, 0x3E]
 | 
			
		||||
 | 
			
		||||
    firmware = open(target[0].path, "rb")
 | 
			
		||||
    robin = open(target[0].dir.path +'/Robin_e3.bin', "wb")
 | 
			
		||||
    length = os.path.getsize(target[0].path)
 | 
			
		||||
    position = 0
 | 
			
		||||
    try:
 | 
			
		||||
        while position < length:
 | 
			
		||||
            byte = firmware.read(1)
 | 
			
		||||
            if position >= 320 and position < 31040:
 | 
			
		||||
                byte = chr(ord(byte) ^ key[position & 31])
 | 
			
		||||
                if sys.version_info[0] > 2:
 | 
			
		||||
                    byte = bytes(byte, 'latin1')
 | 
			
		||||
            robin.write(byte)
 | 
			
		||||
            position += 1
 | 
			
		||||
    finally:
 | 
			
		||||
        firmware.close()
 | 
			
		||||
        robin.close()
 | 
			
		||||
env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", encrypt);
 | 
			
		||||
							
								
								
									
										40
									
								
								buildroot/share/PlatformIO/scripts/mks_robin_e3p.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								buildroot/share/PlatformIO/scripts/mks_robin_e3p.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
import os
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
# Relocate firmware from 0x08000000 to 0x08007000
 | 
			
		||||
for define in env['CPPDEFINES']:
 | 
			
		||||
    if define[0] == "VECT_TAB_ADDR":
 | 
			
		||||
        env['CPPDEFINES'].remove(define)
 | 
			
		||||
env['CPPDEFINES'].append(("VECT_TAB_ADDR", "0x08007000"))
 | 
			
		||||
 | 
			
		||||
custom_ld_script = os.path.abspath("buildroot/share/PlatformIO/ldscripts/mks_robin_e3p.ld")
 | 
			
		||||
for i, flag in enumerate(env["LINKFLAGS"]):
 | 
			
		||||
    if "-Wl,-T" in flag:
 | 
			
		||||
        env["LINKFLAGS"][i] = "-Wl,-T" + custom_ld_script
 | 
			
		||||
    elif flag == "-T":
 | 
			
		||||
        env["LINKFLAGS"][i + 1] = custom_ld_script
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Encrypt ${PROGNAME}.bin and save it as 'mks_robin_e3p.bin'
 | 
			
		||||
def encrypt(source, target, env):
 | 
			
		||||
    import sys
 | 
			
		||||
 | 
			
		||||
    key = [0xA3, 0xBD, 0xAD, 0x0D, 0x41, 0x11, 0xBB, 0x8D, 0xDC, 0x80, 0x2D, 0xD0, 0xD2, 0xC4, 0x9B, 0x1E, 0x26, 0xEB, 0xE3, 0x33, 0x4A, 0x15, 0xE4, 0x0A, 0xB3, 0xB1, 0x3C, 0x93, 0xBB, 0xAF, 0xF7, 0x3E]
 | 
			
		||||
 | 
			
		||||
    firmware = open(target[0].path, "rb")
 | 
			
		||||
    robin = open(target[0].dir.path +'/Robin_e3p.bin', "wb")
 | 
			
		||||
    length = os.path.getsize(target[0].path)
 | 
			
		||||
    position = 0
 | 
			
		||||
    try:
 | 
			
		||||
        while position < length:
 | 
			
		||||
            byte = firmware.read(1)
 | 
			
		||||
            if position >= 320 and position < 31040:
 | 
			
		||||
                byte = chr(ord(byte) ^ key[position & 31])
 | 
			
		||||
                if sys.version_info[0] > 2:
 | 
			
		||||
                    byte = bytes(byte, 'latin1')
 | 
			
		||||
            robin.write(byte)
 | 
			
		||||
            position += 1
 | 
			
		||||
    finally:
 | 
			
		||||
        firmware.close()
 | 
			
		||||
        robin.close()
 | 
			
		||||
env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", encrypt);
 | 
			
		||||
							
								
								
									
										40
									
								
								buildroot/share/PlatformIO/scripts/mks_robin_lite.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								buildroot/share/PlatformIO/scripts/mks_robin_lite.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
import os
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
# Relocate firmware from 0x08000000 to 0x08005000
 | 
			
		||||
for define in env['CPPDEFINES']:
 | 
			
		||||
    if define[0] == "VECT_TAB_ADDR":
 | 
			
		||||
        env['CPPDEFINES'].remove(define)
 | 
			
		||||
env['CPPDEFINES'].append(("VECT_TAB_ADDR", "0x08005000"))
 | 
			
		||||
 | 
			
		||||
custom_ld_script = os.path.abspath("buildroot/share/PlatformIO/ldscripts/mks_robin_lite.ld")
 | 
			
		||||
for i, flag in enumerate(env["LINKFLAGS"]):
 | 
			
		||||
    if "-Wl,-T" in flag:
 | 
			
		||||
        env["LINKFLAGS"][i] = "-Wl,-T" + custom_ld_script
 | 
			
		||||
    elif flag == "-T":
 | 
			
		||||
        env["LINKFLAGS"][i + 1] = custom_ld_script
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Encrypt ${PROGNAME}.bin and save it as 'mksLite.bin'
 | 
			
		||||
def encrypt(source, target, env):
 | 
			
		||||
    import sys
 | 
			
		||||
 | 
			
		||||
    key = [0xA3, 0xBD, 0xAD, 0x0D, 0x41, 0x11, 0xBB, 0x8D, 0xDC, 0x80, 0x2D, 0xD0, 0xD2, 0xC4, 0x9B, 0x1E, 0x26, 0xEB, 0xE3, 0x33, 0x4A, 0x15, 0xE4, 0x0A, 0xB3, 0xB1, 0x3C, 0x93, 0xBB, 0xAF, 0xF7, 0x3E]
 | 
			
		||||
 | 
			
		||||
    firmware = open(target[0].path, "rb")
 | 
			
		||||
    robin = open(target[0].dir.path +'/mksLite.bin', "wb")
 | 
			
		||||
    length = os.path.getsize(target[0].path)
 | 
			
		||||
    position = 0
 | 
			
		||||
    try:
 | 
			
		||||
        while position < length:
 | 
			
		||||
            byte = firmware.read(1)
 | 
			
		||||
            if position >= 320 and position < 31040:
 | 
			
		||||
                byte = chr(ord(byte) ^ key[position & 31])
 | 
			
		||||
                if sys.version_info[0] > 2:
 | 
			
		||||
                    byte = bytes(byte, 'latin1')
 | 
			
		||||
            robin.write(byte)
 | 
			
		||||
            position += 1
 | 
			
		||||
    finally:
 | 
			
		||||
        firmware.close()
 | 
			
		||||
        robin.close()
 | 
			
		||||
env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", encrypt);
 | 
			
		||||
							
								
								
									
										40
									
								
								buildroot/share/PlatformIO/scripts/mks_robin_lite3.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								buildroot/share/PlatformIO/scripts/mks_robin_lite3.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
import os
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
# Relocate firmware from 0x08000000 to 0x08005000
 | 
			
		||||
for define in env['CPPDEFINES']:
 | 
			
		||||
    if define[0] == "VECT_TAB_ADDR":
 | 
			
		||||
        env['CPPDEFINES'].remove(define)
 | 
			
		||||
env['CPPDEFINES'].append(("VECT_TAB_ADDR", "0x08005000"))
 | 
			
		||||
 | 
			
		||||
custom_ld_script = os.path.abspath("buildroot/share/PlatformIO/ldscripts/mks_robin_lite.ld")
 | 
			
		||||
for i, flag in enumerate(env["LINKFLAGS"]):
 | 
			
		||||
    if "-Wl,-T" in flag:
 | 
			
		||||
        env["LINKFLAGS"][i] = "-Wl,-T" + custom_ld_script
 | 
			
		||||
    elif flag == "-T":
 | 
			
		||||
        env["LINKFLAGS"][i + 1] = custom_ld_script
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Encrypt ${PROGNAME}.bin and save it as 'mksLite.bin'
 | 
			
		||||
def encrypt(source, target, env):
 | 
			
		||||
    import sys
 | 
			
		||||
 | 
			
		||||
    key = [0xA3, 0xBD, 0xAD, 0x0D, 0x41, 0x11, 0xBB, 0x8D, 0xDC, 0x80, 0x2D, 0xD0, 0xD2, 0xC4, 0x9B, 0x1E, 0x26, 0xEB, 0xE3, 0x33, 0x4A, 0x15, 0xE4, 0x0A, 0xB3, 0xB1, 0x3C, 0x93, 0xBB, 0xAF, 0xF7, 0x3E]
 | 
			
		||||
 | 
			
		||||
    firmware = open(target[0].path, "rb")
 | 
			
		||||
    robin = open(target[0].dir.path +'/mksLite3.bin', "wb")
 | 
			
		||||
    length = os.path.getsize(target[0].path)
 | 
			
		||||
    position = 0
 | 
			
		||||
    try:
 | 
			
		||||
        while position < length:
 | 
			
		||||
            byte = firmware.read(1)
 | 
			
		||||
            if position >= 320 and position < 31040:
 | 
			
		||||
                byte = chr(ord(byte) ^ key[position & 31])
 | 
			
		||||
                if sys.version_info[0] > 2:
 | 
			
		||||
                    byte = bytes(byte, 'latin1')
 | 
			
		||||
            robin.write(byte)
 | 
			
		||||
            position += 1
 | 
			
		||||
    finally:
 | 
			
		||||
        firmware.close()
 | 
			
		||||
        robin.close()
 | 
			
		||||
env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", encrypt);
 | 
			
		||||
							
								
								
									
										40
									
								
								buildroot/share/PlatformIO/scripts/mks_robin_mini.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								buildroot/share/PlatformIO/scripts/mks_robin_mini.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
import os
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
# Relocate firmware from 0x08000000 to 0x08007000
 | 
			
		||||
for define in env['CPPDEFINES']:
 | 
			
		||||
    if define[0] == "VECT_TAB_ADDR":
 | 
			
		||||
        env['CPPDEFINES'].remove(define)
 | 
			
		||||
env['CPPDEFINES'].append(("VECT_TAB_ADDR", "0x08007000"))
 | 
			
		||||
 | 
			
		||||
custom_ld_script = os.path.abspath("buildroot/share/PlatformIO/ldscripts/mks_robin_mini.ld")
 | 
			
		||||
for i, flag in enumerate(env["LINKFLAGS"]):
 | 
			
		||||
    if "-Wl,-T" in flag:
 | 
			
		||||
        env["LINKFLAGS"][i] = "-Wl,-T" + custom_ld_script
 | 
			
		||||
    elif flag == "-T":
 | 
			
		||||
        env["LINKFLAGS"][i + 1] = custom_ld_script
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Encrypt ${PROGNAME}.bin and save it as 'Robin_mini.bin'
 | 
			
		||||
def encrypt(source, target, env):
 | 
			
		||||
    import sys
 | 
			
		||||
 | 
			
		||||
    key = [0xA3, 0xBD, 0xAD, 0x0D, 0x41, 0x11, 0xBB, 0x8D, 0xDC, 0x80, 0x2D, 0xD0, 0xD2, 0xC4, 0x9B, 0x1E, 0x26, 0xEB, 0xE3, 0x33, 0x4A, 0x15, 0xE4, 0x0A, 0xB3, 0xB1, 0x3C, 0x93, 0xBB, 0xAF, 0xF7, 0x3E]
 | 
			
		||||
 | 
			
		||||
    firmware = open(target[0].path, "rb")
 | 
			
		||||
    robin = open(target[0].dir.path +'/Robin_mini.bin', "wb")
 | 
			
		||||
    length = os.path.getsize(target[0].path)
 | 
			
		||||
    position = 0
 | 
			
		||||
    try:
 | 
			
		||||
        while position < length:
 | 
			
		||||
            byte = firmware.read(1)
 | 
			
		||||
            if position >= 320 and position < 31040:
 | 
			
		||||
                byte = chr(ord(byte) ^ key[position & 31])
 | 
			
		||||
                if sys.version_info[0] > 2:
 | 
			
		||||
                    byte = bytes(byte, 'latin1')
 | 
			
		||||
            robin.write(byte)
 | 
			
		||||
            position += 1
 | 
			
		||||
    finally:
 | 
			
		||||
        firmware.close()
 | 
			
		||||
        robin.close()
 | 
			
		||||
env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", encrypt);
 | 
			
		||||
							
								
								
									
										40
									
								
								buildroot/share/PlatformIO/scripts/mks_robin_nano.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								buildroot/share/PlatformIO/scripts/mks_robin_nano.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
import os
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
# Relocate firmware from 0x08000000 to 0x08007000
 | 
			
		||||
for define in env['CPPDEFINES']:
 | 
			
		||||
    if define[0] == "VECT_TAB_ADDR":
 | 
			
		||||
        env['CPPDEFINES'].remove(define)
 | 
			
		||||
env['CPPDEFINES'].append(("VECT_TAB_ADDR", "0x08007000"))
 | 
			
		||||
 | 
			
		||||
custom_ld_script = os.path.abspath("buildroot/share/PlatformIO/ldscripts/mks_robin_nano.ld")
 | 
			
		||||
for i, flag in enumerate(env["LINKFLAGS"]):
 | 
			
		||||
    if "-Wl,-T" in flag:
 | 
			
		||||
        env["LINKFLAGS"][i] = "-Wl,-T" + custom_ld_script
 | 
			
		||||
    elif flag == "-T":
 | 
			
		||||
        env["LINKFLAGS"][i + 1] = custom_ld_script
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Encrypt ${PROGNAME}.bin and save it as 'Robin_nano.bin'
 | 
			
		||||
def encrypt(source, target, env):
 | 
			
		||||
    import sys
 | 
			
		||||
 | 
			
		||||
    key = [0xA3, 0xBD, 0xAD, 0x0D, 0x41, 0x11, 0xBB, 0x8D, 0xDC, 0x80, 0x2D, 0xD0, 0xD2, 0xC4, 0x9B, 0x1E, 0x26, 0xEB, 0xE3, 0x33, 0x4A, 0x15, 0xE4, 0x0A, 0xB3, 0xB1, 0x3C, 0x93, 0xBB, 0xAF, 0xF7, 0x3E]
 | 
			
		||||
 | 
			
		||||
    firmware = open(target[0].path, "rb")
 | 
			
		||||
    robin = open(target[0].dir.path +'/Robin_nano.bin', "wb")
 | 
			
		||||
    length = os.path.getsize(target[0].path)
 | 
			
		||||
    position = 0
 | 
			
		||||
    try:
 | 
			
		||||
        while position < length:
 | 
			
		||||
            byte = firmware.read(1)
 | 
			
		||||
            if position >= 320 and position < 31040:
 | 
			
		||||
                byte = chr(ord(byte) ^ key[position & 31])
 | 
			
		||||
                if sys.version_info[0] > 2:
 | 
			
		||||
                    byte = bytes(byte, 'latin1')
 | 
			
		||||
            robin.write(byte)
 | 
			
		||||
            position += 1
 | 
			
		||||
    finally:
 | 
			
		||||
        firmware.close()
 | 
			
		||||
        robin.close()
 | 
			
		||||
env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", encrypt);
 | 
			
		||||
							
								
								
									
										40
									
								
								buildroot/share/PlatformIO/scripts/mks_robin_nano35.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								buildroot/share/PlatformIO/scripts/mks_robin_nano35.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
import os
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
# Relocate firmware from 0x08000000 to 0x08007000
 | 
			
		||||
for define in env['CPPDEFINES']:
 | 
			
		||||
    if define[0] == "VECT_TAB_ADDR":
 | 
			
		||||
        env['CPPDEFINES'].remove(define)
 | 
			
		||||
env['CPPDEFINES'].append(("VECT_TAB_ADDR", "0x08007000"))
 | 
			
		||||
 | 
			
		||||
custom_ld_script = os.path.abspath("buildroot/share/PlatformIO/ldscripts/mks_robin_nano.ld")
 | 
			
		||||
for i, flag in enumerate(env["LINKFLAGS"]):
 | 
			
		||||
    if "-Wl,-T" in flag:
 | 
			
		||||
        env["LINKFLAGS"][i] = "-Wl,-T" + custom_ld_script
 | 
			
		||||
    elif flag == "-T":
 | 
			
		||||
        env["LINKFLAGS"][i + 1] = custom_ld_script
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Encrypt ${PROGNAME}.bin and save it as 'Robin_nano35.bin'
 | 
			
		||||
def encrypt(source, target, env):
 | 
			
		||||
    import sys
 | 
			
		||||
 | 
			
		||||
    key = [0xA3, 0xBD, 0xAD, 0x0D, 0x41, 0x11, 0xBB, 0x8D, 0xDC, 0x80, 0x2D, 0xD0, 0xD2, 0xC4, 0x9B, 0x1E, 0x26, 0xEB, 0xE3, 0x33, 0x4A, 0x15, 0xE4, 0x0A, 0xB3, 0xB1, 0x3C, 0x93, 0xBB, 0xAF, 0xF7, 0x3E]
 | 
			
		||||
 | 
			
		||||
    firmware = open(target[0].path, "rb")
 | 
			
		||||
    robin = open(target[0].dir.path +'/Robin_nano35.bin', "wb")
 | 
			
		||||
    length = os.path.getsize(target[0].path)
 | 
			
		||||
    position = 0
 | 
			
		||||
    try:
 | 
			
		||||
        while position < length:
 | 
			
		||||
            byte = firmware.read(1)
 | 
			
		||||
            if position >= 320 and position < 31040:
 | 
			
		||||
                byte = chr(ord(byte) ^ key[position & 31])
 | 
			
		||||
                if sys.version_info[0] > 2:
 | 
			
		||||
                    byte = bytes(byte, 'latin1')
 | 
			
		||||
            robin.write(byte)
 | 
			
		||||
            position += 1
 | 
			
		||||
    finally:
 | 
			
		||||
        firmware.close()
 | 
			
		||||
        robin.close()
 | 
			
		||||
env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", encrypt);
 | 
			
		||||
							
								
								
									
										39
									
								
								buildroot/share/PlatformIO/scripts/mks_robin_pro.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								buildroot/share/PlatformIO/scripts/mks_robin_pro.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
import os
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
# Relocate firmware from 0x08000000 to 0x08007000
 | 
			
		||||
for define in env['CPPDEFINES']:
 | 
			
		||||
    if define[0] == "VECT_TAB_ADDR":
 | 
			
		||||
        env['CPPDEFINES'].remove(define)
 | 
			
		||||
env['CPPDEFINES'].append(("VECT_TAB_ADDR", "0x08007000"))
 | 
			
		||||
 | 
			
		||||
custom_ld_script = os.path.abspath("buildroot/share/PlatformIO/ldscripts/mks_robin_pro.ld")
 | 
			
		||||
for i, flag in enumerate(env["LINKFLAGS"]):
 | 
			
		||||
    if "-Wl,-T" in flag:
 | 
			
		||||
        env["LINKFLAGS"][i] = "-Wl,-T" + custom_ld_script
 | 
			
		||||
    elif flag == "-T":
 | 
			
		||||
        env["LINKFLAGS"][i + 1] = custom_ld_script
 | 
			
		||||
 | 
			
		||||
# Encrypt ${PROGNAME}.bin and save it as 'Robin.bin'
 | 
			
		||||
def encrypt(source, target, env):
 | 
			
		||||
    import sys
 | 
			
		||||
 | 
			
		||||
    key = [0xA3, 0xBD, 0xAD, 0x0D, 0x41, 0x11, 0xBB, 0x8D, 0xDC, 0x80, 0x2D, 0xD0, 0xD2, 0xC4, 0x9B, 0x1E, 0x26, 0xEB, 0xE3, 0x33, 0x4A, 0x15, 0xE4, 0x0A, 0xB3, 0xB1, 0x3C, 0x93, 0xBB, 0xAF, 0xF7, 0x3E]
 | 
			
		||||
 | 
			
		||||
    firmware = open(target[0].path, "rb")
 | 
			
		||||
    robin = open(target[0].dir.path +'/Robin_pro.bin', "wb")
 | 
			
		||||
    length = os.path.getsize(target[0].path)
 | 
			
		||||
    position = 0
 | 
			
		||||
    try:
 | 
			
		||||
        while position < length:
 | 
			
		||||
            byte = firmware.read(1)
 | 
			
		||||
            if position >= 320 and position < 31040:
 | 
			
		||||
                byte = chr(ord(byte) ^ key[position & 31])
 | 
			
		||||
                if sys.version_info[0] > 2:
 | 
			
		||||
                    byte = bytes(byte, 'latin1')
 | 
			
		||||
            robin.write(byte)
 | 
			
		||||
            position += 1
 | 
			
		||||
    finally:
 | 
			
		||||
        firmware.close()
 | 
			
		||||
        robin.close()
 | 
			
		||||
env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", encrypt);
 | 
			
		||||
							
								
								
									
										5
									
								
								buildroot/share/PlatformIO/scripts/random-bin.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								buildroot/share/PlatformIO/scripts/random-bin.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
from datetime import datetime
 | 
			
		||||
 | 
			
		||||
env['PROGNAME'] = datetime.now().strftime("firmware-%Y%m%d-%H%M%S")
 | 
			
		||||
							
								
								
									
										30
									
								
								buildroot/share/PlatformIO/scripts/stm32_bootloader.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								buildroot/share/PlatformIO/scripts/stm32_bootloader.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
import os,sys,shutil
 | 
			
		||||
Import("env")
 | 
			
		||||
 | 
			
		||||
from SCons.Script import DefaultEnvironment
 | 
			
		||||
board = DefaultEnvironment().BoardConfig()
 | 
			
		||||
 | 
			
		||||
def noencrypt(source, target, env):
 | 
			
		||||
  firmware = os.path.join(target[0].dir.path, board.get("build.firmware"))
 | 
			
		||||
  shutil.copy(target[0].path, firmware)
 | 
			
		||||
 | 
			
		||||
if 'offset' in board.get("build").keys():
 | 
			
		||||
  LD_FLASH_OFFSET = board.get("build.offset")
 | 
			
		||||
 | 
			
		||||
  for define in env['CPPDEFINES']:
 | 
			
		||||
    if define[0] == "VECT_TAB_OFFSET":
 | 
			
		||||
      env['CPPDEFINES'].remove(define)
 | 
			
		||||
  env['CPPDEFINES'].append(("VECT_TAB_OFFSET", LD_FLASH_OFFSET))
 | 
			
		||||
 | 
			
		||||
  maximum_ram_size = board.get("upload.maximum_ram_size")
 | 
			
		||||
 | 
			
		||||
  for i, flag in enumerate(env["LINKFLAGS"]):
 | 
			
		||||
    if "-Wl,--defsym=LD_FLASH_OFFSET" in flag:
 | 
			
		||||
      env["LINKFLAGS"][i] = "-Wl,--defsym=LD_FLASH_OFFSET=" + LD_FLASH_OFFSET
 | 
			
		||||
    if "-Wl,--defsym=LD_MAX_DATA_SIZE" in flag:
 | 
			
		||||
      env["LINKFLAGS"][i] = "-Wl,--defsym=LD_MAX_DATA_SIZE=" + str(maximum_ram_size - 40)
 | 
			
		||||
 | 
			
		||||
board_keys = board.get("build").keys()
 | 
			
		||||
# Only copy file if there's no encryptation
 | 
			
		||||
if 'firmware' in board_keys and not 'encrypt' in board_keys:
 | 
			
		||||
  env.AddPostAction("$BUILD_DIR/${PROGNAME}.bin", noencrypt)
 | 
			
		||||
@@ -0,0 +1,347 @@
 | 
			
		||||
/*
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 * Copyright (c) 2019, STMicroelectronics
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 * Automatically generated from STM32F407Z(E-G)Tx.xml
 | 
			
		||||
 */
 | 
			
		||||
#include <Arduino.h>
 | 
			
		||||
#include <PeripheralPins.h>
 | 
			
		||||
 | 
			
		||||
/* =====
 | 
			
		||||
 * Note: Commented lines are alternative possibilities which are not used by default.
 | 
			
		||||
 *       If you change them, you should know what you're doing first.
 | 
			
		||||
 * =====
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
//*** ADC ***
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_ADC_MODULE_ENABLED
 | 
			
		||||
const PinMap PinMap_ADC[] = {
 | 
			
		||||
  {PA_0,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0, 0)}, // ADC1_IN0      E0_DIR
 | 
			
		||||
  {PA_1,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC1_IN1      BLTOUCH_2
 | 
			
		||||
  {PA_2,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC1_IN2      BLTOUCH_4
 | 
			
		||||
  {PA_3,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC1_IN3      E1_EN
 | 
			
		||||
  {PA_4,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC1_IN4      TF_SS
 | 
			
		||||
  {PA_5,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC1_IN5      TF_SCLK
 | 
			
		||||
  {PA_6,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC1_IN6      TF_MISO
 | 
			
		||||
  {PA_7,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC1_IN7      LED
 | 
			
		||||
  {PB_0,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC1_IN8      HEATER2
 | 
			
		||||
  {PB_1,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC1_IN9      HEATER0
 | 
			
		||||
  {PC_0,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC1_IN10    Z_EN
 | 
			
		||||
  {PC_1,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC1_IN11    EXP_14
 | 
			
		||||
  {PC_2,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC1_IN12    Z_DIR
 | 
			
		||||
  {PC_3,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC1_IN13    E0_EN
 | 
			
		||||
  {PC_4,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC1_IN14    EXP_8
 | 
			
		||||
  {PC_5,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC1_IN15    EXP_7
 | 
			
		||||
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio, 24 ADC
 | 
			
		||||
    {PF_3,  ADC3,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC3_IN9    TH_0
 | 
			
		||||
    {PF_4,  ADC3,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC3_IN14  TH_1
 | 
			
		||||
    {PF_5,  ADC3,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC3_IN15  TH_2
 | 
			
		||||
    {PF_6,  ADC3,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC3_IN4    TH_3
 | 
			
		||||
    {PF_7,  ADC3,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC3_IN5    EXP_13
 | 
			
		||||
    {PF_8,  ADC3,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC3_IN6    EXP_3
 | 
			
		||||
    {PF_9,  ADC3,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC3_IN7    EXP_6
 | 
			
		||||
    {PF_10, ADC3,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC3_IN8    EXP_5
 | 
			
		||||
  #endif
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//*** DAC ***
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_DAC_MODULE_ENABLED
 | 
			
		||||
const PinMap PinMap_DAC[] = {
 | 
			
		||||
  {PA_4,  DAC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // DAC_OUT1
 | 
			
		||||
  {PA_5,  DAC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // DAC_OUT2
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//*** I2C ***
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_I2C_MODULE_ENABLED
 | 
			
		||||
const PinMap PinMap_I2C_SDA[] = {
 | 
			
		||||
  {PB_7,  I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)},
 | 
			
		||||
  {PB_9,  I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)},
 | 
			
		||||
  {PB_11, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
 | 
			
		||||
  {PC_9,  I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)},
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio
 | 
			
		||||
    {PF_0,  I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
 | 
			
		||||
  #endif
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_I2C_MODULE_ENABLED
 | 
			
		||||
const PinMap PinMap_I2C_SCL[] = {
 | 
			
		||||
  {PA_8,  I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)},
 | 
			
		||||
  {PB_6,  I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)},
 | 
			
		||||
  {PB_8,  I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)},
 | 
			
		||||
  {PB_10, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio
 | 
			
		||||
    {PF_1,  I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
 | 
			
		||||
  #endif
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//*** PWM ***
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_TIM_MODULE_ENABLED
 | 
			
		||||
const PinMap PinMap_PWM[] = {
 | 
			
		||||
  {PE_5,  TIM9,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 1, 0)}, // TIM9_CH1    BED
 | 
			
		||||
  {PE_6,  TIM9,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 2, 0)}, // TIM9_CH2    HEATER0
 | 
			
		||||
  {PB_8,  TIM10,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM10, 1, 0)}, // TIM10_CH1  FAN0
 | 
			
		||||
  {PB_9,  TIM11,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM11, 1, 0)}, // TIM11_CH1  FAN1
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Unused by specifications on BTT002. (PLEASE CONFIRM)
 | 
			
		||||
   * Uncomment the corresponding line if you want to have HardwarePWM on some pins.
 | 
			
		||||
   * WARNING: check timers' usage first to avoid conflicts.
 | 
			
		||||
   * If you don't know what you're doing leave things as they are or you WILL break something (including hardware)
 | 
			
		||||
   * If you alter this section DO NOT report bugs to Marlin team since they are most likely caused by you. Thank you.
 | 
			
		||||
   */
 | 
			
		||||
  //{PA_0,  TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
 | 
			
		||||
  //{PA_0,  TIM5,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 1, 0)}, // TIM5_CH1
 | 
			
		||||
  //{PA_1,  TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2
 | 
			
		||||
  //{PA_1,  TIM5,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2
 | 
			
		||||
  //{PA_2,  TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3
 | 
			
		||||
  //{PA_2,  TIM5,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 3, 0)}, // TIM5_CH3
 | 
			
		||||
  //{PA_2,  TIM9,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 1, 0)}, // TIM9_CH1
 | 
			
		||||
  //{PA_3,  TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4
 | 
			
		||||
  //{PA_3,  TIM5,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 4, 0)}, // TIM5_CH4
 | 
			
		||||
  //{PA_3,  TIM9,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 2, 0)}, // TIM9_CH2
 | 
			
		||||
  //{PA_5,  TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
 | 
			
		||||
  //{PA_5,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 1)}, // TIM8_CH1N
 | 
			
		||||
  //{PA_6,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1
 | 
			
		||||
  //{PA_6,  TIM13,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM13, 1, 0)}, // TIM13_CH1
 | 
			
		||||
  //{PA_7,  TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N
 | 
			
		||||
  //{PA_7,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
 | 
			
		||||
  //{PA_7,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 1)}, // TIM8_CH1N
 | 
			
		||||
  //{PA_7,  TIM14,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM14, 1, 0)}, // TIM14_CH1
 | 
			
		||||
  //{PA_8,  TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1
 | 
			
		||||
  //{PA_9,  TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2
 | 
			
		||||
  //{PA_10, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3
 | 
			
		||||
  //{PA_11, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4
 | 
			
		||||
  //{PA_15, TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
 | 
			
		||||
  //{PB_0,  TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N
 | 
			
		||||
  //{PB_0,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3
 | 
			
		||||
  //{PB_0,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N
 | 
			
		||||
  //{PB_1,  TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N
 | 
			
		||||
  //{PB_1,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4
 | 
			
		||||
  //{PB_1,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 3, 1)}, // TIM8_CH3N
 | 
			
		||||
  //{PB_3,  TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2
 | 
			
		||||
  //{PB_4,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1
 | 
			
		||||
  //{PB_5,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
 | 
			
		||||
  //{PB_6,  TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1
 | 
			
		||||
  //{PB_7,  TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2
 | 
			
		||||
  //{PB_8,  TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3
 | 
			
		||||
  //{PB_9,  TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4
 | 
			
		||||
  //{PB_10, TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3
 | 
			
		||||
  //{PB_11, TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4
 | 
			
		||||
  //{PB_13, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N
 | 
			
		||||
  //{PB_14, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N
 | 
			
		||||
  //{PB_14, TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N
 | 
			
		||||
  //{PB_14, TIM12,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM12, 1, 0)}, // TIM12_CH1
 | 
			
		||||
  //{PB_15, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N
 | 
			
		||||
  //{PB_15, TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 3, 1)}, // TIM8_CH3N
 | 
			
		||||
  //{PB_15, TIM12,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM12, 2, 0)}, // TIM12_CH2
 | 
			
		||||
  //{PC_6,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1
 | 
			
		||||
  //{PC_6,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 0)}, // TIM8_CH1
 | 
			
		||||
  //{PC_7,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
 | 
			
		||||
  //{PC_7,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 0)}, // TIM8_CH2
 | 
			
		||||
  //{PC_8,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3
 | 
			
		||||
  //{PC_8,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 3, 0)}, // TIM8_CH3
 | 
			
		||||
  //{PC_9,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4
 | 
			
		||||
  //{PC_9,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 4, 0)}, // TIM8_CH4
 | 
			
		||||
  //{PD_12, TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1
 | 
			
		||||
  //{PD_14, TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3
 | 
			
		||||
  //{PD_13, TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2
 | 
			
		||||
  //{PD_15, TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4
 | 
			
		||||
  //{PE_8,  TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N
 | 
			
		||||
  //{PE_9,  TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1
 | 
			
		||||
  //{PE_10, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N
 | 
			
		||||
  //{PE_11, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2
 | 
			
		||||
  //{PE_12, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N
 | 
			
		||||
  //{PE_13, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3
 | 
			
		||||
  //{PE_14, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio
 | 
			
		||||
    //{PF_6,  TIM10,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM10, 1, 0)}, // TIM10_CH1
 | 
			
		||||
    //{PF_7,  TIM11,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM11, 1, 0)}, // TIM11_CH1
 | 
			
		||||
    //{PF_8,  TIM13,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM13, 1, 0)}, // TIM13_CH1
 | 
			
		||||
    //{PF_9,  TIM14,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM14, 1, 0)}, // TIM14_CH1
 | 
			
		||||
  #endif
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//*** SERIAL ***
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_UART_MODULE_ENABLED
 | 
			
		||||
const PinMap PinMap_UART_TX[] = {
 | 
			
		||||
  {PA_0,  UART4,   STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)},
 | 
			
		||||
  {PA_2,  USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
  {PA_9,  USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
 | 
			
		||||
  {PB_6,  USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
 | 
			
		||||
  {PB_10, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  {PC_6,  USART6,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
  {PC_10, UART4,   STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)},
 | 
			
		||||
  {PC_10, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  {PC_12, UART5,   STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART5)},
 | 
			
		||||
  {PD_5,  USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
  {PD_8,  USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio
 | 
			
		||||
    {PG_14, USART6,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
  #endif
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_UART_RX[] = {
 | 
			
		||||
  {PA_1,  UART4,   STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)},
 | 
			
		||||
  {PA_3,  USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
  {PA_10, USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
 | 
			
		||||
  {PB_7,  USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
 | 
			
		||||
  {PB_11, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  {PC_7,  USART6,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
  {PC_11, UART4,   STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)},
 | 
			
		||||
  {PC_11, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  {PD_2,  UART5,   STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART5)},
 | 
			
		||||
  {PD_6,  USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
  {PD_9,  USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio
 | 
			
		||||
    {PG_9,  USART6,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
  #endif
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_UART_RTS[] = {
 | 
			
		||||
  {PA_1,  USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
  {PA_12, USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
 | 
			
		||||
  {PB_14, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  {PD_4,  USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
  {PD_12, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio
 | 
			
		||||
    {PG_8,  USART6,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
    {PG_12, USART6,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
  #endif
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_UART_CTS[] = {
 | 
			
		||||
  {PA_0,  USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
  {PA_11, USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
 | 
			
		||||
  {PB_13, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  {PD_3,  USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
  {PD_11, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio
 | 
			
		||||
    {PG_13, USART6,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
    {PG_15, USART6,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
  #endif
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//*** SPI ***
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SPI_MODULE_ENABLED
 | 
			
		||||
const PinMap PinMap_SPI_MOSI[] = {
 | 
			
		||||
  {PA_7,  SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)},
 | 
			
		||||
  {PB_15, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
 | 
			
		||||
  {PC_12, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_SPI_MISO[] = {
 | 
			
		||||
  {PA_6,  SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)},
 | 
			
		||||
  {PB_14, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
 | 
			
		||||
  {PC_11, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_SPI_SCLK[] = {
 | 
			
		||||
  {PA_5,  SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)},
 | 
			
		||||
  {PB_13, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
 | 
			
		||||
  {PC_10, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_SPI_SSEL[] = {
 | 
			
		||||
  {PA_4,  SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)},
 | 
			
		||||
  {PB_12, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
 | 
			
		||||
  {PA_15, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//*** CAN ***
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_CAN_MODULE_ENABLED
 | 
			
		||||
#error "CAN bus isn't available on this board. Driver should be disabled."
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//*** ETHERNET ***
 | 
			
		||||
#ifdef HAL_ETH_MODULE_ENABLED
 | 
			
		||||
#error "Ethernet port isn't available on this board. Driver should be disabled."
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//*** No QUADSPI ***
 | 
			
		||||
 | 
			
		||||
//*** USB ***
 | 
			
		||||
#ifdef HAL_PCD_MODULE_ENABLED
 | 
			
		||||
const PinMap PinMap_USB_OTG_FS[] = {
 | 
			
		||||
  //{PA_8,  USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_SOF   used by LCD
 | 
			
		||||
  //{PA_9,  USB_OTG_FS, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF_NONE)},     // USB_OTG_FS_VBUS  available on wifi port, if empty
 | 
			
		||||
  //{PA_10, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_ID    available on UART1_RX if not used
 | 
			
		||||
  {PA_11, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_DM
 | 
			
		||||
  {PA_12, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_DP
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_USB_OTG_HS[] = { /*
 | 
			
		||||
  #ifdef USE_USB_HS_IN_FS
 | 
			
		||||
    {PB_12, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_PULLUP, GPIO_AF12_OTG_HS_FS)}, // USB_OTG_HS_ID
 | 
			
		||||
    {PB_13, USB_OTG_HS, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF_NONE)}, // USB_OTG_HS_VBUS
 | 
			
		||||
    {PB_14, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_OTG_HS_FS)}, // USB_OTG_HS_DM
 | 
			
		||||
    {PB_15, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_OTG_HS_FS)}, // USB_OTG_HS_DP
 | 
			
		||||
  #else
 | 
			
		||||
    #error "USB in HS mode isn't supported by the board"
 | 
			
		||||
    {PA_3,  USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D0
 | 
			
		||||
    {PB_0,  USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D1
 | 
			
		||||
    {PB_1,  USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D2
 | 
			
		||||
    {PB_5,  USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D7
 | 
			
		||||
    {PB_10, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D3
 | 
			
		||||
    {PB_12, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D5
 | 
			
		||||
    {PB_13, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D6
 | 
			
		||||
    {PC_0,  USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_STP
 | 
			
		||||
    {PC_2,  USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_DIR
 | 
			
		||||
    {PC_3,  USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_NXT
 | 
			
		||||
  #endif // USE_USB_HS_IN_FS
 | 
			
		||||
  */
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
@@ -0,0 +1,50 @@
 | 
			
		||||
/* SYS_WKUP */
 | 
			
		||||
#ifdef PWR_WAKEUP_PIN1
 | 
			
		||||
  SYS_WKUP1 = PA_0,
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef PWR_WAKEUP_PIN2
 | 
			
		||||
  SYS_WKUP2 = NC,
 | 
			
		||||
#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_D7  = PB_5,
 | 
			
		||||
  USB_OTG_HS_ULPI_D3  = PB_10,
 | 
			
		||||
  USB_OTG_HS_ULPI_D4  = PB_11,
 | 
			
		||||
  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
 | 
			
		||||
@@ -0,0 +1,52 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#define HAL_MODULE_ENABLED
 | 
			
		||||
#define HAL_ADC_MODULE_ENABLED
 | 
			
		||||
#define HAL_CRC_MODULE_ENABLED
 | 
			
		||||
#define HAL_DMA_MODULE_ENABLED
 | 
			
		||||
#define HAL_GPIO_MODULE_ENABLED
 | 
			
		||||
#define HAL_I2C_MODULE_ENABLED
 | 
			
		||||
#define HAL_PWR_MODULE_ENABLED
 | 
			
		||||
#define HAL_RCC_MODULE_ENABLED
 | 
			
		||||
//#define HAL_RTC_MODULE_ENABLED Real Time Clock...do we use it?
 | 
			
		||||
#define HAL_SPI_MODULE_ENABLED
 | 
			
		||||
#define HAL_TIM_MODULE_ENABLED
 | 
			
		||||
#define HAL_USART_MODULE_ENABLED
 | 
			
		||||
#define HAL_CORTEX_MODULE_ENABLED
 | 
			
		||||
//#define HAL_UART_MODULE_ENABLED // by default
 | 
			
		||||
//#define HAL_PCD_MODULE_ENABLED  // Since STM32 v3.10700.191028 this is automatically added if any type of USB is enabled (as in Arduino IDE)
 | 
			
		||||
 | 
			
		||||
#undef HAL_SD_MODULE_ENABLED
 | 
			
		||||
#undef HAL_DAC_MODULE_ENABLED
 | 
			
		||||
#undef HAL_FLASH_MODULE_ENABLED
 | 
			
		||||
#undef HAL_CAN_MODULE_ENABLED
 | 
			
		||||
#undef HAL_CAN_LEGACY_MODULE_ENABLED
 | 
			
		||||
#undef HAL_CEC_MODULE_ENABLED
 | 
			
		||||
#undef HAL_CRYP_MODULE_ENABLED
 | 
			
		||||
#undef HAL_DCMI_MODULE_ENABLED
 | 
			
		||||
#undef HAL_DMA2D_MODULE_ENABLED
 | 
			
		||||
#undef HAL_ETH_MODULE_ENABLED
 | 
			
		||||
#undef HAL_NAND_MODULE_ENABLED
 | 
			
		||||
#undef HAL_NOR_MODULE_ENABLED
 | 
			
		||||
#undef HAL_PCCARD_MODULE_ENABLED
 | 
			
		||||
#undef HAL_SRAM_MODULE_ENABLED
 | 
			
		||||
#undef HAL_SDRAM_MODULE_ENABLED
 | 
			
		||||
#undef HAL_HASH_MODULE_ENABLED
 | 
			
		||||
#undef HAL_EXTI_MODULE_ENABLED
 | 
			
		||||
#undef HAL_SMBUS_MODULE_ENABLED
 | 
			
		||||
#undef HAL_I2S_MODULE_ENABLED
 | 
			
		||||
#undef HAL_IWDG_MODULE_ENABLED
 | 
			
		||||
#undef HAL_LTDC_MODULE_ENABLED
 | 
			
		||||
#undef HAL_DSI_MODULE_ENABLED
 | 
			
		||||
#undef HAL_QSPI_MODULE_ENABLED
 | 
			
		||||
#undef HAL_RNG_MODULE_ENABLED
 | 
			
		||||
#undef HAL_SAI_MODULE_ENABLED
 | 
			
		||||
#undef HAL_IRDA_MODULE_ENABLED
 | 
			
		||||
#undef HAL_SMARTCARD_MODULE_ENABLED
 | 
			
		||||
#undef HAL_WWDG_MODULE_ENABLED
 | 
			
		||||
#undef HAL_HCD_MODULE_ENABLED
 | 
			
		||||
#undef HAL_FMPI2C_MODULE_ENABLED
 | 
			
		||||
#undef HAL_SPDIFRX_MODULE_ENABLED
 | 
			
		||||
#undef HAL_DFSDM_MODULE_ENABLED
 | 
			
		||||
#undef HAL_LPTIM_MODULE_ENABLED
 | 
			
		||||
#undef HAL_MMC_MODULE_ENABLED
 | 
			
		||||
							
								
								
									
										204
									
								
								buildroot/share/PlatformIO/variants/BIGTREE_BTT002/ldscript.ld
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										204
									
								
								buildroot/share/PlatformIO/variants/BIGTREE_BTT002/ldscript.ld
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,204 @@
 | 
			
		||||
/*
 | 
			
		||||
*****************************************************************************
 | 
			
		||||
**
 | 
			
		||||
 | 
			
		||||
**  File        : LinkerScript.ld
 | 
			
		||||
**
 | 
			
		||||
**  Abstract    : Linker script for STM32F407ZGTx Device with
 | 
			
		||||
**                1024KByte 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.
 | 
			
		||||
**
 | 
			
		||||
*****************************************************************************
 | 
			
		||||
** @attention
 | 
			
		||||
**
 | 
			
		||||
** <h2><center>© COPYRIGHT(c) 2014 Ac6</center></h2>
 | 
			
		||||
**
 | 
			
		||||
** Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
** are permitted provided that the following conditions are met:
 | 
			
		||||
**   1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
**      this list of conditions and the following disclaimer.
 | 
			
		||||
**   2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
**      this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
**      and/or other materials provided with the distribution.
 | 
			
		||||
**   3. Neither the name of Ac6 nor the names of its contributors
 | 
			
		||||
**      may be used to endorse or promote products derived from this software
 | 
			
		||||
**      without specific prior written permission.
 | 
			
		||||
**
 | 
			
		||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
**
 | 
			
		||||
*****************************************************************************
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/* 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
 | 
			
		||||
{
 | 
			
		||||
FLASH (rx)      : ORIGIN = 0x8008000, LENGTH = 1024K
 | 
			
		||||
RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 128K
 | 
			
		||||
CCMRAM (rw)      : ORIGIN = 0x10000000, LENGTH = 64K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* 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):
 | 
			
		||||
  {
 | 
			
		||||
    . = 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):
 | 
			
		||||
  {
 | 
			
		||||
    . = 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
 | 
			
		||||
 | 
			
		||||
  _siccmram = LOADADDR(.ccmram);
 | 
			
		||||
 | 
			
		||||
  /* CCM-RAM section
 | 
			
		||||
   *
 | 
			
		||||
   * IMPORTANT NOTE!
 | 
			
		||||
   * If initialized variables will be placed in this section,
 | 
			
		||||
   * the startup code needs to be modified to copy the init-values.
 | 
			
		||||
   */
 | 
			
		||||
  .ccmram :
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    _sccmram = .;       /* create a global symbol at ccmram start */
 | 
			
		||||
    *(.ccmram)
 | 
			
		||||
    *(.ccmram*)
 | 
			
		||||
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    _eccmram = .;       /* create a global symbol at ccmram end */
 | 
			
		||||
  } >CCMRAM 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(4);
 | 
			
		||||
    PROVIDE ( end = . );
 | 
			
		||||
    PROVIDE ( _end = . );
 | 
			
		||||
    . = . + _Min_Heap_Size;
 | 
			
		||||
    . = . + _Min_Stack_Size;
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
  } >RAM
 | 
			
		||||
 | 
			
		||||
  /* Remove information from the standard libraries */
 | 
			
		||||
  /DISCARD/ :
 | 
			
		||||
  {
 | 
			
		||||
    libc.a ( * )
 | 
			
		||||
    libm.a ( * )
 | 
			
		||||
    libgcc.a ( * )
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .ARM.attributes 0 : { *(.ARM.attributes) }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										260
									
								
								buildroot/share/PlatformIO/variants/BIGTREE_BTT002/variant.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										260
									
								
								buildroot/share/PlatformIO/variants/BIGTREE_BTT002/variant.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,260 @@
 | 
			
		||||
/*
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 * Copyright (c) 2017, STMicroelectronics
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "pins_arduino.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// Pin number
 | 
			
		||||
// This array allows to wrap Arduino pin number(Dx or x)
 | 
			
		||||
// to STM32 PinName (PX_n)
 | 
			
		||||
const PinName digitalPin[] = {
 | 
			
		||||
#if STM32F4X_PIN_NUM >= 64  //64 pins mcu, 51 gpio
 | 
			
		||||
  PC_13, //D0
 | 
			
		||||
  PC_14, //D1  - OSC32_IN
 | 
			
		||||
  PC_15, //D2  - OSC32_OUT
 | 
			
		||||
  PH_0,  //D3  - OSC_IN
 | 
			
		||||
  PH_1,  //D4  - OSC_OUT
 | 
			
		||||
  PB_2,  //D5  - BOOT1
 | 
			
		||||
  PB_10, //D6  - 1:SPI2_SCK / I2C2_SCL / USART3_TX / TIM2_CH3
 | 
			
		||||
  PB_11, //D7  - 1:I2C2_SDA / USART3_RX / TIM2_CH4
 | 
			
		||||
  PB_12, //D8  - 1:SPI2_NSS / OTG_HS_ID
 | 
			
		||||
  PB_13, //D9  - 1:SPI2_SCK  2:OTG_HS_VBUS
 | 
			
		||||
  PB_14, //D10 - 1:SPI2_MISO / TIM12_CH1 / OTG_HS_DM
 | 
			
		||||
  PB_15, //D11 - SPI2_MOSI / TIM12_CH2 / OTG_HS_DP
 | 
			
		||||
  PC_6,  //D12 - 1:TIM8_CH1 / SDIO_D6 / USART6_TX / TIM3_CH1
 | 
			
		||||
  PC_7,  //D13 - 1:TIM8_CH2 / SDIO_D7 / USART6_RX / TIM3_CH2
 | 
			
		||||
  PC_8,  //D14 - 1:TIM8_CH3 / SDIO_D0 / TIM3_CH3
 | 
			
		||||
  PC_9,  //D15 - 1:TIM8_CH4 / SDIO_D1 / TIM3_CH4
 | 
			
		||||
  PA_8,  //D16 - 1:TIM1_CH1 / I2C3_SCL / OTG_FS_SOF
 | 
			
		||||
  PA_9,  //D17 - 1:USART1_TX / TIM1_CH2  2:OTG_FS_VBUS
 | 
			
		||||
  PA_10, //D18 - 1:USART1_RX / TIM1_CH3 / OTG_FS_ID
 | 
			
		||||
  PA_11, //D19 - 1:TIM1_CH4 / OTG_FS_DM
 | 
			
		||||
  PA_12, //D20 - 1:OTG_FS_DP
 | 
			
		||||
  PA_13, //D21 - 0:JTMS-SWDIO
 | 
			
		||||
  PA_14, //D22 - 0:JTCK-SWCLK
 | 
			
		||||
  PA_15, //D23 - 0:JTDI  1:SPI3_NSS / SPI1_NSS
 | 
			
		||||
  PC_10, //D24 - 1:UART4_TX / SPI3_SCK / SDIO_D2 / USART3_TX
 | 
			
		||||
  PC_11, //D25 - 1:UART4_RX / SPI3_MISO / SDIO_D3 / USART3_RX
 | 
			
		||||
  PC_12, //D26 - 1:UART5_TX / SPI3_MOSI / SDIO_CK
 | 
			
		||||
  PD_2,  //D27 - 1:UART5_RX / SDIO_CMD
 | 
			
		||||
  PB_3,  //D28 - 0:JTDO  1:SPI3_SCK / TIM2_CH2 / SPI1_SCK
 | 
			
		||||
  PB_4,  //D29 - 0:NJTRST  1:SPI3_MISO / TIM3_CH1 / SPI1_MISO
 | 
			
		||||
  PB_5,  //D30 - 1:TIM3_CH2 / SPI1_MOSI / SPI3_MOSI
 | 
			
		||||
  PB_6,  //D31 - 1:I2C1_SCL / TIM4_CH1 / USART1_TX
 | 
			
		||||
  PB_7,  //D32 - 1:I2C1_SDA / TIM4_CH2 / USART1_RX
 | 
			
		||||
  PB_8,  //D33 - 1:I2C1_SCL / TIM4_CH3 / SDIO_D4 / TIM10_CH1
 | 
			
		||||
  PB_9,  //D34 - 1:I2C1_SDA / TIM4_CH4 / SDIO_D5 / TIM11_CH1 / SPI2_NSS
 | 
			
		||||
  PA_0,  //D35/A0 - 1:UART4_TX / TIM5_CH1  2:ADC123_IN0
 | 
			
		||||
  PA_1,  //D36/A1 - 1:UART4_RX / TIM5_CH2 / TIM2_CH2  2:ADC123_IN1
 | 
			
		||||
  PA_2,  //D37/A2 - 1:USART2_TX /TIM5_CH3 / TIM9_CH1 / TIM2_CH3  2:ADC123_IN2
 | 
			
		||||
  PA_3,  //D38/A3 - 1:USART2_RX /TIM5_CH4 / TIM9_CH2 / TIM2_CH4  2:ADC123_IN3
 | 
			
		||||
  PA_4,  //D39/A4 - NOT FT 1:SPI1_NSS / SPI3_NSS / USART2_CK  2:ADC12_IN4 / DAC_OUT1
 | 
			
		||||
  PA_5,  //D40/A5 - NOT FT 1:SPI1_SCK  2:ADC12_IN5 / DAC_OUT2
 | 
			
		||||
  PA_6,  //D41/A6 - 1:SPI1_MISO / TIM13_CH1 / TIM3_CH1  2:ADC12_IN6
 | 
			
		||||
  PA_7,  //D42/A7 - 1:SPI1_MOSI / TIM14_CH1 / TIM3_CH2  2:ADC12_IN7
 | 
			
		||||
  PB_0,  //D43/A8 - 1:TIM3_CH3  2:ADC12_IN8
 | 
			
		||||
  PB_1,  //D44/A9 - 1:TIM3_CH4  2:ADC12_IN9
 | 
			
		||||
  PC_0,  //D45/A10 - 1:  2:ADC123_IN10
 | 
			
		||||
  PC_1,  //D46/A11 - 1:  2:ADC123_IN11
 | 
			
		||||
  PC_2,  //D47/A12 - 1:SPI2_MISO  2:ADC123_IN12
 | 
			
		||||
  PC_3,  //D48/A13 - 1:SPI2_MOSI  2:ADC123_IN13
 | 
			
		||||
  PC_4,  //D49/A14 - 1:  2:ADC12_IN14
 | 
			
		||||
  PC_5,  //D50/A15 - 1:  2:ADC12_IN15
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144
 | 
			
		||||
    PF_3,  //D51/A16 - 1:FSMC_A3  2:ADC3_IN9
 | 
			
		||||
    PF_4,  //D52/A17 - 1:FSMC_A4  2:ADC3_IN14
 | 
			
		||||
    PF_5,  //D53/A18 - 1:FSMC_A5  2:ADC3_IN15
 | 
			
		||||
    PF_6,  //D54/A19 - 1:TIM10_CH1  2:ADC3_IN4
 | 
			
		||||
    PF_7,  //D55/A20 - 1:TIM11_CH1  2:ADC3_IN5
 | 
			
		||||
    PF_8,  //D56/A21 - 1:TIM13_CH1  2:ADC3_IN6
 | 
			
		||||
    PF_9,  //D57/A22 - 1;TIM14_CH1  2:ADC3_IN7
 | 
			
		||||
    PF_10, //D58/A23 - 2:ADC3_IN8
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
#if STM32F4X_PIN_NUM >= 100  //100 pins mcu, 82 gpio
 | 
			
		||||
  PE_2,  //D59 - 1:FSMC_A23
 | 
			
		||||
  PE_3,  //D60 - 1:FSMC_A19
 | 
			
		||||
  PE_4,  //D61 - 1:FSMC_A20
 | 
			
		||||
  PE_5,  //D62 - 1:FSMC_A21
 | 
			
		||||
  PE_6,  //D63 - 1:FSMC_A22
 | 
			
		||||
  PE_7,  //D64 - 1:FSMC_D4
 | 
			
		||||
  PE_8,  //D65 - 1:FSMC_D5
 | 
			
		||||
  PE_9,  //D66 - 1:FSMC_D6 / TIM1_CH1
 | 
			
		||||
  PE_10, //D67 - 1:FSMC_D7
 | 
			
		||||
  PE_11, //D68 - 1:FSMC_D8 / TIM1_CH2
 | 
			
		||||
  PE_12, //D69 - 1:FSMC_D9
 | 
			
		||||
  PE_13, //D70 - 1:FSMC_D10 / TIM1_CH3
 | 
			
		||||
  PE_14, //D71 - 1:FSMC_D11 / TIM1_CH4
 | 
			
		||||
  PE_15, //D72 - 1:FSMC_D12
 | 
			
		||||
  PD_8,  //D73 - 1:FSMC_D13 / USART3_TX
 | 
			
		||||
  PD_9,  //D74 - 1:FSMC_D14 / USART3_RX
 | 
			
		||||
  PD_10, //D75 - 1:FSMC_D15
 | 
			
		||||
  PD_11, //D76 - 1:FSMC_A16
 | 
			
		||||
  PD_12, //D77 - 1:FSMC_A17 / TIM4_CH1
 | 
			
		||||
  PD_13, //D78 - 1:FSMC_A18 / TIM4_CH2
 | 
			
		||||
  PD_14, //D79 - 1:FSMC_D0 / TIM4_CH3
 | 
			
		||||
  PD_15, //D80 - 1:FSMC_D1 / TIM4_CH4
 | 
			
		||||
  PD_0,  //D81 - 1:FSMC_D2
 | 
			
		||||
  PD_1,  //D82 - 1:FSMC_D3
 | 
			
		||||
  PD_3,  //D83 - 1:FSMC_CLK
 | 
			
		||||
  PD_4,  //D84 - 1:FSMC_NOE
 | 
			
		||||
  PD_5,  //D85 - 1:USART2_TX
 | 
			
		||||
  PD_6,  //D86 - 1:USART2_RX
 | 
			
		||||
  PD_7,  //D87
 | 
			
		||||
  PE_0,  //D88
 | 
			
		||||
  PE_1,  //D89
 | 
			
		||||
#endif
 | 
			
		||||
#if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio
 | 
			
		||||
  PF_0,  //D90 - 1:FSMC_A0 / I2C2_SDA
 | 
			
		||||
  PF_1,  //D91 - 1:FSMC_A1 / I2C2_SCL
 | 
			
		||||
  PF_2,  //D92 - 1:FSMC_A2
 | 
			
		||||
  PF_11, //D93
 | 
			
		||||
  PF_12, //D94 - 1:FSMC_A6
 | 
			
		||||
  PF_13, //D95 - 1:FSMC_A7
 | 
			
		||||
  PF_14, //D96 - 1:FSMC_A8
 | 
			
		||||
  PF_15, //D97 - 1:FSMC_A9
 | 
			
		||||
  PG_0,  //D98 - 1:FSMC_A10
 | 
			
		||||
  PG_1,  //D99 - 1:FSMC_A11
 | 
			
		||||
  PG_2,  //D100 - 1:FSMC_A12
 | 
			
		||||
  PG_3,  //D101 - 1:FSMC_A13
 | 
			
		||||
  PG_4,  //D102 - 1:FSMC_A14
 | 
			
		||||
  PG_5,  //D103 - 1:FSMC_A15
 | 
			
		||||
  PG_6,  //D104
 | 
			
		||||
  PG_7,  //D105
 | 
			
		||||
  PG_8,  //D106
 | 
			
		||||
  PG_9,  //D107 - 1:USART6_RX
 | 
			
		||||
  PG_10, //D108 - 1:FSMC_NE3
 | 
			
		||||
  PG_11, //D109
 | 
			
		||||
  PG_12, //D110 - 1:FSMC_NE4
 | 
			
		||||
  PG_13, //D111 - 1:FSMC_A24
 | 
			
		||||
  PG_14, //D112 - 1:FSMC_A25 / USART6_TX
 | 
			
		||||
  PG_15, //D113
 | 
			
		||||
#endif
 | 
			
		||||
#if STM32F4X_PIN_NUM >= 176  //176 pins mcu, 140 gpio
 | 
			
		||||
  PI_8,  //D114
 | 
			
		||||
  PI_9,  //D115
 | 
			
		||||
  PI_10, //D116
 | 
			
		||||
  PI_11, //D117
 | 
			
		||||
  PH_2,  //D118
 | 
			
		||||
  PH_3,  //D119
 | 
			
		||||
  PH_4,  //D120 - 1:I2C2_SCL
 | 
			
		||||
  PH_5,  //D121 - 1:I2C2_SDA
 | 
			
		||||
  PH_6,  //D122 - 1:TIM12_CH1
 | 
			
		||||
  PH_7,  //D123 - 1:I2C3_SCL
 | 
			
		||||
  PH_8,  //D124 - 1:I2C3_SDA
 | 
			
		||||
  PH_9,  //D125 - 1:TIM12_CH2
 | 
			
		||||
  PH_10, //D126 - 1:TIM5_CH1
 | 
			
		||||
  PH_11, //D127 - 1:TIM5_CH2
 | 
			
		||||
  PH_12, //D128 - 1:TIM5_CH3
 | 
			
		||||
  PH_13, //D129
 | 
			
		||||
  PH_14, //D130
 | 
			
		||||
  PH_15, //D131
 | 
			
		||||
  PI_0,  //D132 - 1:TIM5_CH4 / SPI2_NSS
 | 
			
		||||
  PI_1,  //D133 - 1:SPI2_SCK
 | 
			
		||||
  PI_2,  //D134 - 1:TIM8_CH4 /SPI2_MISO
 | 
			
		||||
  PI_3,  //D135 - 1:SPI2_MOS
 | 
			
		||||
  PI_4,  //D136
 | 
			
		||||
  PI_5,  //D137 - 1:TIM8_CH1
 | 
			
		||||
  PI_6,  //D138 - 1:TIM8_CH2
 | 
			
		||||
  PI_7,  //D139 - 1:TIM8_CH3
 | 
			
		||||
#endif
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// ------------------------
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 /**
 | 
			
		||||
  * @brief  System Clock Configuration
 | 
			
		||||
  * @param  None
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
WEAK void SystemClock_Config() {
 | 
			
		||||
 | 
			
		||||
  RCC_OscInitTypeDef RCC_OscInitStruct;
 | 
			
		||||
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
 | 
			
		||||
 | 
			
		||||
  /**Configure the main internal regulator output voltage
 | 
			
		||||
  */
 | 
			
		||||
  __HAL_RCC_PWR_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
 | 
			
		||||
 | 
			
		||||
  /**Initializes the CPU, AHB and APB busses clocks
 | 
			
		||||
  */
 | 
			
		||||
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
 | 
			
		||||
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLM = 8;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLN = 336;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLQ = 7;
 | 
			
		||||
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
 | 
			
		||||
    _Error_Handler(__FILE__, __LINE__);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**Initializes the CPU, AHB and APB busses clocks
 | 
			
		||||
  */
 | 
			
		||||
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
 | 
			
		||||
                                | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
 | 
			
		||||
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
 | 
			
		||||
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
 | 
			
		||||
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
 | 
			
		||||
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
 | 
			
		||||
 | 
			
		||||
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) {
 | 
			
		||||
    _Error_Handler(__FILE__, __LINE__);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**Configure the Systick interrupt time
 | 
			
		||||
  */
 | 
			
		||||
  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000);
 | 
			
		||||
 | 
			
		||||
  /**Configure the Systick
 | 
			
		||||
  */
 | 
			
		||||
  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
 | 
			
		||||
 | 
			
		||||
  /* SysTick_IRQn interrupt configuration */
 | 
			
		||||
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										292
									
								
								buildroot/share/PlatformIO/variants/BIGTREE_BTT002/variant.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										292
									
								
								buildroot/share/PlatformIO/variants/BIGTREE_BTT002/variant.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,292 @@
 | 
			
		||||
/*
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 * Copyright (c) 2017, STMicroelectronics
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 */
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif // __cplusplus
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------------------
 | 
			
		||||
 *        Pins
 | 
			
		||||
 *----------------------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
#ifdef STM32F405RX
 | 
			
		||||
  #define STM32F4X_PIN_NUM  64  //64 pins mcu, 51 gpio
 | 
			
		||||
  #define STM32F4X_GPIO_NUM 51
 | 
			
		||||
  #define STM32F4X_ADC_NUM  16
 | 
			
		||||
#elif defined(STM32F407_5VX)
 | 
			
		||||
  #define STM32F4X_PIN_NUM  100  //100 pins mcu, 82 gpio
 | 
			
		||||
  #define STM32F4X_GPIO_NUM 82
 | 
			
		||||
  #define STM32F4X_ADC_NUM  16
 | 
			
		||||
#elif defined(STM32F407_5ZX)
 | 
			
		||||
  #define STM32F4X_PIN_NUM  144  //144 pins mcu, 114 gpio
 | 
			
		||||
  #define STM32F4X_GPIO_NUM 114
 | 
			
		||||
  #define STM32F4X_ADC_NUM  24
 | 
			
		||||
#elif defined(STM32F407IX)
 | 
			
		||||
  #define STM32F4X_PIN_NUM  176  //176 pins mcu, 140 gpio
 | 
			
		||||
  #define STM32F4X_GPIO_NUM 140
 | 
			
		||||
  #define STM32F4X_ADC_NUM  24
 | 
			
		||||
#else
 | 
			
		||||
  #error "no match MCU defined"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if STM32F4X_PIN_NUM >= 64  //64 pins mcu, 51 gpio
 | 
			
		||||
  #define PC13  0
 | 
			
		||||
  #define PC14  1 //OSC32_IN
 | 
			
		||||
  #define PC15  2 //OSC32_OUT
 | 
			
		||||
  #define PH0   3 //OSC_IN
 | 
			
		||||
  #define PH1   4 //OSC_OUT
 | 
			
		||||
  #define PB2   5 //BOOT1
 | 
			
		||||
  #define PB10  6 //1:SPI2_SCK / I2C2_SCL / USART3_TX / TIM2_CH3
 | 
			
		||||
  #define PB11  7 //1:I2C2_SDA / USART3_RX / TIM2_CH4
 | 
			
		||||
  #define PB12  8 //1:SPI2_NSS / OTG_HS_ID
 | 
			
		||||
  #define PB13  9 //1:SPI2_SCK  2:OTG_HS_VBUS
 | 
			
		||||
  #define PB14  10 //1:SPI2_MISO / TIM12_CH1 / OTG_HS_DM
 | 
			
		||||
  #define PB15  11 //SPI2_MOSI / TIM12_CH2 / OTG_HS_DP
 | 
			
		||||
  #define PC6   12 //1:TIM8_CH1 / SDIO_D6 / USART6_TX / TIM3_CH1
 | 
			
		||||
  #define PC7   13 //1:TIM8_CH2 / SDIO_D7 / USART6_RX / TIM3_CH2
 | 
			
		||||
  #define PC8   14 //1:TIM8_CH3 / SDIO_D0 / TIM3_CH3
 | 
			
		||||
  #define PC9   15 //1:TIM8_CH4 / SDIO_D1 / TIM3_CH4
 | 
			
		||||
  #define PA8   16 //1:TIM1_CH1 / I2C3_SCL / OTG_FS_SOF
 | 
			
		||||
  #define PA9   17 //1:USART1_TX / TIM1_CH2  2:OTG_FS_VBUS
 | 
			
		||||
  #define PA10  18 //1:USART1_RX / TIM1_CH3 / OTG_FS_ID
 | 
			
		||||
  #define PA11  19 //1:TIM1_CH4 / OTG_FS_DM
 | 
			
		||||
  #define PA12  20 //1:OTG_FS_DP
 | 
			
		||||
  #define PA13  21 //0:JTMS-SWDIO
 | 
			
		||||
  #define PA14  22 //0:JTCK-SWCLK
 | 
			
		||||
  #define PA15  23 //0:JTDI  1:SPI3_NSS / SPI1_NSS
 | 
			
		||||
  #define PC10  24 //1:UART4_TX / SPI3_SCK / SDIO_D2 / USART3_TX
 | 
			
		||||
  #define PC11  25 //1:UART4_RX / SPI3_MISO / SDIO_D3 / USART3_RX
 | 
			
		||||
  #define PC12  26 //1:UART5_TX / SPI3_MOSI / SDIO_CK
 | 
			
		||||
  #define PD2   27 //1:UART5_RX / SDIO_CMD
 | 
			
		||||
  #define PB3   28 //0:JTDO  1:SPI3_SCK / TIM2_CH2 / SPI1_SCK
 | 
			
		||||
  #define PB4   29 //0:NJTRST  1:SPI3_MISO / TIM3_CH1 / SPI1_MISO
 | 
			
		||||
  #define PB5   30 //1:TIM3_CH2 / SPI1_MOSI / SPI3_MOSI
 | 
			
		||||
  #define PB6   31 //1:I2C1_SCL / TIM4_CH1 / USART1_TX
 | 
			
		||||
  #define PB7   32 //1:I2C1_SDA / TIM4_CH2 / USART1_RX
 | 
			
		||||
  #define PB8   33 //1:I2C1_SCL / TIM4_CH3 / SDIO_D4 / TIM10_CH1
 | 
			
		||||
  #define PB9   34 //1:I2C1_SDA / TIM4_CH4 / SDIO_D5 / TIM11_CH1 / SPI2_NSS
 | 
			
		||||
  #define PA0   35 //1:UART4_TX / TIM5_CH1  2:ADC123_IN0
 | 
			
		||||
  #define PA1   36 //1:UART4_RX / TIM5_CH2 / TIM2_CH2  2:ADC123_IN1
 | 
			
		||||
  #define PA2   37 //1:USART2_TX /TIM5_CH3 / TIM9_CH1 / TIM2_CH3  2:ADC123_IN2
 | 
			
		||||
  #define PA3   38 //1:USART2_RX /TIM5_CH4 / TIM9_CH2 / TIM2_CH4  2:ADC123_IN3
 | 
			
		||||
  #define PA4   39 //NOT FT 1:SPI1_NSS / SPI3_NSS / USART2_CK  2:ADC12_IN4 / DAC_OUT1
 | 
			
		||||
  #define PA5   40 //NOT FT 1:SPI1_SCK  2:ADC12_IN5 / DAC_OUT2
 | 
			
		||||
  #define PA6   41 //1:SPI1_MISO / TIM13_CH1 / TIM3_CH1  2:ADC12_IN6
 | 
			
		||||
  #define PA7   42 //1:SPI1_MOSI / TIM14_CH1 / TIM3_CH2  2:ADC12_IN7
 | 
			
		||||
  #define PB0   43 //1:TIM3_CH3  2:ADC12_IN8
 | 
			
		||||
  #define PB1   44 //1:TIM3_CH4  2:ADC12_IN9
 | 
			
		||||
  #define PC0   45 //1:  2:ADC123_IN10
 | 
			
		||||
  #define PC1   46 //1:  2:ADC123_IN11
 | 
			
		||||
  #define PC2   47 //1:SPI2_MISO  2:ADC123_IN12
 | 
			
		||||
  #define PC3   48 //1:SPI2_MOSI  2:ADC123_IN13
 | 
			
		||||
  #define PC4   49 //1:  2:ADC12_IN14
 | 
			
		||||
  #define PC5   50 //1:  2:ADC12_IN15
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144
 | 
			
		||||
    #define PF3   51 //1:FSMC_A3  2:ADC3_IN9
 | 
			
		||||
    #define PF4   52 //1:FSMC_A4  2:ADC3_IN14
 | 
			
		||||
    #define PF5   53 //1:FSMC_A5  2:ADC3_IN15
 | 
			
		||||
    #define PF6   54 //1:TIM10_CH1  2:ADC3_IN4
 | 
			
		||||
    #define PF7   55 //1:TIM11_CH1  2:ADC3_IN5
 | 
			
		||||
    #define PF8   56 //1:TIM13_CH1  2:ADC3_IN6
 | 
			
		||||
    #define PF9   57 //1;TIM14_CH1  2:ADC3_IN7
 | 
			
		||||
    #define PF10  58 //2:ADC3_IN8
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
#if STM32F4X_PIN_NUM >= 100  //100 pins mcu, 82 gpio
 | 
			
		||||
  #define PE2   (35+STM32F4X_ADC_NUM) //1:FSMC_A23
 | 
			
		||||
  #define PE3   (36+STM32F4X_ADC_NUM) //1:FSMC_A19
 | 
			
		||||
  #define PE4   (37+STM32F4X_ADC_NUM) //1:FSMC_A20
 | 
			
		||||
  #define PE5   (38+STM32F4X_ADC_NUM) //1:FSMC_A21
 | 
			
		||||
  #define PE6   (39+STM32F4X_ADC_NUM) //1:FSMC_A22
 | 
			
		||||
  #define PE7   (40+STM32F4X_ADC_NUM) //1:FSMC_D4
 | 
			
		||||
  #define PE8   (41+STM32F4X_ADC_NUM) //1:FSMC_D5
 | 
			
		||||
  #define PE9   (42+STM32F4X_ADC_NUM) //1:FSMC_D6 / TIM1_CH1
 | 
			
		||||
  #define PE10  (43+STM32F4X_ADC_NUM) //1:FSMC_D7
 | 
			
		||||
  #define PE11  (44+STM32F4X_ADC_NUM) //1:FSMC_D8 / TIM1_CH2
 | 
			
		||||
  #define PE12  (45+STM32F4X_ADC_NUM) //1:FSMC_D9
 | 
			
		||||
  #define PE13  (46+STM32F4X_ADC_NUM) //1:FSMC_D10 / TIM1_CH3
 | 
			
		||||
  #define PE14  (47+STM32F4X_ADC_NUM) //1:FSMC_D11 / TIM1_CH4
 | 
			
		||||
  #define PE15  (48+STM32F4X_ADC_NUM) //1:FSMC_D12
 | 
			
		||||
  #define PD8   (49+STM32F4X_ADC_NUM) //1:FSMC_D13 / USART3_TX
 | 
			
		||||
  #define PD9   (50+STM32F4X_ADC_NUM) //1:FSMC_D14 / USART3_RX
 | 
			
		||||
  #define PD10  (51+STM32F4X_ADC_NUM) //1:FSMC_D15
 | 
			
		||||
  #define PD11  (52+STM32F4X_ADC_NUM) //1:FSMC_A16
 | 
			
		||||
  #define PD12  (53+STM32F4X_ADC_NUM) //1:FSMC_A17 / TIM4_CH1
 | 
			
		||||
  #define PD13  (54+STM32F4X_ADC_NUM) //1:FSMC_A18 / TIM4_CH2
 | 
			
		||||
  #define PD14  (55+STM32F4X_ADC_NUM) //1:FSMC_D0 / TIM4_CH3
 | 
			
		||||
  #define PD15  (56+STM32F4X_ADC_NUM) //1:FSMC_D1 / TIM4_CH4
 | 
			
		||||
  #define PD0   (57+STM32F4X_ADC_NUM) //1:FSMC_D2
 | 
			
		||||
  #define PD1   (58+STM32F4X_ADC_NUM) //1:FSMC_D3
 | 
			
		||||
  #define PD3   (59+STM32F4X_ADC_NUM) //1:FSMC_CLK
 | 
			
		||||
  #define PD4   (60+STM32F4X_ADC_NUM) //1:FSMC_NOE
 | 
			
		||||
  #define PD5   (61+STM32F4X_ADC_NUM) //1:USART2_TX
 | 
			
		||||
  #define PD6   (62+STM32F4X_ADC_NUM) //1:USART2_RX
 | 
			
		||||
  #define PD7   (63+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PE0   (64+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PE1   (65+STM32F4X_ADC_NUM)
 | 
			
		||||
#endif
 | 
			
		||||
#if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio
 | 
			
		||||
  #define PF0   (66+STM32F4X_ADC_NUM) //1:FSMC_A0 / I2C2_SDA
 | 
			
		||||
  #define PF1   (67+STM32F4X_ADC_NUM) //1:FSMC_A1 / I2C2_SCL
 | 
			
		||||
  #define PF2   (68+STM32F4X_ADC_NUM) //1:FSMC_A2
 | 
			
		||||
  #define PF11  (69+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PF12  (70+STM32F4X_ADC_NUM) //1:FSMC_A6
 | 
			
		||||
  #define PF13  (71+STM32F4X_ADC_NUM) //1:FSMC_A7
 | 
			
		||||
  #define PF14  (72+STM32F4X_ADC_NUM) //1:FSMC_A8
 | 
			
		||||
  #define PF15  (73+STM32F4X_ADC_NUM) //1:FSMC_A9
 | 
			
		||||
  #define PG0   (74+STM32F4X_ADC_NUM) //1:FSMC_A10
 | 
			
		||||
  #define PG1   (75+STM32F4X_ADC_NUM) //1:FSMC_A11
 | 
			
		||||
  #define PG2   (76+STM32F4X_ADC_NUM) //1:FSMC_A12
 | 
			
		||||
  #define PG3   (77+STM32F4X_ADC_NUM) //1:FSMC_A13
 | 
			
		||||
  #define PG4   (78+STM32F4X_ADC_NUM) //1:FSMC_A14
 | 
			
		||||
  #define PG5   (79+STM32F4X_ADC_NUM) //1:FSMC_A15
 | 
			
		||||
  #define PG6   (80+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PG7   (81+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PG8   (82+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PG9   (83+STM32F4X_ADC_NUM) //1:USART6_RX
 | 
			
		||||
  #define PG10  (84+STM32F4X_ADC_NUM) //1:FSMC_NE3
 | 
			
		||||
  #define PG11  (85+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PG12  (86+STM32F4X_ADC_NUM) //1:FSMC_NE4
 | 
			
		||||
  #define PG13  (87+STM32F4X_ADC_NUM) //1:FSMC_A24
 | 
			
		||||
  #define PG14  (88+STM32F4X_ADC_NUM) //1:FSMC_A25 / USART6_TX
 | 
			
		||||
  #define PG15  (89+STM32F4X_ADC_NUM)
 | 
			
		||||
#endif
 | 
			
		||||
#if STM32F4X_PIN_NUM >= 176  //176 pins mcu, 140 gpio
 | 
			
		||||
  #define PI8   (90+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PI9   (91+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PI10  (92+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PI11  (93+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PH2   (94+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PH3   (95+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PH4   (96+STM32F4X_ADC_NUM) //1:I2C2_SCL
 | 
			
		||||
  #define PH5   (97+STM32F4X_ADC_NUM) //1:I2C2_SDA
 | 
			
		||||
  #define PH6   (98+STM32F4X_ADC_NUM) //1:TIM12_CH1
 | 
			
		||||
  #define PH7   (99+STM32F4X_ADC_NUM) //1:I2C3_SCL
 | 
			
		||||
  #define PH8   (100+STM32F4X_ADC_NUM) //1:I2C3_SDA
 | 
			
		||||
  #define PH9   (101+STM32F4X_ADC_NUM) //1:TIM12_CH2
 | 
			
		||||
  #define PH10  (102+STM32F4X_ADC_NUM) //1:TIM5_CH1
 | 
			
		||||
  #define PH11  (103+STM32F4X_ADC_NUM) //1:TIM5_CH2
 | 
			
		||||
  #define PH12  (104+STM32F4X_ADC_NUM) //1:TIM5_CH3
 | 
			
		||||
  #define PH13  (105+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PH14  (106+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PH15  (107+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PI0   (108+STM32F4X_ADC_NUM) //1:TIM5_CH4 / SPI2_NSS
 | 
			
		||||
  #define PI1   (109+STM32F4X_ADC_NUM) //1:SPI2_SCK
 | 
			
		||||
  #define PI2   (110+STM32F4X_ADC_NUM) //1:TIM8_CH4 /SPI2_MISO
 | 
			
		||||
  #define PI3   (111+STM32F4X_ADC_NUM) //1:SPI2_MOS
 | 
			
		||||
  #define PI4   (112+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PI5   (113+STM32F4X_ADC_NUM) //1:TIM8_CH1
 | 
			
		||||
  #define PI6   (114+STM32F4X_ADC_NUM) //1:TIM8_CH2
 | 
			
		||||
  #define PI7   (115+STM32F4X_ADC_NUM) //1:TIM8_CH3
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// This must be a literal
 | 
			
		||||
#define NUM_DIGITAL_PINS        (STM32F4X_GPIO_NUM)
 | 
			
		||||
// This must be a literal with a value less than or equal to MAX_ANALOG_INPUTS
 | 
			
		||||
#define NUM_ANALOG_INPUTS       (STM32F4X_ADC_NUM)
 | 
			
		||||
#define NUM_ANALOG_FIRST        35
 | 
			
		||||
 | 
			
		||||
// Below ADC, DAC and PWM definitions already done in the core
 | 
			
		||||
// Could be redefined here if needed
 | 
			
		||||
// ADC resolution is 12bits
 | 
			
		||||
//#define ADC_RESOLUTION          12
 | 
			
		||||
//#define DACC_RESOLUTION         12
 | 
			
		||||
 | 
			
		||||
// PWM resolution
 | 
			
		||||
/*
 | 
			
		||||
 * BEWARE:
 | 
			
		||||
 * Changing this value from the default (1000) will affect the PWM output value of analogWrite (to a PWM pin)
 | 
			
		||||
 * Since the pin is toggled on capture, if you change the frequency of the timer you have to adapt the compare value (analogWrite thinks you did)
 | 
			
		||||
 */
 | 
			
		||||
//#define PWM_FREQUENCY           20000
 | 
			
		||||
//The bottom values are the default and don't need to be redefined
 | 
			
		||||
//#define PWM_RESOLUTION          8
 | 
			
		||||
//#define PWM_MAX_DUTY_CYCLE      255
 | 
			
		||||
 | 
			
		||||
// Below SPI and I2C definitions already done in the core
 | 
			
		||||
// Could be redefined here if differs from the default one
 | 
			
		||||
// SPI Definitions
 | 
			
		||||
#define PIN_SPI_MOSI            PB15
 | 
			
		||||
#define PIN_SPI_MISO            PB14
 | 
			
		||||
#define PIN_SPI_SCK             PB13
 | 
			
		||||
#define PIN_SPI_SS              PB12
 | 
			
		||||
 | 
			
		||||
// I2C Definitions
 | 
			
		||||
#define PIN_WIRE_SDA            PB7
 | 
			
		||||
#define PIN_WIRE_SCL            PB6
 | 
			
		||||
 | 
			
		||||
// Timer Definitions
 | 
			
		||||
//Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c
 | 
			
		||||
#define TIMER_TONE              TIM7
 | 
			
		||||
#define TIMER_SERVO             TIM5
 | 
			
		||||
#define TIMER_SERIAL            TIM2
 | 
			
		||||
 | 
			
		||||
// UART Definitions
 | 
			
		||||
// Define here Serial instance number to map on Serial generic name
 | 
			
		||||
#define SERIAL_UART_INSTANCE    1 //ex: 2 for Serial2 (USART2)
 | 
			
		||||
// DEBUG_UART could be redefined to print on another instance than 'Serial'
 | 
			
		||||
//#define DEBUG_UART              ((USART_TypeDef *) U(S)ARTX) // ex: USART3
 | 
			
		||||
// DEBUG_UART baudrate, default: 9600 if not defined
 | 
			
		||||
//#define DEBUG_UART_BAUDRATE     x
 | 
			
		||||
// DEBUG_UART Tx pin name, default: the first one found in PinMap_UART_TX for DEBUG_UART
 | 
			
		||||
//#define DEBUG_PINNAME_TX        PX_n // PinName used for TX
 | 
			
		||||
 | 
			
		||||
// Default pin used for 'Serial' instance (ex: ST-Link)
 | 
			
		||||
// Mandatory for Firmata
 | 
			
		||||
#define PIN_SERIAL_RX           PA10
 | 
			
		||||
#define PIN_SERIAL_TX           PA9
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
} // extern "C"
 | 
			
		||||
#endif
 | 
			
		||||
/*----------------------------------------------------------------------------
 | 
			
		||||
 *        Arduino objects - C++ only
 | 
			
		||||
 *----------------------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
// These serial port names are intended to allow libraries and architecture-neutral
 | 
			
		||||
// sketches to automatically default to the correct port name for a particular type
 | 
			
		||||
// of use.  For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN,
 | 
			
		||||
// the first hardware serial port whose RX/TX pins are not dedicated to another use.
 | 
			
		||||
//
 | 
			
		||||
// SERIAL_PORT_MONITOR        Port which normally prints to the Arduino Serial Monitor
 | 
			
		||||
//
 | 
			
		||||
// SERIAL_PORT_USBVIRTUAL     Port which is USB virtual serial
 | 
			
		||||
//
 | 
			
		||||
// SERIAL_PORT_LINUXBRIDGE    Port which connects to a Linux system via Bridge library
 | 
			
		||||
//
 | 
			
		||||
// SERIAL_PORT_HARDWARE       Hardware serial port, physical RX & TX pins.
 | 
			
		||||
//
 | 
			
		||||
// SERIAL_PORT_HARDWARE_OPEN  Hardware serial ports which are open for use.  Their RX & TX
 | 
			
		||||
//                            pins are NOT connected to anything by default.
 | 
			
		||||
#define SERIAL_PORT_MONITOR     Serial
 | 
			
		||||
#define SERIAL_PORT_HARDWARE    Serial1
 | 
			
		||||
#endif
 | 
			
		||||
@@ -0,0 +1,380 @@
 | 
			
		||||
/*
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 * Copyright (c) 2019, STMicroelectronics
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 * Automatically generated from STM32F407Z(E-G)Tx.xml
 | 
			
		||||
 */
 | 
			
		||||
#include <Arduino.h>
 | 
			
		||||
#include <PeripheralPins.h>
 | 
			
		||||
 | 
			
		||||
/* =====
 | 
			
		||||
 * Note: Commented lines are alternative possibilities which are not used by default.
 | 
			
		||||
 *       If you change them, you should know what you're doing first.
 | 
			
		||||
 * =====
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
//*** ADC ***
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_ADC_MODULE_ENABLED
 | 
			
		||||
const PinMap PinMap_ADC[] = {
 | 
			
		||||
  {PA_0,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0, 0)}, // ADC1_IN0      E0_DIR
 | 
			
		||||
  {PA_1,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC1_IN1      BLTOUCH_2
 | 
			
		||||
  {PA_2,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC1_IN2      BLTOUCH_4
 | 
			
		||||
  {PA_3,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC1_IN3      E1_EN
 | 
			
		||||
  {PA_4,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC1_IN4      TF_SS
 | 
			
		||||
  {PA_5,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC1_IN5      TF_SCLK
 | 
			
		||||
  {PA_6,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC1_IN6      TF_MISO
 | 
			
		||||
  {PA_7,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC1_IN7      LED
 | 
			
		||||
  {PB_0,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC1_IN8      HEATER2
 | 
			
		||||
  {PB_1,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC1_IN9      HEATER0
 | 
			
		||||
  {PC_0,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC1_IN10    Z_EN
 | 
			
		||||
  {PC_1,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC1_IN11    EXP_14
 | 
			
		||||
  {PC_2,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC1_IN12    Z_DIR
 | 
			
		||||
  {PC_3,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC1_IN13    E0_EN
 | 
			
		||||
  {PC_4,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC1_IN14    EXP_8
 | 
			
		||||
  {PC_5,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC1_IN15    EXP_7
 | 
			
		||||
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio, 24 ADC
 | 
			
		||||
    {PF_3,  ADC3,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC3_IN9    TH_0
 | 
			
		||||
    {PF_4,  ADC3,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC3_IN14  TH_1
 | 
			
		||||
    {PF_5,  ADC3,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC3_IN15  TH_2
 | 
			
		||||
    {PF_6,  ADC3,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC3_IN4    TH_3
 | 
			
		||||
    {PF_7,  ADC3,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC3_IN5    EXP_13
 | 
			
		||||
    {PF_8,  ADC3,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC3_IN6    EXP_3
 | 
			
		||||
    {PF_9,  ADC3,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC3_IN7    EXP_6
 | 
			
		||||
    {PF_10, ADC3,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC3_IN8    EXP_5
 | 
			
		||||
  #endif
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//*** DAC ***
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_DAC_MODULE_ENABLED
 | 
			
		||||
const PinMap PinMap_DAC[] = {
 | 
			
		||||
  {PA_4,  DAC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // DAC_OUT1
 | 
			
		||||
  {PA_5,  DAC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // DAC_OUT2
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//*** I2C ***
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_I2C_MODULE_ENABLED
 | 
			
		||||
const PinMap PinMap_I2C_SDA[] = {
 | 
			
		||||
  {PB_7,  I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)},
 | 
			
		||||
  {PB_9,  I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)},
 | 
			
		||||
  {PB_11, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
 | 
			
		||||
  {PC_9,  I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)},
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144   // 144 pins mcu, 114 gpio
 | 
			
		||||
    #if STM32F4X_PIN_NUM >= 176
 | 
			
		||||
      {PH_5,  I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
 | 
			
		||||
      {PH_8,  I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)},
 | 
			
		||||
    #else
 | 
			
		||||
      {PF_0,  I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
 | 
			
		||||
    #endif
 | 
			
		||||
  #endif
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_I2C_MODULE_ENABLED
 | 
			
		||||
const PinMap PinMap_I2C_SCL[] = {
 | 
			
		||||
  {PA_8,  I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)},
 | 
			
		||||
  {PB_6,  I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)},
 | 
			
		||||
  {PB_8,  I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)},
 | 
			
		||||
  {PB_10, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144   // 144 pins mcu, 114 gpio
 | 
			
		||||
    #if STM32F4X_PIN_NUM >= 176
 | 
			
		||||
      //{PF_1,  I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
 | 
			
		||||
      {PH_4,  I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
 | 
			
		||||
      {PH_7,  I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)},
 | 
			
		||||
    #else
 | 
			
		||||
      {PF_1,  I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
 | 
			
		||||
    #endif
 | 
			
		||||
  #endif
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//*** PWM ***
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_TIM_MODULE_ENABLED
 | 
			
		||||
const PinMap PinMap_PWM[] = {
 | 
			
		||||
 | 
			
		||||
  // Some pins can perform PWM from more than one timer. These were selected to utilize as many channels as
 | 
			
		||||
  // possible from timers which were already dedicated to PWM output.
 | 
			
		||||
  // TIM1 = [FAN4, FAN5, HEATER6, FAN7]
 | 
			
		||||
  // TIM2 = [, HEATER1, BED, ]
 | 
			
		||||
  // TIM3 = [, , HEATER2, HEATER0]
 | 
			
		||||
  // TIM4 = [HEATER5, HEATER4, , HEATER3]
 | 
			
		||||
  // TIM8 = [FAN3, HEATER7, FAN2, FAN6]
 | 
			
		||||
  // TIM9 = [FAN0, FAN1, , ]
 | 
			
		||||
 | 
			
		||||
  {PB_1,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4    HEATER0
 | 
			
		||||
  {PA_1,  TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2    HEATER1
 | 
			
		||||
  {PB_0,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3    HEATER2
 | 
			
		||||
  {PD_15, TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4    HEATER3
 | 
			
		||||
  {PD_13, TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2    HEATER4
 | 
			
		||||
  {PD_12, TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1    HEATER5
 | 
			
		||||
  {PE_13, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3    HEATER6
 | 
			
		||||
  {PI_6,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 0)}, // TIM8_CH2    HEATER7
 | 
			
		||||
  {PA_2,  TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3    BED
 | 
			
		||||
 | 
			
		||||
  {PE_5,  TIM9,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 1, 0)}, // TIM9_CH1    FAN0
 | 
			
		||||
  {PE_6,  TIM9,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 2, 0)}, // TIM9_CH2    FAN1
 | 
			
		||||
  {PC_8,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 3, 0)}, // TIM8_CH3    FAN2
 | 
			
		||||
  {PI_5,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 0)}, // TIM8_CH1    FAN3
 | 
			
		||||
  {PE_9,  TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1    FAN4
 | 
			
		||||
  {PE_11, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2    FAN5
 | 
			
		||||
  {PC_9,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 4, 0)}, // TIM8_CH4    FAN6
 | 
			
		||||
  {PE_14, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4    FAN7
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  // Alternate timer assignments for pins commonly using PWM
 | 
			
		||||
  //{PB_1,  TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N HEATER0
 | 
			
		||||
  //{PB_1,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 3, 1)}, // TIM8_CH3N HEATER0
 | 
			
		||||
  //{PA_1,  TIM5,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2  HEATER1
 | 
			
		||||
  //{PB_0,  TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N HEATER2
 | 
			
		||||
  //{PB_0,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N HEATER2
 | 
			
		||||
  //{PA_2,  TIM5,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 3, 0)}, // TIM5_CH3  BED
 | 
			
		||||
  //{PA_2,  TIM9,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 1, 0)}, // TIM9_CH1  BED
 | 
			
		||||
  //{PC_8,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3  FAN2
 | 
			
		||||
  //{PC_9,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4  FAN6
 | 
			
		||||
 | 
			
		||||
  // Pins with an available timer channel, on a timer already allocated for PWM.
 | 
			
		||||
  // These can be freely used for purposes requiring PWM, without creating new timer conflicts.
 | 
			
		||||
  // This pins are very likely already used for other purposes and enabling PWM on them won't be useful.
 | 
			
		||||
  {PB_11, TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4    BLTouch / Probe Output
 | 
			
		||||
  {PC_6,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1    ESP8266 connector. Available if 8266 isn't used
 | 
			
		||||
  {PC_7,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2    ESP8266 connector. Available if 8266 isn't used
 | 
			
		||||
 | 
			
		||||
  /*
 | 
			
		||||
   * Pins not utilizing hardware PWM on the GTR.
 | 
			
		||||
   * Uncomment the corresponding line if you want to have HardwarePWM on some pins.
 | 
			
		||||
   * WARNING: check timers' usage first to avoid conflicts.
 | 
			
		||||
   * If you don't know what you're doing leave things as they are or you WILL break something (including hardware)
 | 
			
		||||
   */
 | 
			
		||||
  //{PA_0,  TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
 | 
			
		||||
  //{PA_0,  TIM5,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 1, 0)}, // TIM5_CH1
 | 
			
		||||
  //{PA_3,  TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4
 | 
			
		||||
  //{PA_3,  TIM5,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 4, 0)}, // TIM5_CH4
 | 
			
		||||
  //{PA_3,  TIM9,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 2, 0)}, // TIM9_CH2
 | 
			
		||||
  //{PA_5,  TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
 | 
			
		||||
  //{PA_5,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 1)}, // TIM8_CH1N
 | 
			
		||||
  //{PA_6,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1
 | 
			
		||||
  //{PA_6,  TIM13,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM13, 1, 0)}, // TIM13_CH1
 | 
			
		||||
  //{PA_7,  TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N
 | 
			
		||||
  //{PA_7,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
 | 
			
		||||
  //{PA_7,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 1)}, // TIM8_CH1N
 | 
			
		||||
  //{PA_7,  TIM14,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM14, 1, 0)}, // TIM14_CH1
 | 
			
		||||
  //{PA_8,  TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1
 | 
			
		||||
  //{PA_9,  TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2
 | 
			
		||||
  //{PA_10, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3
 | 
			
		||||
  //{PA_11, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4
 | 
			
		||||
  //{PA_15, TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
 | 
			
		||||
  //{PB_3,  TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2
 | 
			
		||||
  //{PB_4,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1
 | 
			
		||||
  //{PB_5,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
 | 
			
		||||
  //{PB_6,  TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1
 | 
			
		||||
  //{PB_7,  TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2
 | 
			
		||||
  //{PB_8,  TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3
 | 
			
		||||
  //{PB_8,  TIM10,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM10, 1, 0)}, // TIM10_CH1
 | 
			
		||||
  //{PB_9,  TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4
 | 
			
		||||
  //{PB_9,  TIM11,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM11, 1, 0)}, // TIM11_CH1
 | 
			
		||||
  //{PB_10, TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3
 | 
			
		||||
  //{PB_13, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N
 | 
			
		||||
  //{PB_14, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N
 | 
			
		||||
  //{PB_14, TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N
 | 
			
		||||
  //{PB_14, TIM12,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM12, 1, 0)}, // TIM12_CH1
 | 
			
		||||
  //{PB_15, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N
 | 
			
		||||
  //{PB_15, TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 3, 1)}, // TIM8_CH3N
 | 
			
		||||
  //{PB_15, TIM12,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM12, 2, 0)}, // TIM12_CH2
 | 
			
		||||
  //{PC_6,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 0)}, // TIM8_CH1
 | 
			
		||||
  //{PC_7,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
 | 
			
		||||
  //{PC_7,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 0)}, // TIM8_CH2
 | 
			
		||||
  //{PD_14, TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3
 | 
			
		||||
  //{PE_8,  TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N
 | 
			
		||||
  //{PE_10, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N
 | 
			
		||||
  //{PE_12, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N
 | 
			
		||||
  //{PF_6,  TIM10,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM10, 1, 0)}, // TIM10_CH1
 | 
			
		||||
  //{PF_7,  TIM11,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM11, 1, 0)}, // TIM11_CH1
 | 
			
		||||
  //{PF_8,  TIM13,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM13, 1, 0)}, // TIM13_CH1
 | 
			
		||||
  //{PF_9,  TIM14,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM14, 1, 0)}, // TIM14_CH1
 | 
			
		||||
  //{PH_10,  TIM5,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 1, 0)}, // TIM5_CH1
 | 
			
		||||
  //{PH_6,  TIM12,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM12, 1, 0)}, // TIM12_CH1
 | 
			
		||||
  //{PH_11,  TIM5,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//*** SERIAL ***
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_UART_MODULE_ENABLED
 | 
			
		||||
const PinMap PinMap_UART_TX[] = {
 | 
			
		||||
  {PA_9,  USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
 | 
			
		||||
  {PD_8,  USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  {PC_6,  USART6,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio
 | 
			
		||||
    //{PG_14, USART6,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
  #endif
 | 
			
		||||
  //{PB_6,  USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
 | 
			
		||||
  //{PA_2,  USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
  //{PD_5,  USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
  //{PB_10, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  //{PC_10, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  //{PA_0,  UART4,   STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)},
 | 
			
		||||
  //{PC_10, UART4,   STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)},
 | 
			
		||||
  //{PC_12, UART5,   STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART5)},
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_UART_RX[] = {
 | 
			
		||||
  {PA_10, USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
 | 
			
		||||
  {PD_9,  USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  {PC_7,  USART6,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
  //{PA_1,  UART4,   STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)},
 | 
			
		||||
  //{PA_3,  USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
  //{PB_7,  USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
 | 
			
		||||
  //{PB_11, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  //{PC_11, UART4,   STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)},
 | 
			
		||||
  //{PC_11, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  //{PD_2,  UART5,   STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART5)},
 | 
			
		||||
  //{PD_6,  USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio
 | 
			
		||||
    //{PG_9,  USART6,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
  #endif
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_UART_RTS[] = {
 | 
			
		||||
  //{PA_1,  USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
  //{PA_12, USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
 | 
			
		||||
  //{PB_14, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  //{PD_4,  USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
  //{PD_12, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio
 | 
			
		||||
    //{PG_8,  USART6,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
    //{PG_12, USART6,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
  #endif
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_UART_CTS[] = {
 | 
			
		||||
  //{PA_0,  USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
  //{PA_11, USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
 | 
			
		||||
  //{PB_13, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  //{PD_3,  USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
  //{PD_11, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio
 | 
			
		||||
    //{PG_13, USART6,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
    //{PG_15, USART6,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
  #endif
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//*** SPI ***
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SPI_MODULE_ENABLED
 | 
			
		||||
const PinMap PinMap_SPI_MOSI[] = {
 | 
			
		||||
  //{PB_5,  SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)},
 | 
			
		||||
  {PA_7,  SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)},
 | 
			
		||||
  {PB_15, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
 | 
			
		||||
  {PC_12, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_SPI_MISO[] = {
 | 
			
		||||
  {PA_6,  SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)},
 | 
			
		||||
  {PB_14, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
 | 
			
		||||
  {PC_11, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_SPI_SCLK[] = {
 | 
			
		||||
  {PA_5,  SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)},
 | 
			
		||||
  {PB_13, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
 | 
			
		||||
  {PC_10, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_SPI_SSEL[] = {
 | 
			
		||||
  {PA_4,  SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)},
 | 
			
		||||
  {PB_12, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
 | 
			
		||||
  {PA_15, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//*** CAN ***
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_CAN_MODULE_ENABLED
 | 
			
		||||
#error "CAN bus isn't available on this board. Driver should be disabled."
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//*** ETHERNET ***
 | 
			
		||||
#ifdef HAL_ETH_MODULE_ENABLED
 | 
			
		||||
#error "Ethernet port isn't available on this board. Driver should be disabled."
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//*** No QUADSPI ***
 | 
			
		||||
 | 
			
		||||
//*** USB ***
 | 
			
		||||
#ifdef HAL_PCD_MODULE_ENABLED
 | 
			
		||||
const PinMap PinMap_USB_OTG_FS[] = {
 | 
			
		||||
  //{PA_8,  USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_SOF   used by LCD
 | 
			
		||||
  //{PA_9,  USB_OTG_FS, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF_NONE)},     // USB_OTG_FS_VBUS  available on wifi port, if empty
 | 
			
		||||
  //{PA_10, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_ID    available on UART1_RX if not used
 | 
			
		||||
  {PA_11, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_DM
 | 
			
		||||
  {PA_12, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_DP
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_USB_OTG_HS[] = { /*
 | 
			
		||||
  #ifdef USE_USB_HS_IN_FS
 | 
			
		||||
    {PB_12, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_PULLUP, GPIO_AF12_OTG_HS_FS)}, // USB_OTG_HS_ID
 | 
			
		||||
    {PB_13, USB_OTG_HS, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF_NONE)}, // USB_OTG_HS_VBUS
 | 
			
		||||
    {PB_14, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_OTG_HS_FS)}, // USB_OTG_HS_DM
 | 
			
		||||
    {PB_15, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_OTG_HS_FS)}, // USB_OTG_HS_DP
 | 
			
		||||
  #else
 | 
			
		||||
    #error "USB in HS mode isn't supported by the board"
 | 
			
		||||
    {PA_3,  USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D0
 | 
			
		||||
    {PB_0,  USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D1
 | 
			
		||||
    {PB_1,  USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D2
 | 
			
		||||
    {PB_5,  USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D7
 | 
			
		||||
    {PB_10, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D3
 | 
			
		||||
    {PB_12, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D5
 | 
			
		||||
    {PB_13, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D6
 | 
			
		||||
    {PC_0,  USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_STP
 | 
			
		||||
    {PC_2,  USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_DIR
 | 
			
		||||
    {PC_3,  USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_NXT
 | 
			
		||||
  #endif // USE_USB_HS_IN_FS
 | 
			
		||||
  */
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
@@ -0,0 +1,50 @@
 | 
			
		||||
/* SYS_WKUP */
 | 
			
		||||
#ifdef PWR_WAKEUP_PIN1
 | 
			
		||||
  SYS_WKUP1 = PA_0,
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef PWR_WAKEUP_PIN2
 | 
			
		||||
  SYS_WKUP2 = NC,
 | 
			
		||||
#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_D7  = PB_5,
 | 
			
		||||
  USB_OTG_HS_ULPI_D3  = PB_10,
 | 
			
		||||
  USB_OTG_HS_ULPI_D4  = PB_11,
 | 
			
		||||
  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
 | 
			
		||||
@@ -0,0 +1,52 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#define HAL_MODULE_ENABLED
 | 
			
		||||
#define HAL_ADC_MODULE_ENABLED
 | 
			
		||||
#define HAL_CRC_MODULE_ENABLED
 | 
			
		||||
#define HAL_DMA_MODULE_ENABLED
 | 
			
		||||
#define HAL_GPIO_MODULE_ENABLED
 | 
			
		||||
#define HAL_I2C_MODULE_ENABLED
 | 
			
		||||
#define HAL_PWR_MODULE_ENABLED
 | 
			
		||||
#define HAL_RCC_MODULE_ENABLED
 | 
			
		||||
//#define HAL_RTC_MODULE_ENABLED Real Time Clock...do we use it?
 | 
			
		||||
#define HAL_SPI_MODULE_ENABLED
 | 
			
		||||
#define HAL_TIM_MODULE_ENABLED
 | 
			
		||||
#define HAL_USART_MODULE_ENABLED
 | 
			
		||||
#define HAL_CORTEX_MODULE_ENABLED
 | 
			
		||||
//#define HAL_UART_MODULE_ENABLED // by default
 | 
			
		||||
//#define HAL_PCD_MODULE_ENABLED  // Since STM32 v3.10700.191028 this is automatically added if any type of USB is enabled (as in Arduino IDE)
 | 
			
		||||
 | 
			
		||||
#undef HAL_SD_MODULE_ENABLED
 | 
			
		||||
#undef HAL_DAC_MODULE_ENABLED
 | 
			
		||||
#undef HAL_FLASH_MODULE_ENABLED
 | 
			
		||||
#undef HAL_CAN_MODULE_ENABLED
 | 
			
		||||
#undef HAL_CAN_LEGACY_MODULE_ENABLED
 | 
			
		||||
#undef HAL_CEC_MODULE_ENABLED
 | 
			
		||||
#undef HAL_CRYP_MODULE_ENABLED
 | 
			
		||||
#undef HAL_DCMI_MODULE_ENABLED
 | 
			
		||||
#undef HAL_DMA2D_MODULE_ENABLED
 | 
			
		||||
#undef HAL_ETH_MODULE_ENABLED
 | 
			
		||||
#undef HAL_NAND_MODULE_ENABLED
 | 
			
		||||
#undef HAL_NOR_MODULE_ENABLED
 | 
			
		||||
#undef HAL_PCCARD_MODULE_ENABLED
 | 
			
		||||
#undef HAL_SRAM_MODULE_ENABLED
 | 
			
		||||
#undef HAL_SDRAM_MODULE_ENABLED
 | 
			
		||||
#undef HAL_HASH_MODULE_ENABLED
 | 
			
		||||
#undef HAL_EXTI_MODULE_ENABLED
 | 
			
		||||
#undef HAL_SMBUS_MODULE_ENABLED
 | 
			
		||||
#undef HAL_I2S_MODULE_ENABLED
 | 
			
		||||
#undef HAL_IWDG_MODULE_ENABLED
 | 
			
		||||
#undef HAL_LTDC_MODULE_ENABLED
 | 
			
		||||
#undef HAL_DSI_MODULE_ENABLED
 | 
			
		||||
#undef HAL_QSPI_MODULE_ENABLED
 | 
			
		||||
#undef HAL_RNG_MODULE_ENABLED
 | 
			
		||||
#undef HAL_SAI_MODULE_ENABLED
 | 
			
		||||
#undef HAL_IRDA_MODULE_ENABLED
 | 
			
		||||
#undef HAL_SMARTCARD_MODULE_ENABLED
 | 
			
		||||
#undef HAL_WWDG_MODULE_ENABLED
 | 
			
		||||
//#undef HAL_HCD_MODULE_ENABLED
 | 
			
		||||
#undef HAL_FMPI2C_MODULE_ENABLED
 | 
			
		||||
#undef HAL_SPDIFRX_MODULE_ENABLED
 | 
			
		||||
#undef HAL_DFSDM_MODULE_ENABLED
 | 
			
		||||
#undef HAL_LPTIM_MODULE_ENABLED
 | 
			
		||||
#undef HAL_MMC_MODULE_ENABLED
 | 
			
		||||
							
								
								
									
										204
									
								
								buildroot/share/PlatformIO/variants/BIGTREE_GTR_V1/ldscript.ld
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										204
									
								
								buildroot/share/PlatformIO/variants/BIGTREE_GTR_V1/ldscript.ld
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,204 @@
 | 
			
		||||
/*
 | 
			
		||||
*****************************************************************************
 | 
			
		||||
**
 | 
			
		||||
 | 
			
		||||
**  File        : LinkerScript.ld
 | 
			
		||||
**
 | 
			
		||||
**  Abstract    : Linker script for STM32F407ZGTx Device with
 | 
			
		||||
**                1024KByte 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.
 | 
			
		||||
**
 | 
			
		||||
*****************************************************************************
 | 
			
		||||
** @attention
 | 
			
		||||
**
 | 
			
		||||
** <h2><center>© COPYRIGHT(c) 2014 Ac6</center></h2>
 | 
			
		||||
**
 | 
			
		||||
** Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
** are permitted provided that the following conditions are met:
 | 
			
		||||
**   1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
**      this list of conditions and the following disclaimer.
 | 
			
		||||
**   2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
**      this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
**      and/or other materials provided with the distribution.
 | 
			
		||||
**   3. Neither the name of Ac6 nor the names of its contributors
 | 
			
		||||
**      may be used to endorse or promote products derived from this software
 | 
			
		||||
**      without specific prior written permission.
 | 
			
		||||
**
 | 
			
		||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
**
 | 
			
		||||
*****************************************************************************
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/* 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
 | 
			
		||||
{
 | 
			
		||||
FLASH (rx)      : ORIGIN = 0x8008000, LENGTH = 1024K
 | 
			
		||||
RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 128K
 | 
			
		||||
CCMRAM (rw)      : ORIGIN = 0x10000000, LENGTH = 64K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* 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):
 | 
			
		||||
  {
 | 
			
		||||
    . = 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):
 | 
			
		||||
  {
 | 
			
		||||
    . = 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
 | 
			
		||||
 | 
			
		||||
  _siccmram = LOADADDR(.ccmram);
 | 
			
		||||
 | 
			
		||||
  /* CCM-RAM section
 | 
			
		||||
   *
 | 
			
		||||
   * IMPORTANT NOTE!
 | 
			
		||||
   * If initialized variables will be placed in this section,
 | 
			
		||||
   * the startup code needs to be modified to copy the init-values.
 | 
			
		||||
   */
 | 
			
		||||
  .ccmram :
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    _sccmram = .;       /* create a global symbol at ccmram start */
 | 
			
		||||
    *(.ccmram)
 | 
			
		||||
    *(.ccmram*)
 | 
			
		||||
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    _eccmram = .;       /* create a global symbol at ccmram end */
 | 
			
		||||
  } >CCMRAM 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(4);
 | 
			
		||||
    PROVIDE ( end = . );
 | 
			
		||||
    PROVIDE ( _end = . );
 | 
			
		||||
    . = . + _Min_Heap_Size;
 | 
			
		||||
    . = . + _Min_Stack_Size;
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
  } >RAM
 | 
			
		||||
 | 
			
		||||
  /* Remove information from the standard libraries */
 | 
			
		||||
  /DISCARD/ :
 | 
			
		||||
  {
 | 
			
		||||
    libc.a ( * )
 | 
			
		||||
    libm.a ( * )
 | 
			
		||||
    libgcc.a ( * )
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .ARM.attributes 0 : { *(.ARM.attributes) }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										260
									
								
								buildroot/share/PlatformIO/variants/BIGTREE_GTR_V1/variant.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										260
									
								
								buildroot/share/PlatformIO/variants/BIGTREE_GTR_V1/variant.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,260 @@
 | 
			
		||||
/*
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 * Copyright (c) 2017, STMicroelectronics
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "pins_arduino.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// Pin number
 | 
			
		||||
// This array allows to wrap Arduino pin number(Dx or x)
 | 
			
		||||
// to STM32 PinName (PX_n)
 | 
			
		||||
const PinName digitalPin[] = {
 | 
			
		||||
#if STM32F4X_PIN_NUM >= 64  //64 pins mcu, 51 gpio
 | 
			
		||||
  PC_13, //D0
 | 
			
		||||
  PC_14, //D1  - OSC32_IN
 | 
			
		||||
  PC_15, //D2  - OSC32_OUT
 | 
			
		||||
  PH_0,  //D3  - OSC_IN
 | 
			
		||||
  PH_1,  //D4  - OSC_OUT
 | 
			
		||||
  PB_2,  //D5  - BOOT1
 | 
			
		||||
  PB_10, //D6  - 1:SPI2_SCK / I2C2_SCL / USART3_TX / TIM2_CH3
 | 
			
		||||
  PB_11, //D7  - 1:I2C2_SDA / USART3_RX / TIM2_CH4
 | 
			
		||||
  PB_12, //D8  - 1:SPI2_NSS / OTG_HS_ID
 | 
			
		||||
  PB_13, //D9  - 1:SPI2_SCK  2:OTG_HS_VBUS
 | 
			
		||||
  PB_14, //D10 - 1:SPI2_MISO / TIM12_CH1 / OTG_HS_DM
 | 
			
		||||
  PB_15, //D11 - SPI2_MOSI / TIM12_CH2 / OTG_HS_DP
 | 
			
		||||
  PC_6,  //D12 - 1:TIM8_CH1 / SDIO_D6 / USART6_TX / TIM3_CH1
 | 
			
		||||
  PC_7,  //D13 - 1:TIM8_CH2 / SDIO_D7 / USART6_RX / TIM3_CH2
 | 
			
		||||
  PC_8,  //D14 - 1:TIM8_CH3 / SDIO_D0 / TIM3_CH3
 | 
			
		||||
  PC_9,  //D15 - 1:TIM8_CH4 / SDIO_D1 / TIM3_CH4
 | 
			
		||||
  PA_8,  //D16 - 1:TIM1_CH1 / I2C3_SCL / OTG_FS_SOF
 | 
			
		||||
  PA_9,  //D17 - 1:USART1_TX / TIM1_CH2  2:OTG_FS_VBUS
 | 
			
		||||
  PA_10, //D18 - 1:USART1_RX / TIM1_CH3 / OTG_FS_ID
 | 
			
		||||
  PA_11, //D19 - 1:TIM1_CH4 / OTG_FS_DM
 | 
			
		||||
  PA_12, //D20 - 1:OTG_FS_DP
 | 
			
		||||
  PA_13, //D21 - 0:JTMS-SWDIO
 | 
			
		||||
  PA_14, //D22 - 0:JTCK-SWCLK
 | 
			
		||||
  PA_15, //D23 - 0:JTDI  1:SPI3_NSS / SPI1_NSS
 | 
			
		||||
  PC_10, //D24 - 1:UART4_TX / SPI3_SCK / SDIO_D2 / USART3_TX
 | 
			
		||||
  PC_11, //D25 - 1:UART4_RX / SPI3_MISO / SDIO_D3 / USART3_RX
 | 
			
		||||
  PC_12, //D26 - 1:UART5_TX / SPI3_MOSI / SDIO_CK
 | 
			
		||||
  PD_2,  //D27 - 1:UART5_RX / SDIO_CMD
 | 
			
		||||
  PB_3,  //D28 - 0:JTDO  1:SPI3_SCK / TIM2_CH2 / SPI1_SCK
 | 
			
		||||
  PB_4,  //D29 - 0:NJTRST  1:SPI3_MISO / TIM3_CH1 / SPI1_MISO
 | 
			
		||||
  PB_5,  //D30 - 1:TIM3_CH2 / SPI1_MOSI / SPI3_MOSI
 | 
			
		||||
  PB_6,  //D31 - 1:I2C1_SCL / TIM4_CH1 / USART1_TX
 | 
			
		||||
  PB_7,  //D32 - 1:I2C1_SDA / TIM4_CH2 / USART1_RX
 | 
			
		||||
  PB_8,  //D33 - 1:I2C1_SCL / TIM4_CH3 / SDIO_D4 / TIM10_CH1
 | 
			
		||||
  PB_9,  //D34 - 1:I2C1_SDA / TIM4_CH4 / SDIO_D5 / TIM11_CH1 / SPI2_NSS
 | 
			
		||||
  PA_0,  //D35/A0 - 1:UART4_TX / TIM5_CH1  2:ADC123_IN0
 | 
			
		||||
  PA_1,  //D36/A1 - 1:UART4_RX / TIM5_CH2 / TIM2_CH2  2:ADC123_IN1
 | 
			
		||||
  PA_2,  //D37/A2 - 1:USART2_TX /TIM5_CH3 / TIM9_CH1 / TIM2_CH3  2:ADC123_IN2
 | 
			
		||||
  PA_3,  //D38/A3 - 1:USART2_RX /TIM5_CH4 / TIM9_CH2 / TIM2_CH4  2:ADC123_IN3
 | 
			
		||||
  PA_4,  //D39/A4 - NOT FT 1:SPI1_NSS / SPI3_NSS / USART2_CK  2:ADC12_IN4 / DAC_OUT1
 | 
			
		||||
  PA_5,  //D40/A5 - NOT FT 1:SPI1_SCK  2:ADC12_IN5 / DAC_OUT2
 | 
			
		||||
  PA_6,  //D41/A6 - 1:SPI1_MISO / TIM13_CH1 / TIM3_CH1  2:ADC12_IN6
 | 
			
		||||
  PA_7,  //D42/A7 - 1:SPI1_MOSI / TIM14_CH1 / TIM3_CH2  2:ADC12_IN7
 | 
			
		||||
  PB_0,  //D43/A8 - 1:TIM3_CH3  2:ADC12_IN8
 | 
			
		||||
  PB_1,  //D44/A9 - 1:TIM3_CH4  2:ADC12_IN9
 | 
			
		||||
  PC_0,  //D45/A10 - 1:  2:ADC123_IN10
 | 
			
		||||
  PC_1,  //D46/A11 - 1:  2:ADC123_IN11
 | 
			
		||||
  PC_2,  //D47/A12 - 1:SPI2_MISO  2:ADC123_IN12
 | 
			
		||||
  PC_3,  //D48/A13 - 1:SPI2_MOSI  2:ADC123_IN13
 | 
			
		||||
  PC_4,  //D49/A14 - 1:  2:ADC12_IN14
 | 
			
		||||
  PC_5,  //D50/A15 - 1:  2:ADC12_IN15
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144
 | 
			
		||||
    PF_3,  //D51/A16 - 1:FSMC_A3  2:ADC3_IN9
 | 
			
		||||
    PF_4,  //D52/A17 - 1:FSMC_A4  2:ADC3_IN14
 | 
			
		||||
    PF_5,  //D53/A18 - 1:FSMC_A5  2:ADC3_IN15
 | 
			
		||||
    PF_6,  //D54/A19 - 1:TIM10_CH1  2:ADC3_IN4
 | 
			
		||||
    PF_7,  //D55/A20 - 1:TIM11_CH1  2:ADC3_IN5
 | 
			
		||||
    PF_8,  //D56/A21 - 1:TIM13_CH1  2:ADC3_IN6
 | 
			
		||||
    PF_9,  //D57/A22 - 1;TIM14_CH1  2:ADC3_IN7
 | 
			
		||||
    PF_10, //D58/A23 - 2:ADC3_IN8
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
#if STM32F4X_PIN_NUM >= 100  //100 pins mcu, 82 gpio
 | 
			
		||||
  PE_2,  //D59 - 1:FSMC_A23
 | 
			
		||||
  PE_3,  //D60 - 1:FSMC_A19
 | 
			
		||||
  PE_4,  //D61 - 1:FSMC_A20
 | 
			
		||||
  PE_5,  //D62 - 1:FSMC_A21
 | 
			
		||||
  PE_6,  //D63 - 1:FSMC_A22
 | 
			
		||||
  PE_7,  //D64 - 1:FSMC_D4
 | 
			
		||||
  PE_8,  //D65 - 1:FSMC_D5
 | 
			
		||||
  PE_9,  //D66 - 1:FSMC_D6 / TIM1_CH1
 | 
			
		||||
  PE_10, //D67 - 1:FSMC_D7
 | 
			
		||||
  PE_11, //D68 - 1:FSMC_D8 / TIM1_CH2
 | 
			
		||||
  PE_12, //D69 - 1:FSMC_D9
 | 
			
		||||
  PE_13, //D70 - 1:FSMC_D10 / TIM1_CH3
 | 
			
		||||
  PE_14, //D71 - 1:FSMC_D11 / TIM1_CH4
 | 
			
		||||
  PE_15, //D72 - 1:FSMC_D12
 | 
			
		||||
  PD_8,  //D73 - 1:FSMC_D13 / USART3_TX
 | 
			
		||||
  PD_9,  //D74 - 1:FSMC_D14 / USART3_RX
 | 
			
		||||
  PD_10, //D75 - 1:FSMC_D15
 | 
			
		||||
  PD_11, //D76 - 1:FSMC_A16
 | 
			
		||||
  PD_12, //D77 - 1:FSMC_A17 / TIM4_CH1
 | 
			
		||||
  PD_13, //D78 - 1:FSMC_A18 / TIM4_CH2
 | 
			
		||||
  PD_14, //D79 - 1:FSMC_D0 / TIM4_CH3
 | 
			
		||||
  PD_15, //D80 - 1:FSMC_D1 / TIM4_CH4
 | 
			
		||||
  PD_0,  //D81 - 1:FSMC_D2
 | 
			
		||||
  PD_1,  //D82 - 1:FSMC_D3
 | 
			
		||||
  PD_3,  //D83 - 1:FSMC_CLK
 | 
			
		||||
  PD_4,  //D84 - 1:FSMC_NOE
 | 
			
		||||
  PD_5,  //D85 - 1:USART2_TX
 | 
			
		||||
  PD_6,  //D86 - 1:USART2_RX
 | 
			
		||||
  PD_7,  //D87
 | 
			
		||||
  PE_0,  //D88
 | 
			
		||||
  PE_1,  //D89
 | 
			
		||||
#endif
 | 
			
		||||
#if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio
 | 
			
		||||
  PF_0,  //D90 - 1:FSMC_A0 / I2C2_SDA
 | 
			
		||||
  PF_1,  //D91 - 1:FSMC_A1 / I2C2_SCL
 | 
			
		||||
  PF_2,  //D92 - 1:FSMC_A2
 | 
			
		||||
  PF_11, //D93
 | 
			
		||||
  PF_12, //D94 - 1:FSMC_A6
 | 
			
		||||
  PF_13, //D95 - 1:FSMC_A7
 | 
			
		||||
  PF_14, //D96 - 1:FSMC_A8
 | 
			
		||||
  PF_15, //D97 - 1:FSMC_A9
 | 
			
		||||
  PG_0,  //D98 - 1:FSMC_A10
 | 
			
		||||
  PG_1,  //D99 - 1:FSMC_A11
 | 
			
		||||
  PG_2,  //D100 - 1:FSMC_A12
 | 
			
		||||
  PG_3,  //D101 - 1:FSMC_A13
 | 
			
		||||
  PG_4,  //D102 - 1:FSMC_A14
 | 
			
		||||
  PG_5,  //D103 - 1:FSMC_A15
 | 
			
		||||
  PG_6,  //D104
 | 
			
		||||
  PG_7,  //D105
 | 
			
		||||
  PG_8,  //D106
 | 
			
		||||
  PG_9,  //D107 - 1:USART6_RX
 | 
			
		||||
  PG_10, //D108 - 1:FSMC_NE3
 | 
			
		||||
  PG_11, //D109
 | 
			
		||||
  PG_12, //D110 - 1:FSMC_NE4
 | 
			
		||||
  PG_13, //D111 - 1:FSMC_A24
 | 
			
		||||
  PG_14, //D112 - 1:FSMC_A25 / USART6_TX
 | 
			
		||||
  PG_15, //D113
 | 
			
		||||
#endif
 | 
			
		||||
#if STM32F4X_PIN_NUM >= 176  //176 pins mcu, 140 gpio
 | 
			
		||||
  PI_8,  //D114
 | 
			
		||||
  PI_9,  //D115
 | 
			
		||||
  PI_10, //D116
 | 
			
		||||
  PI_11, //D117
 | 
			
		||||
  PH_2,  //D118
 | 
			
		||||
  PH_3,  //D119
 | 
			
		||||
  PH_4,  //D120 - 1:I2C2_SCL
 | 
			
		||||
  PH_5,  //D121 - 1:I2C2_SDA
 | 
			
		||||
  PH_6,  //D122 - 1:TIM12_CH1
 | 
			
		||||
  PH_7,  //D123 - 1:I2C3_SCL
 | 
			
		||||
  PH_8,  //D124 - 1:I2C3_SDA
 | 
			
		||||
  PH_9,  //D125 - 1:TIM12_CH2
 | 
			
		||||
  PH_10, //D126 - 1:TIM5_CH1
 | 
			
		||||
  PH_11, //D127 - 1:TIM5_CH2
 | 
			
		||||
  PH_12, //D128 - 1:TIM5_CH3
 | 
			
		||||
  PH_13, //D129
 | 
			
		||||
  PH_14, //D130
 | 
			
		||||
  PH_15, //D131
 | 
			
		||||
  PI_0,  //D132 - 1:TIM5_CH4 / SPI2_NSS
 | 
			
		||||
  PI_1,  //D133 - 1:SPI2_SCK
 | 
			
		||||
  PI_2,  //D134 - 1:TIM8_CH4 /SPI2_MISO
 | 
			
		||||
  PI_3,  //D135 - 1:SPI2_MOS
 | 
			
		||||
  PI_4,  //D136
 | 
			
		||||
  PI_5,  //D137 - 1:TIM8_CH1
 | 
			
		||||
  PI_6,  //D138 - 1:TIM8_CH2
 | 
			
		||||
  PI_7,  //D139 - 1:TIM8_CH3
 | 
			
		||||
#endif
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// ------------------------
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 /**
 | 
			
		||||
  * @brief  System Clock Configuration
 | 
			
		||||
  * @param  None
 | 
			
		||||
  * @retval None
 | 
			
		||||
  */
 | 
			
		||||
WEAK void SystemClock_Config() {
 | 
			
		||||
 | 
			
		||||
  RCC_OscInitTypeDef RCC_OscInitStruct;
 | 
			
		||||
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
 | 
			
		||||
 | 
			
		||||
  /**Configure the main internal regulator output voltage
 | 
			
		||||
  */
 | 
			
		||||
  __HAL_RCC_PWR_CLK_ENABLE();
 | 
			
		||||
 | 
			
		||||
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
 | 
			
		||||
 | 
			
		||||
  /**Initializes the CPU, AHB and APB busses clocks
 | 
			
		||||
  */
 | 
			
		||||
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
 | 
			
		||||
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLM = 8;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLN = 336;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
 | 
			
		||||
  RCC_OscInitStruct.PLL.PLLQ = 7;
 | 
			
		||||
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
 | 
			
		||||
    _Error_Handler(__FILE__, __LINE__);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**Initializes the CPU, AHB and APB busses clocks
 | 
			
		||||
  */
 | 
			
		||||
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
 | 
			
		||||
                                | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
 | 
			
		||||
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
 | 
			
		||||
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
 | 
			
		||||
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
 | 
			
		||||
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
 | 
			
		||||
 | 
			
		||||
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) {
 | 
			
		||||
    _Error_Handler(__FILE__, __LINE__);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**Configure the Systick interrupt time
 | 
			
		||||
  */
 | 
			
		||||
  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000);
 | 
			
		||||
 | 
			
		||||
  /**Configure the Systick
 | 
			
		||||
  */
 | 
			
		||||
  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
 | 
			
		||||
 | 
			
		||||
  /* SysTick_IRQn interrupt configuration */
 | 
			
		||||
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										322
									
								
								buildroot/share/PlatformIO/variants/BIGTREE_GTR_V1/variant.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										322
									
								
								buildroot/share/PlatformIO/variants/BIGTREE_GTR_V1/variant.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,322 @@
 | 
			
		||||
/*
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 * Copyright (c) 2017, STMicroelectronics
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 */
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif // __cplusplus
 | 
			
		||||
 | 
			
		||||
/*----------------------------------------------------------------------------
 | 
			
		||||
 *        Pins
 | 
			
		||||
 *----------------------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
#ifdef STM32F405RX
 | 
			
		||||
  #define STM32F4X_PIN_NUM  64  //64 pins mcu, 51 gpio
 | 
			
		||||
  #define STM32F4X_GPIO_NUM 51
 | 
			
		||||
  #define STM32F4X_ADC_NUM  16
 | 
			
		||||
#elif defined(STM32F407_5VX)
 | 
			
		||||
  #define STM32F4X_PIN_NUM  100  //100 pins mcu, 82 gpio
 | 
			
		||||
  #define STM32F4X_GPIO_NUM 82
 | 
			
		||||
  #define STM32F4X_ADC_NUM  16
 | 
			
		||||
#elif defined(STM32F407_5ZX)
 | 
			
		||||
  #define STM32F4X_PIN_NUM  144  //144 pins mcu, 114 gpio
 | 
			
		||||
  #define STM32F4X_GPIO_NUM 114
 | 
			
		||||
  #define STM32F4X_ADC_NUM  24
 | 
			
		||||
#elif defined(STM32F407IX)
 | 
			
		||||
  #define STM32F4X_PIN_NUM  176  //176 pins mcu, 140 gpio
 | 
			
		||||
  #define STM32F4X_GPIO_NUM 140
 | 
			
		||||
  #define STM32F4X_ADC_NUM  24
 | 
			
		||||
#else
 | 
			
		||||
  #error "no match MCU defined"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if STM32F4X_PIN_NUM >= 64  //64 pins mcu, 51 gpio
 | 
			
		||||
  #define PC13  0
 | 
			
		||||
  #define PC14  1 //OSC32_IN
 | 
			
		||||
  #define PC15  2 //OSC32_OUT
 | 
			
		||||
  #define PH0   3 //OSC_IN
 | 
			
		||||
  #define PH1   4 //OSC_OUT
 | 
			
		||||
  #define PB2   5 //BOOT1
 | 
			
		||||
  #define PB10  6 //1:SPI2_SCK / I2C2_SCL / USART3_TX / TIM2_CH3
 | 
			
		||||
  #define PB11  7 //1:I2C2_SDA / USART3_RX / TIM2_CH4
 | 
			
		||||
  #define PB12  8 //1:SPI2_NSS / OTG_HS_ID
 | 
			
		||||
  #define PB13  9 //1:SPI2_SCK  2:OTG_HS_VBUS
 | 
			
		||||
  #define PB14  10 //1:SPI2_MISO / TIM12_CH1 / OTG_HS_DM
 | 
			
		||||
  #define PB15  11 //SPI2_MOSI / TIM12_CH2 / OTG_HS_DP
 | 
			
		||||
  #define PC6   12 //1:TIM8_CH1 / SDIO_D6 / USART6_TX / TIM3_CH1
 | 
			
		||||
  #define PC7   13 //1:TIM8_CH2 / SDIO_D7 / USART6_RX / TIM3_CH2
 | 
			
		||||
  #define PC8   14 //1:TIM8_CH3 / SDIO_D0 / TIM3_CH3
 | 
			
		||||
  #define PC9   15 //1:TIM8_CH4 / SDIO_D1 / TIM3_CH4
 | 
			
		||||
  #define PA8   16 //1:TIM1_CH1 / I2C3_SCL / OTG_FS_SOF
 | 
			
		||||
  #define PA9   17 //1:USART1_TX / TIM1_CH2  2:OTG_FS_VBUS
 | 
			
		||||
  #define PA10  18 //1:USART1_RX / TIM1_CH3 / OTG_FS_ID
 | 
			
		||||
  #define PA11  19 //1:TIM1_CH4 / OTG_FS_DM
 | 
			
		||||
  #define PA12  20 //1:OTG_FS_DP
 | 
			
		||||
  #define PA13  21 //0:JTMS-SWDIO
 | 
			
		||||
  #define PA14  22 //0:JTCK-SWCLK
 | 
			
		||||
  #define PA15  23 //0:JTDI  1:SPI3_NSS / SPI1_NSS
 | 
			
		||||
  #define PC10  24 //1:UART4_TX / SPI3_SCK / SDIO_D2 / USART3_TX
 | 
			
		||||
  #define PC11  25 //1:UART4_RX / SPI3_MISO / SDIO_D3 / USART3_RX
 | 
			
		||||
  #define PC12  26 //1:UART5_TX / SPI3_MOSI / SDIO_CK
 | 
			
		||||
  #define PD2   27 //1:UART5_RX / SDIO_CMD
 | 
			
		||||
  #define PB3   28 //0:JTDO  1:SPI3_SCK / TIM2_CH2 / SPI1_SCK
 | 
			
		||||
  #define PB4   29 //0:NJTRST  1:SPI3_MISO / TIM3_CH1 / SPI1_MISO
 | 
			
		||||
  #define PB5   30 //1:TIM3_CH2 / SPI1_MOSI / SPI3_MOSI
 | 
			
		||||
  #define PB6   31 //1:I2C1_SCL / TIM4_CH1 / USART1_TX
 | 
			
		||||
  #define PB7   32 //1:I2C1_SDA / TIM4_CH2 / USART1_RX
 | 
			
		||||
  #define PB8   33 //1:I2C1_SCL / TIM4_CH3 / SDIO_D4 / TIM10_CH1
 | 
			
		||||
  #define PB9   34 //1:I2C1_SDA / TIM4_CH4 / SDIO_D5 / TIM11_CH1 / SPI2_NSS
 | 
			
		||||
  #define PA0   35 //1:UART4_TX / TIM5_CH1  2:ADC123_IN0
 | 
			
		||||
  #define PA1   36 //1:UART4_RX / TIM5_CH2 / TIM2_CH2  2:ADC123_IN1
 | 
			
		||||
  #define PA2   37 //1:USART2_TX /TIM5_CH3 / TIM9_CH1 / TIM2_CH3  2:ADC123_IN2
 | 
			
		||||
  #define PA3   38 //1:USART2_RX /TIM5_CH4 / TIM9_CH2 / TIM2_CH4  2:ADC123_IN3
 | 
			
		||||
  #define PA4   39 //NOT FT 1:SPI1_NSS / SPI3_NSS / USART2_CK  2:ADC12_IN4 / DAC_OUT1
 | 
			
		||||
  #define PA5   40 //NOT FT 1:SPI1_SCK  2:ADC12_IN5 / DAC_OUT2
 | 
			
		||||
  #define PA6   41 //1:SPI1_MISO / TIM13_CH1 / TIM3_CH1  2:ADC12_IN6
 | 
			
		||||
  #define PA7   42 //1:SPI1_MOSI / TIM14_CH1 / TIM3_CH2  2:ADC12_IN7
 | 
			
		||||
  #define PB0   43 //1:TIM3_CH3  2:ADC12_IN8
 | 
			
		||||
  #define PB1   44 //1:TIM3_CH4  2:ADC12_IN9
 | 
			
		||||
  #define PC0   45 //1:  2:ADC123_IN10
 | 
			
		||||
  #define PC1   46 //1:  2:ADC123_IN11
 | 
			
		||||
  #define PC2   47 //1:SPI2_MISO  2:ADC123_IN12
 | 
			
		||||
  #define PC3   48 //1:SPI2_MOSI  2:ADC123_IN13
 | 
			
		||||
  #define PC4   49 //1:  2:ADC12_IN14
 | 
			
		||||
  #define PC5   50 //1:  2:ADC12_IN15
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144
 | 
			
		||||
    #define PF3   51 //1:FSMC_A3  2:ADC3_IN9
 | 
			
		||||
    #define PF4   52 //1:FSMC_A4  2:ADC3_IN14
 | 
			
		||||
    #define PF5   53 //1:FSMC_A5  2:ADC3_IN15
 | 
			
		||||
    #define PF6   54 //1:TIM10_CH1  2:ADC3_IN4
 | 
			
		||||
    #define PF7   55 //1:TIM11_CH1  2:ADC3_IN5
 | 
			
		||||
    #define PF8   56 //1:TIM13_CH1  2:ADC3_IN6
 | 
			
		||||
    #define PF9   57 //1;TIM14_CH1  2:ADC3_IN7
 | 
			
		||||
    #define PF10  58 //2:ADC3_IN8
 | 
			
		||||
  #endif
 | 
			
		||||
#endif
 | 
			
		||||
#if STM32F4X_PIN_NUM >= 100  //100 pins mcu, 82 gpio
 | 
			
		||||
  #define PE2   (35+STM32F4X_ADC_NUM) //1:FSMC_A23
 | 
			
		||||
  #define PE3   (36+STM32F4X_ADC_NUM) //1:FSMC_A19
 | 
			
		||||
  #define PE4   (37+STM32F4X_ADC_NUM) //1:FSMC_A20
 | 
			
		||||
  #define PE5   (38+STM32F4X_ADC_NUM) //1:FSMC_A21
 | 
			
		||||
  #define PE6   (39+STM32F4X_ADC_NUM) //1:FSMC_A22
 | 
			
		||||
  #define PE7   (40+STM32F4X_ADC_NUM) //1:FSMC_D4
 | 
			
		||||
  #define PE8   (41+STM32F4X_ADC_NUM) //1:FSMC_D5
 | 
			
		||||
  #define PE9   (42+STM32F4X_ADC_NUM) //1:FSMC_D6 / TIM1_CH1
 | 
			
		||||
  #define PE10  (43+STM32F4X_ADC_NUM) //1:FSMC_D7
 | 
			
		||||
  #define PE11  (44+STM32F4X_ADC_NUM) //1:FSMC_D8 / TIM1_CH2
 | 
			
		||||
  #define PE12  (45+STM32F4X_ADC_NUM) //1:FSMC_D9
 | 
			
		||||
  #define PE13  (46+STM32F4X_ADC_NUM) //1:FSMC_D10 / TIM1_CH3
 | 
			
		||||
  #define PE14  (47+STM32F4X_ADC_NUM) //1:FSMC_D11 / TIM1_CH4
 | 
			
		||||
  #define PE15  (48+STM32F4X_ADC_NUM) //1:FSMC_D12
 | 
			
		||||
  #define PD8   (49+STM32F4X_ADC_NUM) //1:FSMC_D13 / USART3_TX
 | 
			
		||||
  #define PD9   (50+STM32F4X_ADC_NUM) //1:FSMC_D14 / USART3_RX
 | 
			
		||||
  #define PD10  (51+STM32F4X_ADC_NUM) //1:FSMC_D15
 | 
			
		||||
  #define PD11  (52+STM32F4X_ADC_NUM) //1:FSMC_A16
 | 
			
		||||
  #define PD12  (53+STM32F4X_ADC_NUM) //1:FSMC_A17 / TIM4_CH1
 | 
			
		||||
  #define PD13  (54+STM32F4X_ADC_NUM) //1:FSMC_A18 / TIM4_CH2
 | 
			
		||||
  #define PD14  (55+STM32F4X_ADC_NUM) //1:FSMC_D0 / TIM4_CH3
 | 
			
		||||
  #define PD15  (56+STM32F4X_ADC_NUM) //1:FSMC_D1 / TIM4_CH4
 | 
			
		||||
  #define PD0   (57+STM32F4X_ADC_NUM) //1:FSMC_D2
 | 
			
		||||
  #define PD1   (58+STM32F4X_ADC_NUM) //1:FSMC_D3
 | 
			
		||||
  #define PD3   (59+STM32F4X_ADC_NUM) //1:FSMC_CLK
 | 
			
		||||
  #define PD4   (60+STM32F4X_ADC_NUM) //1:FSMC_NOE
 | 
			
		||||
  #define PD5   (61+STM32F4X_ADC_NUM) //1:USART2_TX
 | 
			
		||||
  #define PD6   (62+STM32F4X_ADC_NUM) //1:USART2_RX
 | 
			
		||||
  #define PD7   (63+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PE0   (64+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PE1   (65+STM32F4X_ADC_NUM)
 | 
			
		||||
#endif
 | 
			
		||||
#if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio
 | 
			
		||||
  #define PF0   (66+STM32F4X_ADC_NUM) //1:FSMC_A0 / I2C2_SDA
 | 
			
		||||
  #define PF1   (67+STM32F4X_ADC_NUM) //1:FSMC_A1 / I2C2_SCL
 | 
			
		||||
  #define PF2   (68+STM32F4X_ADC_NUM) //1:FSMC_A2
 | 
			
		||||
  #define PF11  (69+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PF12  (70+STM32F4X_ADC_NUM) //1:FSMC_A6
 | 
			
		||||
  #define PF13  (71+STM32F4X_ADC_NUM) //1:FSMC_A7
 | 
			
		||||
  #define PF14  (72+STM32F4X_ADC_NUM) //1:FSMC_A8
 | 
			
		||||
  #define PF15  (73+STM32F4X_ADC_NUM) //1:FSMC_A9
 | 
			
		||||
  #define PG0   (74+STM32F4X_ADC_NUM) //1:FSMC_A10
 | 
			
		||||
  #define PG1   (75+STM32F4X_ADC_NUM) //1:FSMC_A11
 | 
			
		||||
  #define PG2   (76+STM32F4X_ADC_NUM) //1:FSMC_A12
 | 
			
		||||
  #define PG3   (77+STM32F4X_ADC_NUM) //1:FSMC_A13
 | 
			
		||||
  #define PG4   (78+STM32F4X_ADC_NUM) //1:FSMC_A14
 | 
			
		||||
  #define PG5   (79+STM32F4X_ADC_NUM) //1:FSMC_A15
 | 
			
		||||
  #define PG6   (80+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PG7   (81+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PG8   (82+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PG9   (83+STM32F4X_ADC_NUM) //1:USART6_RX
 | 
			
		||||
  #define PG10  (84+STM32F4X_ADC_NUM) //1:FSMC_NE3
 | 
			
		||||
  #define PG11  (85+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PG12  (86+STM32F4X_ADC_NUM) //1:FSMC_NE4
 | 
			
		||||
  #define PG13  (87+STM32F4X_ADC_NUM) //1:FSMC_A24
 | 
			
		||||
  #define PG14  (88+STM32F4X_ADC_NUM) //1:FSMC_A25 / USART6_TX
 | 
			
		||||
  #define PG15  (89+STM32F4X_ADC_NUM)
 | 
			
		||||
#endif
 | 
			
		||||
#if STM32F4X_PIN_NUM >= 176  //176 pins mcu, 140 gpio
 | 
			
		||||
  #define PI8   (90+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PI9   (91+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PI10  (92+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PI11  (93+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PH2   (94+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PH3   (95+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PH4   (96+STM32F4X_ADC_NUM) //1:I2C2_SCL
 | 
			
		||||
  #define PH5   (97+STM32F4X_ADC_NUM) //1:I2C2_SDA
 | 
			
		||||
  #define PH6   (98+STM32F4X_ADC_NUM) //1:TIM12_CH1
 | 
			
		||||
  #define PH7   (99+STM32F4X_ADC_NUM) //1:I2C3_SCL
 | 
			
		||||
  #define PH8   (100+STM32F4X_ADC_NUM) //1:I2C3_SDA
 | 
			
		||||
  #define PH9   (101+STM32F4X_ADC_NUM) //1:TIM12_CH2
 | 
			
		||||
  #define PH10  (102+STM32F4X_ADC_NUM) //1:TIM5_CH1
 | 
			
		||||
  #define PH11  (103+STM32F4X_ADC_NUM) //1:TIM5_CH2
 | 
			
		||||
  #define PH12  (104+STM32F4X_ADC_NUM) //1:TIM5_CH3
 | 
			
		||||
  #define PH13  (105+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PH14  (106+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PH15  (107+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PI0   (108+STM32F4X_ADC_NUM) //1:TIM5_CH4 / SPI2_NSS
 | 
			
		||||
  #define PI1   (109+STM32F4X_ADC_NUM) //1:SPI2_SCK
 | 
			
		||||
  #define PI2   (110+STM32F4X_ADC_NUM) //1:TIM8_CH4 /SPI2_MISO
 | 
			
		||||
  #define PI3   (111+STM32F4X_ADC_NUM) //1:SPI2_MOS
 | 
			
		||||
  #define PI4   (112+STM32F4X_ADC_NUM)
 | 
			
		||||
  #define PI5   (113+STM32F4X_ADC_NUM) //1:TIM8_CH1
 | 
			
		||||
  #define PI6   (114+STM32F4X_ADC_NUM) //1:TIM8_CH2
 | 
			
		||||
  #define PI7   (115+STM32F4X_ADC_NUM) //1:TIM8_CH3
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// This must be a literal
 | 
			
		||||
#define NUM_DIGITAL_PINS        (STM32F4X_GPIO_NUM)
 | 
			
		||||
// This must be a literal with a value less than or equal to MAX_ANALOG_INPUTS
 | 
			
		||||
#define NUM_ANALOG_INPUTS       (STM32F4X_ADC_NUM)
 | 
			
		||||
#define NUM_ANALOG_FIRST        35
 | 
			
		||||
 | 
			
		||||
// Below ADC, DAC and PWM definitions already done in the core
 | 
			
		||||
// Could be redefined here if needed
 | 
			
		||||
// ADC resolution is 12bits
 | 
			
		||||
//#define ADC_RESOLUTION          12
 | 
			
		||||
//#define DACC_RESOLUTION         12
 | 
			
		||||
 | 
			
		||||
// PWM resolution
 | 
			
		||||
/*
 | 
			
		||||
 * BEWARE:
 | 
			
		||||
 * Changing this value from the default (1000) will affect the PWM output value of analogWrite (to a PWM pin)
 | 
			
		||||
 * Since the pin is toggled on capture, if you change the frequency of the timer you have to adapt the compare value (analogWrite thinks you did)
 | 
			
		||||
 */
 | 
			
		||||
//#define PWM_FREQUENCY           20000
 | 
			
		||||
//The bottom values are the default and don't need to be redefined
 | 
			
		||||
//#define PWM_RESOLUTION          8
 | 
			
		||||
//#define PWM_MAX_DUTY_CYCLE      255
 | 
			
		||||
 | 
			
		||||
// On-board LED pin number
 | 
			
		||||
#define LED_BUILTIN             PA7
 | 
			
		||||
#define LED_GREEN               LED_BUILTIN
 | 
			
		||||
 | 
			
		||||
// Below SPI and I2C definitions already done in the core
 | 
			
		||||
// Could be redefined here if differs from the default one
 | 
			
		||||
// SPI Definitions
 | 
			
		||||
#define PIN_SPI_MOSI            PB15
 | 
			
		||||
#define PIN_SPI_MISO            PB14
 | 
			
		||||
#define PIN_SPI_SCK             PB13
 | 
			
		||||
#define PIN_SPI_SS              PB12
 | 
			
		||||
 | 
			
		||||
// I2C Definitions
 | 
			
		||||
#if STM32F4X_PIN_NUM >= 176
 | 
			
		||||
  #define PIN_WIRE_SDA          PH5
 | 
			
		||||
  #define PIN_WIRE_SCL          PH4
 | 
			
		||||
#else
 | 
			
		||||
  #define PIN_WIRE_SDA          PB7
 | 
			
		||||
  #define PIN_WIRE_SCL          PB6
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// Timer Definitions
 | 
			
		||||
//Do not use timer used by PWM pins when possible. See PinMap_PWM in PeripheralPins.c
 | 
			
		||||
#define TIMER_TONE              TIM10
 | 
			
		||||
#define TIMER_SERVO             TIM5
 | 
			
		||||
#define TIMER_SERIAL            TIM7
 | 
			
		||||
 | 
			
		||||
// UART Definitions
 | 
			
		||||
//#define ENABLE_HWSERIAL1        done automatically by the #define SERIAL_UART_INSTANCE below
 | 
			
		||||
#define ENABLE_HWSERIAL3
 | 
			
		||||
#define ENABLE_HWSERIAL6
 | 
			
		||||
 | 
			
		||||
// Define here Serial instance number to map on Serial generic name (if not already used by SerialUSB)
 | 
			
		||||
#define SERIAL_UART_INSTANCE    1 //1 for Serial = Serial1 (USART1)
 | 
			
		||||
 | 
			
		||||
// DEBUG_UART could be redefined to print on another instance than 'Serial'
 | 
			
		||||
//#define DEBUG_UART              ((USART_TypeDef *) U(S)ARTX) // ex: USART3
 | 
			
		||||
// DEBUG_UART baudrate, default: 9600 if not defined
 | 
			
		||||
//#define DEBUG_UART_BAUDRATE     x
 | 
			
		||||
// DEBUG_UART Tx pin name, default: the first one found in PinMap_UART_TX for DEBUG_UART
 | 
			
		||||
//#define DEBUG_PINNAME_TX        PX_n // PinName used for TX
 | 
			
		||||
 | 
			
		||||
// Default pin used for 'Serial' instance (ex: ST-Link)
 | 
			
		||||
// Mandatory for Firmata
 | 
			
		||||
#define PIN_SERIAL_RX           PA10
 | 
			
		||||
#define PIN_SERIAL_TX           PA9
 | 
			
		||||
 | 
			
		||||
// Optional PIN_SERIALn_RX and PIN_SERIALn_TX where 'n' is the U(S)ART number
 | 
			
		||||
// Used when user instanciate a hardware Serial using its peripheral name.
 | 
			
		||||
// Example: HardwareSerial mySerial(USART3);
 | 
			
		||||
// will use PIN_SERIAL3_RX and PIN_SERIAL3_TX if defined.
 | 
			
		||||
#define PIN_SERIAL1_RX          PA10
 | 
			
		||||
#define PIN_SERIAL1_TX          PA9
 | 
			
		||||
#define PIN_SERIAL3_RX          PD9
 | 
			
		||||
#define PIN_SERIAL3_TX          PD8
 | 
			
		||||
#define PIN_SERIAL6_RX          PC7
 | 
			
		||||
#define PIN_SERIAL6_TX          PC6
 | 
			
		||||
//#define PIN_SERIALLP1_RX        x // For LPUART1 RX
 | 
			
		||||
//#define PIN_SERIALLP1_TX        x // For LPUART1 TX
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
} // extern "C"
 | 
			
		||||
#endif
 | 
			
		||||
/*----------------------------------------------------------------------------
 | 
			
		||||
 *        Arduino objects - C++ only
 | 
			
		||||
 *----------------------------------------------------------------------------*/
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
// These serial port names are intended to allow libraries and architecture-neutral
 | 
			
		||||
// sketches to automatically default to the correct port name for a particular type
 | 
			
		||||
// of use.  For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN,
 | 
			
		||||
// the first hardware serial port whose RX/TX pins are not dedicated to another use.
 | 
			
		||||
//
 | 
			
		||||
// SERIAL_PORT_MONITOR        Port which normally prints to the Arduino Serial Monitor
 | 
			
		||||
//
 | 
			
		||||
// SERIAL_PORT_USBVIRTUAL     Port which is USB virtual serial
 | 
			
		||||
//
 | 
			
		||||
// SERIAL_PORT_LINUXBRIDGE    Port which connects to a Linux system via Bridge library
 | 
			
		||||
//
 | 
			
		||||
// SERIAL_PORT_HARDWARE       Hardware serial port, physical RX & TX pins.
 | 
			
		||||
//
 | 
			
		||||
// SERIAL_PORT_HARDWARE_OPEN  Hardware serial ports which are open for use.  Their RX & TX
 | 
			
		||||
//                            pins are NOT connected to anything by default.
 | 
			
		||||
#define SERIAL_PORT_MONITOR         Serial
 | 
			
		||||
#define SERIAL_PORT_HARDWARE        Serial1
 | 
			
		||||
#define SERIAL_PORT_HARDWARE_OPEN   Serial3
 | 
			
		||||
#define SERIAL_PORT_HARDWARE_OPEN1  Serial6
 | 
			
		||||
#endif
 | 
			
		||||
@@ -0,0 +1,372 @@
 | 
			
		||||
/*
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 * Copyright (c) 2019, STMicroelectronics
 | 
			
		||||
 * All rights reserved.
 | 
			
		||||
 *
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions are met:
 | 
			
		||||
 *
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
 *    this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
 *    and/or other materials provided with the distribution.
 | 
			
		||||
 * 3. Neither the name of STMicroelectronics nor the names of its contributors
 | 
			
		||||
 *    may be used to endorse or promote products derived from this software
 | 
			
		||||
 *    without specific prior written permission.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 *******************************************************************************
 | 
			
		||||
 * Automatically generated from STM32F407Z(E-G)Tx.xml
 | 
			
		||||
 */
 | 
			
		||||
#include <Arduino.h>
 | 
			
		||||
#include <PeripheralPins.h>
 | 
			
		||||
 | 
			
		||||
/* =====
 | 
			
		||||
 * Note: Commented lines are alternative possibilities which are not used by default.
 | 
			
		||||
 *       If you change them, you should know what you're doing first.
 | 
			
		||||
 * =====
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
//*** ADC ***
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_ADC_MODULE_ENABLED
 | 
			
		||||
const PinMap PinMap_ADC[] = {
 | 
			
		||||
  {PA_0,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 0, 0)}, // ADC1_IN0      E0_DIR
 | 
			
		||||
  {PA_1,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // ADC1_IN1      BLTOUCH_2
 | 
			
		||||
  {PA_2,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // ADC1_IN2      BLTOUCH_4
 | 
			
		||||
  {PA_3,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 3, 0)}, // ADC1_IN3      E1_EN
 | 
			
		||||
  {PA_4,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC1_IN4      TF_SS
 | 
			
		||||
  {PA_5,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC1_IN5      TF_SCLK
 | 
			
		||||
  {PA_6,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC1_IN6      TF_MISO
 | 
			
		||||
  {PA_7,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC1_IN7      LED
 | 
			
		||||
  {PB_0,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC1_IN8      HEATER2
 | 
			
		||||
  {PB_1,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC1_IN9      HEATER0
 | 
			
		||||
  {PC_0,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 10, 0)}, // ADC1_IN10    Z_EN
 | 
			
		||||
  {PC_1,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 11, 0)}, // ADC1_IN11    EXP_14
 | 
			
		||||
  {PC_2,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 12, 0)}, // ADC1_IN12    Z_DIR
 | 
			
		||||
  {PC_3,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 13, 0)}, // ADC1_IN13    E0_EN
 | 
			
		||||
  {PC_4,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC1_IN14    EXP_8
 | 
			
		||||
  {PC_5,  ADC1,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC1_IN15    EXP_7
 | 
			
		||||
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio, 24 ADC
 | 
			
		||||
    {PF_3,  ADC3,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 9, 0)}, // ADC3_IN9    TH_0
 | 
			
		||||
    {PF_4,  ADC3,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 14, 0)}, // ADC3_IN14  TH_1
 | 
			
		||||
    {PF_5,  ADC3,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 15, 0)}, // ADC3_IN15  TH_2
 | 
			
		||||
    {PF_6,  ADC3,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 4, 0)}, // ADC3_IN4    TH_3
 | 
			
		||||
    {PF_7,  ADC3,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 5, 0)}, // ADC3_IN5    EXP_13
 | 
			
		||||
    {PF_8,  ADC3,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 6, 0)}, // ADC3_IN6    EXP_3
 | 
			
		||||
    {PF_9,  ADC3,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 7, 0)}, // ADC3_IN7    EXP_6
 | 
			
		||||
    {PF_10, ADC3,  STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 8, 0)}, // ADC3_IN8    EXP_5
 | 
			
		||||
  #endif
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//*** DAC ***
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_DAC_MODULE_ENABLED
 | 
			
		||||
const PinMap PinMap_DAC[] = {
 | 
			
		||||
  {PA_4,  DAC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 1, 0)}, // DAC_OUT1
 | 
			
		||||
  {PA_5,  DAC1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 2, 0)}, // DAC_OUT2
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//*** I2C ***
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_I2C_MODULE_ENABLED
 | 
			
		||||
const PinMap PinMap_I2C_SDA[] = {
 | 
			
		||||
  {PB_7,  I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)},
 | 
			
		||||
  {PB_9,  I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)},
 | 
			
		||||
  {PB_11, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
 | 
			
		||||
  {PC_9,  I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)},
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144   // 144 pins mcu, 114 gpio
 | 
			
		||||
    #if STM32F4X_PIN_NUM >= 176
 | 
			
		||||
      {PH_5,  I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
 | 
			
		||||
      {PH_8,  I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)},
 | 
			
		||||
    #else
 | 
			
		||||
      {PF_0,  I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
 | 
			
		||||
    #endif
 | 
			
		||||
  #endif
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_I2C_MODULE_ENABLED
 | 
			
		||||
const PinMap PinMap_I2C_SCL[] = {
 | 
			
		||||
  {PA_8,  I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)},
 | 
			
		||||
  {PB_6,  I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)},
 | 
			
		||||
  {PB_8,  I2C1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)},
 | 
			
		||||
  {PB_10, I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144   // 144 pins mcu, 114 gpio
 | 
			
		||||
    #if STM32F4X_PIN_NUM >= 176
 | 
			
		||||
      //{PF_1,  I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
 | 
			
		||||
      {PH_4,  I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
 | 
			
		||||
      {PH_7,  I2C3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C3)},
 | 
			
		||||
    #else
 | 
			
		||||
      {PF_1,  I2C2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},
 | 
			
		||||
    #endif
 | 
			
		||||
  #endif
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//*** PWM ***
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_TIM_MODULE_ENABLED
 | 
			
		||||
const PinMap PinMap_PWM[] = {
 | 
			
		||||
  {PB_1,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4    HEATER0
 | 
			
		||||
  {PD_14, TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3    HEATER1
 | 
			
		||||
  {PB_0,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3    HEATER2
 | 
			
		||||
  {PD_12, TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1    BED
 | 
			
		||||
  {PC_8,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 3, 0)}, // TIM8_CH3    FAN0
 | 
			
		||||
  {PE_5,  TIM9,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 1, 0)}, // TIM9_CH1    FAN1
 | 
			
		||||
  {PE_6,  TIM9,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 2, 0)}, // TIM9_CH2    FAN2
 | 
			
		||||
  {PC_9,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 4, 0)}, // TIM8_CH4    EXTENSION1-4
 | 
			
		||||
  {PA_1,  TIM5,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2    BL-TOUCH-SERVO
 | 
			
		||||
 | 
			
		||||
  // These pins have been defined for something else on the board but they MIGHT be
 | 
			
		||||
  // used by the user as PWM pins if they aren't used for their primary purpose.
 | 
			
		||||
  {PC_6,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1    ESP8266 connector. Available if 8266 isn't used
 | 
			
		||||
  {PC_7,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2    ESP8266 connector. Available if 8266 isn't used
 | 
			
		||||
  {PB_7,  TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2    I2C connector, SDA pin. Available if I2C isn't used.
 | 
			
		||||
                                                                                       // TIM5_CH1    is used by the Servo Library
 | 
			
		||||
  {PA_2,  TIM5,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 3, 0)}, // TIM5_CH3    BL-TOUCH port. Available if Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Unused by specifications on SKR-Pro.
 | 
			
		||||
   * Uncomment the corresponding line if you want to have HardwarePWM on some pins.
 | 
			
		||||
   * WARNING: check timers' usage first to avoid conflicts.
 | 
			
		||||
   * If you don't know what you're doing leave things as they are or you WILL break something (including hardware)
 | 
			
		||||
   * If you alter this section DO NOT report bugs to Marlin team since they are most likely caused by you. Thank you.
 | 
			
		||||
   */
 | 
			
		||||
  //{PA_0,  TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
 | 
			
		||||
  //{PA_0,  TIM5,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 1, 0)}, // TIM5_CH1
 | 
			
		||||
  //{PA_1,  TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2   BLTOUCH is a "servo"
 | 
			
		||||
  //{PA_2,  TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3   BLTOUCH is a "servo"
 | 
			
		||||
  //{PA_1,  TIM5,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2
 | 
			
		||||
  //{PA_2,  TIM5,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 3, 0)}, // TIM5_CH3
 | 
			
		||||
  //{PA_2,  TIM9,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 1, 0)}, // TIM9_CH1
 | 
			
		||||
  //{PA_3,  TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4
 | 
			
		||||
  //{PA_3,  TIM5,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 4, 0)}, // TIM5_CH4
 | 
			
		||||
  //{PA_3,  TIM9,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM9, 2, 0)}, // TIM9_CH2
 | 
			
		||||
  //{PA_5,  TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
 | 
			
		||||
  //{PA_5,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 1)}, // TIM8_CH1N
 | 
			
		||||
  //{PA_6,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1
 | 
			
		||||
  //{PA_6,  TIM13,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM13, 1, 0)}, // TIM13_CH1
 | 
			
		||||
  //{PA_7,  TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N
 | 
			
		||||
  //{PA_7,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
 | 
			
		||||
  //{PA_7,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 1)}, // TIM8_CH1N
 | 
			
		||||
  //{PA_7,  TIM14,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM14, 1, 0)}, // TIM14_CH1
 | 
			
		||||
  //{PA_8,  TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1
 | 
			
		||||
  //{PA_9,  TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2
 | 
			
		||||
  //{PA_10, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3
 | 
			
		||||
  //{PA_11, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4
 | 
			
		||||
  //{PA_15, TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 1, 0)}, // TIM2_CH1
 | 
			
		||||
  //{PB_0,  TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N
 | 
			
		||||
  //{PB_0,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N
 | 
			
		||||
  //{PB_1,  TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N
 | 
			
		||||
  //{PB_1,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 3, 1)}, // TIM8_CH3N
 | 
			
		||||
  //{PB_3,  TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 2, 0)}, // TIM2_CH2
 | 
			
		||||
  //{PB_4,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 1, 0)}, // TIM3_CH1
 | 
			
		||||
  //{PB_5,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
 | 
			
		||||
  //{PB_6,  TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 1, 0)}, // TIM4_CH1
 | 
			
		||||
  //{PB_8,  TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 3, 0)}, // TIM4_CH3
 | 
			
		||||
  //{PB_8,  TIM10,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM10, 1, 0)}, // TIM10_CH1
 | 
			
		||||
  //{PB_9,  TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4
 | 
			
		||||
  //{PB_9,  TIM11,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM11, 1, 0)}, // TIM11_CH1
 | 
			
		||||
  //{PB_10, TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 3, 0)}, // TIM2_CH3
 | 
			
		||||
  //{PB_11, TIM2,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM2, 4, 0)}, // TIM2_CH4
 | 
			
		||||
  //{PB_13, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N
 | 
			
		||||
  //{PB_14, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N
 | 
			
		||||
  //{PB_14, TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 1)}, // TIM8_CH2N
 | 
			
		||||
  //{PB_14, TIM12,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM12, 1, 0)}, // TIM12_CH1
 | 
			
		||||
  //{PB_15, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N
 | 
			
		||||
  //{PB_15, TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 3, 1)}, // TIM8_CH3N
 | 
			
		||||
  //{PB_15, TIM12,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM12, 2, 0)}, // TIM12_CH2
 | 
			
		||||
  //{PC_6,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 0)}, // TIM8_CH1
 | 
			
		||||
  //{PC_7,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 2, 0)}, // TIM3_CH2
 | 
			
		||||
  //{PC_7,  TIM8,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 0)}, // TIM8_CH2
 | 
			
		||||
  //{PC_8,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 3, 0)}, // TIM3_CH3
 | 
			
		||||
  //{PC_9,  TIM3,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM3, 4, 0)}, // TIM3_CH4
 | 
			
		||||
  //{PD_13, TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 2, 0)}, // TIM4_CH2
 | 
			
		||||
  //{PD_15, TIM4,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM4, 4, 0)}, // TIM4_CH4
 | 
			
		||||
  //{PE_8,  TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 1)}, // TIM1_CH1N
 | 
			
		||||
  //{PE_9,  TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 1, 0)}, // TIM1_CH1
 | 
			
		||||
  //{PE_10, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 1)}, // TIM1_CH2N
 | 
			
		||||
  //{PE_11, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 2, 0)}, // TIM1_CH2
 | 
			
		||||
  //{PE_12, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 1)}, // TIM1_CH3N
 | 
			
		||||
  //{PE_13, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 3, 0)}, // TIM1_CH3
 | 
			
		||||
  //{PE_14, TIM1,   STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF1_TIM1, 4, 0)}, // TIM1_CH4
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio
 | 
			
		||||
    //{PF_6,  TIM10,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM10, 1, 0)}, // TIM10_CH1
 | 
			
		||||
    //{PF_7,  TIM11,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM11, 1, 0)}, // TIM11_CH1
 | 
			
		||||
    //{PF_8,  TIM13,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM13, 1, 0)}, // TIM13_CH1
 | 
			
		||||
    //{PF_9,  TIM14,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM14, 1, 0)}, // TIM14_CH1
 | 
			
		||||
  #endif
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 176  //176 pins mcu, 140 gpio
 | 
			
		||||
    {PH_10,  TIM5,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 1, 0)}, // TIM5_CH1
 | 
			
		||||
    {PH_6,  TIM12,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF9_TIM12, 1, 0)}, // TIM12_CH1
 | 
			
		||||
    //{PH_11,  TIM5,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF2_TIM5, 2, 0)}, // TIM5_CH2
 | 
			
		||||
    {PI_5,  TIM8,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 1, 0)}, // TIM8_CH1
 | 
			
		||||
    {PI_6,  TIM8,  STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF3_TIM8, 2, 0)}, // TIM8_CH2
 | 
			
		||||
  #endif
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//*** SERIAL ***
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_UART_MODULE_ENABLED
 | 
			
		||||
const PinMap PinMap_UART_TX[] = {
 | 
			
		||||
  {PA_9,  USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
 | 
			
		||||
  {PD_8,  USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  {PC_6,  USART6,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio
 | 
			
		||||
    //{PG_14, USART6,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
  #endif
 | 
			
		||||
  //{PB_6,  USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
 | 
			
		||||
  //{PA_2,  USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
  //{PD_5,  USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
  //{PB_10, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  //{PC_10, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  //{PA_0,  UART4,   STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)},
 | 
			
		||||
  //{PC_10, UART4,   STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)},
 | 
			
		||||
  //{PC_12, UART5,   STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART5)},
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_UART_RX[] = {
 | 
			
		||||
  {PA_10, USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
 | 
			
		||||
  {PD_9,  USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  {PC_7,  USART6,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
  //{PA_1,  UART4,   STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)},
 | 
			
		||||
  //{PA_3,  USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
  //{PB_7,  USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
 | 
			
		||||
  //{PB_11, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  //{PC_11, UART4,   STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART4)},
 | 
			
		||||
  //{PC_11, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  //{PD_2,  UART5,   STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_UART5)},
 | 
			
		||||
  //{PD_6,  USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio
 | 
			
		||||
    //{PG_9,  USART6,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
  #endif
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_UART_RTS[] = {
 | 
			
		||||
  //{PA_1,  USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
  //{PA_12, USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
 | 
			
		||||
  //{PB_14, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  //{PD_4,  USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
  //{PD_12, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio
 | 
			
		||||
    //{PG_8,  USART6,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
    //{PG_12, USART6,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
  #endif
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_UART_CTS[] = {
 | 
			
		||||
  //{PA_0,  USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
  //{PA_11, USART1,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART1)},
 | 
			
		||||
  //{PB_13, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  //{PD_3,  USART2,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART2)},
 | 
			
		||||
  //{PD_11, USART3,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF7_USART3)},
 | 
			
		||||
  #if STM32F4X_PIN_NUM >= 144  //144 pins mcu, 114 gpio
 | 
			
		||||
    //{PG_13, USART6,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
    //{PG_15, USART6,  STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF8_USART6)},
 | 
			
		||||
  #endif
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//*** SPI ***
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_SPI_MODULE_ENABLED
 | 
			
		||||
const PinMap PinMap_SPI_MOSI[] = {
 | 
			
		||||
  {PB_5,  SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)},
 | 
			
		||||
  {PB_15, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
 | 
			
		||||
  {PC_12, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_SPI_MISO[] = {
 | 
			
		||||
  {PA_6,  SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)},
 | 
			
		||||
  {PB_14, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
 | 
			
		||||
  {PC_11, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_SPI_SCLK[] = {
 | 
			
		||||
  {PA_5,  SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)},
 | 
			
		||||
  {PB_13, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
 | 
			
		||||
  {PC_10, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_SPI_SSEL[] = {
 | 
			
		||||
  {PA_4,  SPI1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)},
 | 
			
		||||
  {PB_12, SPI2, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF5_SPI2)},
 | 
			
		||||
  {PA_15, SPI3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI3)},
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//*** CAN ***
 | 
			
		||||
 | 
			
		||||
#ifdef HAL_CAN_MODULE_ENABLED
 | 
			
		||||
#error "CAN bus isn't available on this board. Driver should be disabled."
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//*** ETHERNET ***
 | 
			
		||||
#ifdef HAL_ETH_MODULE_ENABLED
 | 
			
		||||
#error "Ethernet port isn't available on this board. Driver should be disabled."
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//*** No QUADSPI ***
 | 
			
		||||
 | 
			
		||||
//*** USB ***
 | 
			
		||||
#ifdef HAL_PCD_MODULE_ENABLED
 | 
			
		||||
const PinMap PinMap_USB_OTG_FS[] = {
 | 
			
		||||
  //{PA_8,  USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_SOF   used by LCD
 | 
			
		||||
  //{PA_9,  USB_OTG_FS, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF_NONE)},     // USB_OTG_FS_VBUS  available on wifi port, if empty
 | 
			
		||||
  //{PA_10, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_ID    available on UART1_RX if not used
 | 
			
		||||
  {PA_11, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_DM
 | 
			
		||||
  {PA_12, USB_OTG_FS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_FS)}, // USB_OTG_FS_DP
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PinMap PinMap_USB_OTG_HS[] = { /*
 | 
			
		||||
  #ifdef USE_USB_HS_IN_FS
 | 
			
		||||
    {PB_12, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_PULLUP, GPIO_AF12_OTG_HS_FS)}, // USB_OTG_HS_ID
 | 
			
		||||
    {PB_13, USB_OTG_HS, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF_NONE)}, // USB_OTG_HS_VBUS
 | 
			
		||||
    {PB_14, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_OTG_HS_FS)}, // USB_OTG_HS_DM
 | 
			
		||||
    {PB_15, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF12_OTG_HS_FS)}, // USB_OTG_HS_DP
 | 
			
		||||
  #else
 | 
			
		||||
    #error "USB in HS mode isn't supported by the board"
 | 
			
		||||
    {PA_3,  USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D0
 | 
			
		||||
    {PB_0,  USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D1
 | 
			
		||||
    {PB_1,  USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D2
 | 
			
		||||
    {PB_5,  USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D7
 | 
			
		||||
    {PB_10, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D3
 | 
			
		||||
    {PB_12, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D5
 | 
			
		||||
    {PB_13, USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_D6
 | 
			
		||||
    {PC_0,  USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_STP
 | 
			
		||||
    {PC_2,  USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_DIR
 | 
			
		||||
    {PC_3,  USB_OTG_HS, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF10_OTG_HS)}, // USB_OTG_HS_ULPI_NXT
 | 
			
		||||
  #endif // USE_USB_HS_IN_FS
 | 
			
		||||
  */
 | 
			
		||||
  {NC,    NP,    0}
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
@@ -0,0 +1,50 @@
 | 
			
		||||
/* SYS_WKUP */
 | 
			
		||||
#ifdef PWR_WAKEUP_PIN1
 | 
			
		||||
  SYS_WKUP1 = PA_0,
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef PWR_WAKEUP_PIN2
 | 
			
		||||
  SYS_WKUP2 = NC,
 | 
			
		||||
#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_D7  = PB_5,
 | 
			
		||||
  USB_OTG_HS_ULPI_D3  = PB_10,
 | 
			
		||||
  USB_OTG_HS_ULPI_D4  = PB_11,
 | 
			
		||||
  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
 | 
			
		||||
@@ -0,0 +1,52 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#define HAL_MODULE_ENABLED
 | 
			
		||||
#define HAL_ADC_MODULE_ENABLED
 | 
			
		||||
#define HAL_CRC_MODULE_ENABLED
 | 
			
		||||
#define HAL_DMA_MODULE_ENABLED
 | 
			
		||||
#define HAL_GPIO_MODULE_ENABLED
 | 
			
		||||
#define HAL_I2C_MODULE_ENABLED
 | 
			
		||||
#define HAL_PWR_MODULE_ENABLED
 | 
			
		||||
#define HAL_RCC_MODULE_ENABLED
 | 
			
		||||
//#define HAL_RTC_MODULE_ENABLED Real Time Clock...do we use it?
 | 
			
		||||
#define HAL_SPI_MODULE_ENABLED
 | 
			
		||||
#define HAL_TIM_MODULE_ENABLED
 | 
			
		||||
#define HAL_USART_MODULE_ENABLED
 | 
			
		||||
#define HAL_CORTEX_MODULE_ENABLED
 | 
			
		||||
//#define HAL_UART_MODULE_ENABLED // by default
 | 
			
		||||
//#define HAL_PCD_MODULE_ENABLED  // Since STM32 v3.10700.191028 this is automatically added if any type of USB is enabled (as in Arduino IDE)
 | 
			
		||||
 | 
			
		||||
#undef HAL_SD_MODULE_ENABLED
 | 
			
		||||
#undef HAL_DAC_MODULE_ENABLED
 | 
			
		||||
#undef HAL_FLASH_MODULE_ENABLED
 | 
			
		||||
#undef HAL_CAN_MODULE_ENABLED
 | 
			
		||||
#undef HAL_CAN_LEGACY_MODULE_ENABLED
 | 
			
		||||
#undef HAL_CEC_MODULE_ENABLED
 | 
			
		||||
#undef HAL_CRYP_MODULE_ENABLED
 | 
			
		||||
#undef HAL_DCMI_MODULE_ENABLED
 | 
			
		||||
#undef HAL_DMA2D_MODULE_ENABLED
 | 
			
		||||
#undef HAL_ETH_MODULE_ENABLED
 | 
			
		||||
#undef HAL_NAND_MODULE_ENABLED
 | 
			
		||||
#undef HAL_NOR_MODULE_ENABLED
 | 
			
		||||
#undef HAL_PCCARD_MODULE_ENABLED
 | 
			
		||||
#undef HAL_SRAM_MODULE_ENABLED
 | 
			
		||||
#undef HAL_SDRAM_MODULE_ENABLED
 | 
			
		||||
#undef HAL_HASH_MODULE_ENABLED
 | 
			
		||||
#undef HAL_EXTI_MODULE_ENABLED
 | 
			
		||||
#undef HAL_SMBUS_MODULE_ENABLED
 | 
			
		||||
#undef HAL_I2S_MODULE_ENABLED
 | 
			
		||||
#undef HAL_IWDG_MODULE_ENABLED
 | 
			
		||||
#undef HAL_LTDC_MODULE_ENABLED
 | 
			
		||||
#undef HAL_DSI_MODULE_ENABLED
 | 
			
		||||
#undef HAL_QSPI_MODULE_ENABLED
 | 
			
		||||
#undef HAL_RNG_MODULE_ENABLED
 | 
			
		||||
#undef HAL_SAI_MODULE_ENABLED
 | 
			
		||||
#undef HAL_IRDA_MODULE_ENABLED
 | 
			
		||||
#undef HAL_SMARTCARD_MODULE_ENABLED
 | 
			
		||||
#undef HAL_WWDG_MODULE_ENABLED
 | 
			
		||||
//#undef HAL_HCD_MODULE_ENABLED
 | 
			
		||||
#undef HAL_FMPI2C_MODULE_ENABLED
 | 
			
		||||
#undef HAL_SPDIFRX_MODULE_ENABLED
 | 
			
		||||
#undef HAL_DFSDM_MODULE_ENABLED
 | 
			
		||||
#undef HAL_LPTIM_MODULE_ENABLED
 | 
			
		||||
#undef HAL_MMC_MODULE_ENABLED
 | 
			
		||||
@@ -0,0 +1,204 @@
 | 
			
		||||
/*
 | 
			
		||||
*****************************************************************************
 | 
			
		||||
**
 | 
			
		||||
 | 
			
		||||
**  File        : LinkerScript.ld
 | 
			
		||||
**
 | 
			
		||||
**  Abstract    : Linker script for STM32F407ZGTx Device with
 | 
			
		||||
**                1024KByte 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.
 | 
			
		||||
**
 | 
			
		||||
*****************************************************************************
 | 
			
		||||
** @attention
 | 
			
		||||
**
 | 
			
		||||
** <h2><center>© COPYRIGHT(c) 2014 Ac6</center></h2>
 | 
			
		||||
**
 | 
			
		||||
** Redistribution and use in source and binary forms, with or without modification,
 | 
			
		||||
** are permitted provided that the following conditions are met:
 | 
			
		||||
**   1. Redistributions of source code must retain the above copyright notice,
 | 
			
		||||
**      this list of conditions and the following disclaimer.
 | 
			
		||||
**   2. Redistributions in binary form must reproduce the above copyright notice,
 | 
			
		||||
**      this list of conditions and the following disclaimer in the documentation
 | 
			
		||||
**      and/or other materials provided with the distribution.
 | 
			
		||||
**   3. Neither the name of Ac6 nor the names of its contributors
 | 
			
		||||
**      may be used to endorse or promote products derived from this software
 | 
			
		||||
**      without specific prior written permission.
 | 
			
		||||
**
 | 
			
		||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
			
		||||
** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
			
		||||
** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | 
			
		||||
** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | 
			
		||||
** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | 
			
		||||
** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
**
 | 
			
		||||
*****************************************************************************
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/* 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
 | 
			
		||||
{
 | 
			
		||||
FLASH (rx)      : ORIGIN = 0x8008000, LENGTH = 1024K
 | 
			
		||||
RAM (xrw)      : ORIGIN = 0x20000000, LENGTH = 128K
 | 
			
		||||
CCMRAM (rw)      : ORIGIN = 0x10000000, LENGTH = 64K
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* 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):
 | 
			
		||||
  {
 | 
			
		||||
    . = 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):
 | 
			
		||||
  {
 | 
			
		||||
    . = 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
 | 
			
		||||
 | 
			
		||||
  _siccmram = LOADADDR(.ccmram);
 | 
			
		||||
 | 
			
		||||
  /* CCM-RAM section
 | 
			
		||||
   *
 | 
			
		||||
   * IMPORTANT NOTE!
 | 
			
		||||
   * If initialized variables will be placed in this section,
 | 
			
		||||
   * the startup code needs to be modified to copy the init-values.
 | 
			
		||||
   */
 | 
			
		||||
  .ccmram :
 | 
			
		||||
  {
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    _sccmram = .;       /* create a global symbol at ccmram start */
 | 
			
		||||
    *(.ccmram)
 | 
			
		||||
    *(.ccmram*)
 | 
			
		||||
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
    _eccmram = .;       /* create a global symbol at ccmram end */
 | 
			
		||||
  } >CCMRAM 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(4);
 | 
			
		||||
    PROVIDE ( end = . );
 | 
			
		||||
    PROVIDE ( _end = . );
 | 
			
		||||
    . = . + _Min_Heap_Size;
 | 
			
		||||
    . = . + _Min_Stack_Size;
 | 
			
		||||
    . = ALIGN(4);
 | 
			
		||||
  } >RAM
 | 
			
		||||
 | 
			
		||||
  /* Remove information from the standard libraries */
 | 
			
		||||
  /DISCARD/ :
 | 
			
		||||
  {
 | 
			
		||||
    libc.a ( * )
 | 
			
		||||
    libm.a ( * )
 | 
			
		||||
    libgcc.a ( * )
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .ARM.attributes 0 : { *(.ARM.attributes) }
 | 
			
		||||
}
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user