mirror of https://github.com/ARMmbed/mbed-os.git
Merge pull request #13992 from jeromecoutant/PR_SCRIPT
STM32_gen_PeripheralPins.py v1.19pull/13959/head
commit
626804aa54
|
@ -158,17 +158,20 @@ It is recommended to use a python script to generate those files
|
||||||
|
|
||||||
https://github.com/ARMmbed/mbed-os/blob/master/targets/TARGET_STM/tools/STM32_gen_PeripheralPins.py
|
https://github.com/ARMmbed/mbed-os/blob/master/targets/TARGET_STM/tools/STM32_gen_PeripheralPins.py
|
||||||
|
|
||||||
STM32CubeMX has to be installed first. Path has to be specified in the `cube_path.json` file.
|
This script is using MCU database from https://github.com/STMicroelectronics/STM32_open_pin_data.git repo
|
||||||
|
|
||||||
```
|
```
|
||||||
$ python targets/TARGET_STM/tools/STM32_gen_PeripheralPins.py -h
|
$ python targets/TARGET_STM/tools/STM32_gen_PeripheralPins.py -h
|
||||||
|
|
||||||
Script version 1.17
|
SScript version 1.19
|
||||||
usage: STM32_gen_PeripheralPins.py [-h] (-l | -b | -m xml | -t HW | -c CUSTOM)
|
|
||||||
|
|
||||||
Script will generate PeripheralPins.c thanks to the xml files description available in
|
Checking STM32_open_pin_data repo...
|
||||||
STM32CubeMX directory defined in 'cube_path.json':
|
*** git clone done
|
||||||
C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeMX
|
|
||||||
|
usage: STM32_gen_PeripheralPins.py [-h] (-l | -b | -m xml | -t HW | -c CUSTOM)
|
||||||
|
[-g]
|
||||||
|
|
||||||
|
Script will generate PeripheralPins.c thanks to the xml files description available in STM32_open_pin_data GitHub repo
|
||||||
|
|
||||||
More information in targets/TARGET_STM/README.md
|
More information in targets/TARGET_STM/README.md
|
||||||
|
|
||||||
|
@ -182,6 +185,7 @@ optional arguments:
|
||||||
Parameter can be a filter like L496 (only the first file found will be parsed).
|
Parameter can be a filter like L496 (only the first file found will be parsed).
|
||||||
-c CUSTOM, --custom CUSTOM
|
-c CUSTOM, --custom CUSTOM
|
||||||
specify a custom board .ioc file description to use (use double quotes).
|
specify a custom board .ioc file description to use (use double quotes).
|
||||||
|
-g, --gpio Add GPIO PinMap table
|
||||||
|
|
||||||
Once generated, you have to check and comment pins that can not be used (specific HW, internal ADC channels, remove PWM using us ticker timer, ...)
|
Once generated, you have to check and comment pins that can not be used (specific HW, internal ADC channels, remove PWM using us ticker timer, ...)
|
||||||
|
|
||||||
|
@ -198,19 +202,22 @@ STM32F427Z(G-I)Tx.xml
|
||||||
|
|
||||||
$ python targets/TARGET_STM/tools/STM32_gen_PeripheralPins.py -m "STM32F427V(G-I)Tx.xml"
|
$ python targets/TARGET_STM/tools/STM32_gen_PeripheralPins.py -m "STM32F427V(G-I)Tx.xml"
|
||||||
|
|
||||||
Script version 1.17
|
Script version 1.19
|
||||||
CubeMX DB version DB.6.0.0
|
|
||||||
|
Checking STM32_open_pin_data repo...
|
||||||
|
Already up to date.
|
||||||
|
|
||||||
|
STM32_open_pin_data DB version STM32CubeMX-DB.6.0.10
|
||||||
|
|
||||||
* Output directory: targets_custom\TARGET_STM\TARGET_STM32F4\TARGET_STM32F427xG\TARGET_STM32F427VGT
|
* Output directory: targets_custom\TARGET_STM\TARGET_STM32F4\TARGET_STM32F427xG\TARGET_STM32F427VGT
|
||||||
* Generating PeripheralPins.c and PinNames.h with 'C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeMX\db\mcu\STM32F427V(G-I)Tx.xml'
|
* Generating PeripheralPins.c and PinNames.h with 'STM32_open_pin_data\mcu\STM32F427V(G-I)Tx.xml'
|
||||||
* GPIO file: C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeMX\db\mcu\IP\GPIO-STM32F427_gpio_v1_0_Modes.xml
|
* GPIO file: STM32_open_pin_data\mcu\IP\GPIO-STM32F427_gpio_v1_0_Modes.xml
|
||||||
* I/O pins found: 135 connected: 0
|
* I/O pins found: 135 connected: 0
|
||||||
|
|
||||||
* Output directory: targets_custom\TARGET_STM\TARGET_STM32F4\TARGET_STM32F427xI\TARGET_STM32F427VIT
|
* Output directory: targets_custom\TARGET_STM\TARGET_STM32F4\TARGET_STM32F427xI\TARGET_STM32F427VIT
|
||||||
* Generating PeripheralPins.c and PinNames.h with 'C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeMX\db\mcu\STM32F427V(G-I)Tx.xml'
|
* Generating PeripheralPins.c and PinNames.h with 'STM32_open_pin_data\mcu\STM32F427V(G-I)Tx.xml'
|
||||||
* GPIO file: C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeMX\db\mcu\IP\GPIO-STM32F427_gpio_v1_0_Modes.xml
|
* GPIO file: STM32_open_pin_data\mcu\IP\GPIO-STM32F427_gpio_v1_0_Modes.xml
|
||||||
* I/O pins found: 135 connected: 0
|
* I/O pins found: 135 connected: 0
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Use of custom_targets.json
|
### Use of custom_targets.json
|
||||||
|
|
|
@ -25,15 +25,17 @@ import sys
|
||||||
import textwrap
|
import textwrap
|
||||||
from xml.dom.minidom import parse, Node
|
from xml.dom.minidom import parse, Node
|
||||||
from argparse import RawTextHelpFormatter
|
from argparse import RawTextHelpFormatter
|
||||||
|
import subprocess
|
||||||
|
|
||||||
GENPINMAP_VERSION = "1.17"
|
GENPINMAP_VERSION = "1.19"
|
||||||
|
|
||||||
ADD_DEVICE_IF = 0
|
ADD_DEVICE_IF = 0
|
||||||
|
ADD_GPIO_PINMAP = 0
|
||||||
DEBUG_PRINT = 0
|
DEBUG_PRINT = 0
|
||||||
|
|
||||||
mcu_file=""
|
mcu_file=""
|
||||||
mcu_list = [] #'name'
|
mcu_list = [] #'name'
|
||||||
io_list = [] #'PIN','name'
|
gpio_list = [] #'PIN','name','BOOT/OSC'
|
||||||
adclist = [] #'PIN','name','ADCSignal'
|
adclist = [] #'PIN','name','ADCSignal'
|
||||||
daclist = [] #'PIN','name','DACSignal'
|
daclist = [] #'PIN','name','DACSignal'
|
||||||
i2cscl_list = [] #'PIN','name','I2CSCLSignal'
|
i2cscl_list = [] #'PIN','name','I2CSCLSignal'
|
||||||
|
@ -138,6 +140,8 @@ def find_tim_mst():
|
||||||
search_order = ["TIM5", "TIM2"]
|
search_order = ["TIM5", "TIM2"]
|
||||||
elif TARGET_FAMILY == "STM32WB":
|
elif TARGET_FAMILY == "STM32WB":
|
||||||
search_order = ["TIM5", "TIM16"]
|
search_order = ["TIM5", "TIM16"]
|
||||||
|
elif TARGET_FAMILY == "STM32WL":
|
||||||
|
search_order = ["TIM2"]
|
||||||
else:
|
else:
|
||||||
search_order = ["TIM5"]
|
search_order = ["TIM5"]
|
||||||
for EachTimer in search_order:
|
for EachTimer in search_order:
|
||||||
|
@ -253,9 +257,9 @@ def get_gpio_af_num_stm32f1(pintofind, iptofind):
|
||||||
.replace("AFIO_TIM3_ENABLE", "9")\
|
.replace("AFIO_TIM3_ENABLE", "9")\
|
||||||
.replace("AFIO_CAN1_2", "10")
|
.replace("AFIO_CAN1_2", "10")
|
||||||
|
|
||||||
def store_pin(pin, name):
|
def store_pin(pin, name, functionality):
|
||||||
# store pin I/O
|
# store pin I/O
|
||||||
io_list.append([pin, name])
|
gpio_list.append([pin, name, functionality])
|
||||||
|
|
||||||
|
|
||||||
# function to store ADC list
|
# function to store ADC list
|
||||||
|
@ -492,6 +496,9 @@ def print_footer():
|
||||||
|
|
||||||
|
|
||||||
def print_all_lists():
|
def print_all_lists():
|
||||||
|
if ADD_GPIO_PINMAP:
|
||||||
|
if print_list_header("GPIO", "GPIO", gpio_list, "GPIO"):
|
||||||
|
print_gpio()
|
||||||
if print_list_header("ADC", "ADC", adclist, "ANALOGIN"):
|
if print_list_header("ADC", "ADC", adclist, "ANALOGIN"):
|
||||||
print_adc()
|
print_adc()
|
||||||
if print_list_header("DAC", "DAC", daclist, "ANALOGOUT"):
|
if print_list_header("DAC", "DAC", daclist, "ANALOGOUT"):
|
||||||
|
@ -562,7 +569,7 @@ def print_all_lists():
|
||||||
print_usb(usb_otgfs_list)
|
print_usb(usb_otgfs_list)
|
||||||
if print_list_header("USBDEVICE", "USB_HS", usb_otghs_list, "USBDEVICE"):
|
if print_list_header("USBDEVICE", "USB_HS", usb_otghs_list, "USBDEVICE"):
|
||||||
print_usb(usb_otghs_list)
|
print_usb(usb_otghs_list)
|
||||||
print_pin_list(io_list)
|
print_pin_list(gpio_list)
|
||||||
print_h_file(usb_list, "USB")
|
print_h_file(usb_list, "USB")
|
||||||
print_h_file(usb_otgfs_list, "USB FS")
|
print_h_file(usb_otgfs_list, "USB FS")
|
||||||
print_h_file(usb_otghs_list, "USB HS")
|
print_h_file(usb_otghs_list, "USB HS")
|
||||||
|
@ -599,6 +606,36 @@ def print_list_header(comment, name, l, switch):
|
||||||
return len(l)
|
return len(l)
|
||||||
|
|
||||||
|
|
||||||
|
def print_gpio():
|
||||||
|
|
||||||
|
for parsed_pin in gpio_list:
|
||||||
|
commented_line = " "
|
||||||
|
if parsed_pin[1] in PinLabel:
|
||||||
|
if "STDIO_UART" in PinLabel[parsed_pin[1]]:
|
||||||
|
commented_line = "//"
|
||||||
|
if "RCC_OSC" in PinLabel[parsed_pin[1]]:
|
||||||
|
commented_line = "//"
|
||||||
|
if parsed_pin[1] in PinPuPd:
|
||||||
|
commented_line = "//"
|
||||||
|
if "OSC" in parsed_pin[2]:
|
||||||
|
commented_line = "//"
|
||||||
|
line_to_write = "%-11s" % (commented_line + " {" + parsed_pin[0] + ',')
|
||||||
|
line_to_write += ' 0, 0},'
|
||||||
|
if parsed_pin[1] in PinLabel:
|
||||||
|
line_to_write += ' // Connected to ' + PinLabel[parsed_pin[1]]
|
||||||
|
if parsed_pin[1] in PinPuPd:
|
||||||
|
line_to_write += ' // ' + PinPuPd[parsed_pin[1]]
|
||||||
|
if parsed_pin[2] != "":
|
||||||
|
line_to_write += ' // ' + parsed_pin[2]
|
||||||
|
line_to_write += '\n'
|
||||||
|
out_c_file.write(line_to_write)
|
||||||
|
out_c_file.write( """ {NC, NC, 0}
|
||||||
|
};
|
||||||
|
""")
|
||||||
|
if ADD_DEVICE_IF:
|
||||||
|
out_c_file.write( "#endif\n" )
|
||||||
|
|
||||||
|
|
||||||
def print_adc():
|
def print_adc():
|
||||||
# Check GPIO version (alternate or not)
|
# Check GPIO version (alternate or not)
|
||||||
s_pin_data = "STM_PIN_DATA_EXT(STM_MODE_ANALOG"
|
s_pin_data = "STM_PIN_DATA_EXT(STM_MODE_ANALOG"
|
||||||
|
@ -625,7 +662,7 @@ def print_adc():
|
||||||
else:
|
else:
|
||||||
prev_p = parsed_pin[0]
|
prev_p = parsed_pin[0]
|
||||||
parsed_pin[0] += '_ALT%d' % alt_index
|
parsed_pin[0] += '_ALT%d' % alt_index
|
||||||
store_pin(parsed_pin[0], parsed_pin[0])
|
store_pin(parsed_pin[0], parsed_pin[0], "")
|
||||||
alt_index += 1
|
alt_index += 1
|
||||||
else:
|
else:
|
||||||
prev_p = parsed_pin[0]
|
prev_p = parsed_pin[0]
|
||||||
|
@ -701,7 +738,7 @@ def print_i2c(l):
|
||||||
if parsed_pin[0] == prev_p:
|
if parsed_pin[0] == prev_p:
|
||||||
prev_p = parsed_pin[0]
|
prev_p = parsed_pin[0]
|
||||||
parsed_pin[0] += '_ALT%d' % alt_index
|
parsed_pin[0] += '_ALT%d' % alt_index
|
||||||
store_pin(parsed_pin[0], parsed_pin[0])
|
store_pin(parsed_pin[0], parsed_pin[0], "")
|
||||||
alt_index += 1
|
alt_index += 1
|
||||||
else:
|
else:
|
||||||
prev_p = parsed_pin[0]
|
prev_p = parsed_pin[0]
|
||||||
|
@ -754,7 +791,7 @@ def print_pwm():
|
||||||
if parsed_pin[0] == prev_p:
|
if parsed_pin[0] == prev_p:
|
||||||
prev_p = parsed_pin[0]
|
prev_p = parsed_pin[0]
|
||||||
parsed_pin[0] += '_ALT%d' % alt_index
|
parsed_pin[0] += '_ALT%d' % alt_index
|
||||||
store_pin(parsed_pin[0], parsed_pin[0])
|
store_pin(parsed_pin[0], parsed_pin[0], "")
|
||||||
alt_index += 1
|
alt_index += 1
|
||||||
else:
|
else:
|
||||||
prev_p = parsed_pin[0]
|
prev_p = parsed_pin[0]
|
||||||
|
@ -805,7 +842,7 @@ def print_uart(l):
|
||||||
if parsed_pin[0] == prev_p:
|
if parsed_pin[0] == prev_p:
|
||||||
prev_p = parsed_pin[0]
|
prev_p = parsed_pin[0]
|
||||||
parsed_pin[0] += '_ALT%d' % alt_index
|
parsed_pin[0] += '_ALT%d' % alt_index
|
||||||
store_pin(parsed_pin[0], parsed_pin[0])
|
store_pin(parsed_pin[0], parsed_pin[0], "")
|
||||||
alt_index += 1
|
alt_index += 1
|
||||||
else:
|
else:
|
||||||
prev_p = parsed_pin[0]
|
prev_p = parsed_pin[0]
|
||||||
|
@ -849,7 +886,7 @@ def print_spi(l):
|
||||||
if parsed_pin[0] == prev_p:
|
if parsed_pin[0] == prev_p:
|
||||||
prev_p = parsed_pin[0]
|
prev_p = parsed_pin[0]
|
||||||
parsed_pin[0] += '_ALT%d' % alt_index
|
parsed_pin[0] += '_ALT%d' % alt_index
|
||||||
store_pin(parsed_pin[0], parsed_pin[0])
|
store_pin(parsed_pin[0], parsed_pin[0], "")
|
||||||
alt_index += 1
|
alt_index += 1
|
||||||
else:
|
else:
|
||||||
prev_p = parsed_pin[0]
|
prev_p = parsed_pin[0]
|
||||||
|
@ -1187,7 +1224,7 @@ def print_h_file(pin_list, comment):
|
||||||
if parsed_pin[2] == prev_s:
|
if parsed_pin[2] == prev_s:
|
||||||
prev_s = parsed_pin[2]
|
prev_s = parsed_pin[2]
|
||||||
parsed_pin[2] += '_ALT%d' % alt_index
|
parsed_pin[2] += '_ALT%d' % alt_index
|
||||||
store_pin(parsed_pin[0], parsed_pin[0])
|
store_pin(parsed_pin[0], parsed_pin[0], "")
|
||||||
alt_index += 1
|
alt_index += 1
|
||||||
else:
|
else:
|
||||||
prev_s = parsed_pin[2]
|
prev_s = parsed_pin[2]
|
||||||
|
@ -1212,6 +1249,7 @@ def natural_sortkey_i2c(list_2_elem):
|
||||||
return tuple(int(num) if num else alpha for num, alpha in tokenize(list_2_elem[2].replace("FMPI2C", "ZFMPI2C")))
|
return tuple(int(num) if num else alpha for num, alpha in tokenize(list_2_elem[2].replace("FMPI2C", "ZFMPI2C")))
|
||||||
|
|
||||||
def sort_my_lists():
|
def sort_my_lists():
|
||||||
|
gpio_list.sort(key=natural_sortkey)
|
||||||
adclist.sort(key=natural_sortkey)
|
adclist.sort(key=natural_sortkey)
|
||||||
daclist.sort(key=natural_sortkey)
|
daclist.sort(key=natural_sortkey)
|
||||||
i2cscl_list.sort(key=natural_sortkey_i2c) # first sort on name column
|
i2cscl_list.sort(key=natural_sortkey_i2c) # first sort on name column
|
||||||
|
@ -1256,7 +1294,7 @@ def sort_my_lists():
|
||||||
usb_otghs_list.sort(key=natural_sortkey)
|
usb_otghs_list.sort(key=natural_sortkey)
|
||||||
|
|
||||||
def clean_all_lists():
|
def clean_all_lists():
|
||||||
del io_list[:]
|
del gpio_list[:]
|
||||||
del adclist[:]
|
del adclist[:]
|
||||||
del daclist[:]
|
del daclist[:]
|
||||||
del i2cscl_list[:]
|
del i2cscl_list[:]
|
||||||
|
@ -1312,16 +1350,19 @@ def parse_pins():
|
||||||
name = s.attributes["Name"].value.strip() # full name: "PF0 / OSC_IN"
|
name = s.attributes["Name"].value.strip() # full name: "PF0 / OSC_IN"
|
||||||
if "_C" in name:
|
if "_C" in name:
|
||||||
DUAL_PAD = True
|
DUAL_PAD = True
|
||||||
store_pin("PA_0C", "")
|
store_pin("PA_0C", "", "")
|
||||||
store_pin("PA_1C", "")
|
store_pin("PA_1C", "", "")
|
||||||
store_pin("PC_2C", "")
|
store_pin("PC_2C", "", "")
|
||||||
store_pin("PC_3C", "")
|
store_pin("PC_3C", "", "")
|
||||||
|
|
||||||
if s.attributes["Type"].value == "I/O":
|
if s.attributes["Type"].value == "I/O":
|
||||||
store_pin(pin, name)
|
if "-" in s.attributes["Name"].value:
|
||||||
|
store_pin(pin, name, s.attributes["Name"].value)
|
||||||
|
else:
|
||||||
|
store_pin(pin, name, "")
|
||||||
if DUAL_PAD:
|
if DUAL_PAD:
|
||||||
if "_C" in name:
|
if "_C" in name:
|
||||||
store_pin(pin.replace("2C", "2").replace("3C", "3"), name)
|
store_pin(pin.replace("2C", "2").replace("3C", "3"), name, "")
|
||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
siglist = s.getElementsByTagName("Signal")
|
siglist = s.getElementsByTagName("Signal")
|
||||||
|
@ -1357,6 +1398,7 @@ def parse_pins():
|
||||||
|
|
||||||
PinData = {}
|
PinData = {}
|
||||||
PinLabel = {}
|
PinLabel = {}
|
||||||
|
PinPuPd = {}
|
||||||
|
|
||||||
|
|
||||||
def parse_board_file(file_name):
|
def parse_board_file(file_name):
|
||||||
|
@ -1387,6 +1429,13 @@ def parse_board_file(file_name):
|
||||||
PinLabel[EachPin] = PinData[EachPin]["Signal"]
|
PinLabel[EachPin] = PinData[EachPin]["Signal"]
|
||||||
if "GPIO_Label" in PinData[EachPin]:
|
if "GPIO_Label" in PinData[EachPin]:
|
||||||
PinLabel[EachPin] = PinData[EachPin]["GPIO_Label"]
|
PinLabel[EachPin] = PinData[EachPin]["GPIO_Label"]
|
||||||
|
if "GPIO_PuPdOD" in PinData[EachPin]:
|
||||||
|
if PinData[EachPin]["GPIO_PuPdOD"] == "GPIO_PULLUP":
|
||||||
|
PinPuPd[EachPin] = "PULLUP"
|
||||||
|
elif PinData[EachPin]["GPIO_PuPdOD"] == "GPIO_NOPULL":
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
print("!!! error SCRIPT ISSUE with %s for %s" % (PinData[EachPin]["GPIO_PuPdOD"], EachPin))
|
||||||
if any(led in PinLabel[EachPin].upper() for led in
|
if any(led in PinLabel[EachPin].upper() for led in
|
||||||
["LED", "LD1", "LD2", "LD3", "LD4", "LD5", "LD6", "LD7", "LD8", "LD9"]):
|
["LED", "LD1", "LD2", "LD3", "LD4", "LD5", "LD6", "LD7", "LD8", "LD9"]):
|
||||||
LED_list.append(EachPin)
|
LED_list.append(EachPin)
|
||||||
|
@ -1456,41 +1505,29 @@ print ("\nScript version %s" % GENPINMAP_VERSION)
|
||||||
cur_dir = os.getcwd()
|
cur_dir = os.getcwd()
|
||||||
PeripheralPins_c_filename = "PeripheralPins.c"
|
PeripheralPins_c_filename = "PeripheralPins.c"
|
||||||
PinNames_h_filename = "PinNames.h"
|
PinNames_h_filename = "PinNames.h"
|
||||||
config_filename = "cube_path.json"
|
|
||||||
|
|
||||||
|
print ("\nChecking STM32_open_pin_data repo...")
|
||||||
|
if not os.path.exists("STM32_open_pin_data"):
|
||||||
try:
|
try:
|
||||||
config_file = open(config_filename, "r")
|
CONSOLE = subprocess.check_output(["git", "clone", r"https://github.com/STMicroelectronics/STM32_open_pin_data.git"], stderr=subprocess.STDOUT)
|
||||||
except IOError:
|
print("*** git clone done\n")
|
||||||
print("Please set your configuration in '%s' file" % config_filename)
|
# print(CONSOLE)
|
||||||
config_file = open(config_filename, "w")
|
except:
|
||||||
if sys.platform.startswith("win32"):
|
print("!!! Repo clone error !!!")
|
||||||
print_debug("Platform is Windows")
|
|
||||||
cubemxdir = "C:\\Program Files\\STMicroelectronics\\STM32Cube\\STM32CubeMX"
|
|
||||||
elif sys.platform.startswith("linux"):
|
|
||||||
print_debug("Platform is Linux")
|
|
||||||
cubemxdir = os.getenv("HOME")+"/STM32CubeMX"
|
|
||||||
elif sys.platform.startswith("darwin"):
|
|
||||||
print_debug("Platform is Mac OSX")
|
|
||||||
cubemxdir = "/Applications/STMicroelectronics/STM32CubeMX.app/Contents/Resources"
|
|
||||||
else:
|
else:
|
||||||
print_debug("Platform unknown")
|
try:
|
||||||
cubemxdir = "<Set CubeMX install directory>"
|
os.chdir("STM32_open_pin_data")
|
||||||
config_file.write(json.dumps({"CUBEMX_DIRECTORY":cubemxdir}))
|
CONSOLE = subprocess.check_output(["git", "pull"], stderr=subprocess.STDOUT).decode('ascii')
|
||||||
config_file.close()
|
print("\t%s" % CONSOLE)
|
||||||
print("Default path set: %s\n" % cubemxdir)
|
os.chdir("..")
|
||||||
config_file = open(config_filename, "r")
|
except:
|
||||||
|
print("!!! git pull issue !!!")
|
||||||
config = json.load(config_file)
|
exit(3)
|
||||||
config_file.close()
|
|
||||||
cubemxdir = config["CUBEMX_DIRECTORY"]
|
|
||||||
|
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
description=textwrap.dedent('''\
|
description=textwrap.dedent('''\
|
||||||
Script will generate %s thanks to the xml files description available in
|
Script will generate %s thanks to the xml files description available in STM32_open_pin_data GitHub repo\n
|
||||||
STM32CubeMX directory defined in '%s':
|
More information in targets/TARGET_STM/README.md''' % (PeripheralPins_c_filename)),
|
||||||
\t%s\n
|
|
||||||
More information in targets/TARGET_STM/README.md''' % (PeripheralPins_c_filename, config_filename, cubemxdir)),
|
|
||||||
epilog=textwrap.dedent('''\
|
epilog=textwrap.dedent('''\
|
||||||
Once generated, you have to check and comment pins that can not be used (specific HW, internal ADC channels, remove PWM using us ticker timer, ...)
|
Once generated, you have to check and comment pins that can not be used (specific HW, internal ADC channels, remove PWM using us ticker timer, ...)
|
||||||
'''),
|
'''),
|
||||||
|
@ -1516,24 +1553,26 @@ group.add_argument("-c", "--custom", help=textwrap.dedent('''\
|
||||||
specify a custom board .ioc file description to use (use double quotes).
|
specify a custom board .ioc file description to use (use double quotes).
|
||||||
'''))
|
'''))
|
||||||
|
|
||||||
|
parser.add_argument("-g", "--gpio", help="Add GPIO PinMap table", action="store_true")
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
if not(os.path.isdir(cubemxdir)):
|
cubemxdirMCU = os.path.join("STM32_open_pin_data", "mcu")
|
||||||
print ("\n ! ! ! Cube Mx seems not to be installed or not at the requested location")
|
cubemxdirIP = os.path.join("STM32_open_pin_data", "mcu", "IP")
|
||||||
print ("\n ! ! ! please check the value you set for 'CUBEMX_DIRECTORY' in '%s' file" % config_filename)
|
cubemxdirBOARDS = os.path.join("STM32_open_pin_data", "boards")
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
cubemxdirMCU = os.path.join(cubemxdir, "db", "mcu")
|
os.chdir("STM32_open_pin_data")
|
||||||
cubemxdirIP = os.path.join(cubemxdir, "db", "mcu", "IP")
|
# print("*** git tag ***")
|
||||||
cubemxdirBOARDS = os.path.join(cubemxdir, "db", "plugins", "boardmanager", "boards")
|
CONSOLE = subprocess.check_output(["git", "tag"], stderr=subprocess.STDOUT).decode('ascii')
|
||||||
|
# print(CONSOLE)
|
||||||
|
VERSION_LIST=CONSOLE.splitlines()
|
||||||
|
# print("\t%s" % VERSION_LIST)
|
||||||
|
cubemx_db_version = VERSION_LIST[-1]
|
||||||
|
os.chdir("..")
|
||||||
|
print ("STM32_open_pin_data DB version %s\n" % cubemx_db_version)
|
||||||
|
|
||||||
version_file = os.path.join(cubemxdir, "db", "package.xml")
|
if args.gpio:
|
||||||
cubemx_db_version = "NOT_FOUND"
|
ADD_GPIO_PINMAP = 1
|
||||||
xml_file = parse(version_file)
|
|
||||||
PackDescription_item = xml_file.getElementsByTagName("PackDescription")
|
|
||||||
for item in PackDescription_item:
|
|
||||||
cubemx_db_version = item.attributes["Release"].value
|
|
||||||
print ("CubeMX DB version %s\n" % cubemx_db_version)
|
|
||||||
|
|
||||||
if args.list:
|
if args.list:
|
||||||
file_count = 0
|
file_count = 0
|
||||||
|
@ -1599,6 +1638,21 @@ if args.target:
|
||||||
elif "C40_" in board_file_name:
|
elif "C40_" in board_file_name:
|
||||||
print("C40_Discovery_STM32F4DISCOVERY_STM32F407VG_Board replaced by C47_Discovery_STM32F407G-DISC1_STM32F407VG_Board")
|
print("C40_Discovery_STM32F4DISCOVERY_STM32F407VG_Board replaced by C47_Discovery_STM32F407G-DISC1_STM32F407VG_Board")
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
elif "P-NUCLEO-WB55" in board_file_name:
|
||||||
|
print("Same board as NUCLEO-WB55")
|
||||||
|
sys.exit(0)
|
||||||
|
elif "MultiToSingleCore_Board" in board_file_name:
|
||||||
|
print("Same board as PL0_Nucleo_NUCLEO-WL55JC1_STM32WL55JCI_Board_AllConfig.ioc")
|
||||||
|
sys.exit(0)
|
||||||
|
elif "WL55JC2" in board_file_name:
|
||||||
|
print("Same board as PL0_Nucleo_NUCLEO-WL55JC1_STM32WL55JCI_Board_AllConfig.ioc")
|
||||||
|
sys.exit(0)
|
||||||
|
elif "B-L475E-IOT01A2" in board_file_name:
|
||||||
|
print("Same board as B-L475E-IOT01A1")
|
||||||
|
sys.exit(0)
|
||||||
|
elif "USBDongle" in board_file_name:
|
||||||
|
print("USB dongle not parsed")
|
||||||
|
sys.exit(0)
|
||||||
elif "TrustZoneEnabled" in board_file_name:
|
elif "TrustZoneEnabled" in board_file_name:
|
||||||
print("TrustZoneEnabled boards not parsed")
|
print("TrustZoneEnabled boards not parsed")
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
@ -1627,6 +1681,7 @@ if args.target:
|
||||||
"DISCO_G071RBT": "DISCO_G071RB",
|
"DISCO_G071RBT": "DISCO_G071RB",
|
||||||
"DISCO_L4R9A": "DISCO_L4R9I",
|
"DISCO_L4R9A": "DISCO_L4R9I",
|
||||||
"NUCLEO_WB55R": "NUCLEO_WB55RG",
|
"NUCLEO_WB55R": "NUCLEO_WB55RG",
|
||||||
|
"NUCLEO_WL55JCI": "NUCLEO_WL55JC",
|
||||||
"NUCLEO_H743ZIT": "NUCLEO_H743ZI2",
|
"NUCLEO_H743ZIT": "NUCLEO_H743ZI2",
|
||||||
"NUCLEO_H7A3ZIT_Q": "NUCLEO_H7A3ZI_Q",
|
"NUCLEO_H7A3ZIT_Q": "NUCLEO_H7A3ZI_Q",
|
||||||
"DISCO_F0DISCOVERY_STM32F051R8": "DISCO_F051R8",
|
"DISCO_F0DISCOVERY_STM32F051R8": "DISCO_F051R8",
|
||||||
|
@ -1792,8 +1847,6 @@ for mcu_file in mcu_list:
|
||||||
if gpiofile == "ERROR":
|
if gpiofile == "ERROR":
|
||||||
print("error: Could not find GPIO file")
|
print("error: Could not find GPIO file")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
if gpiofile == "STM32H747_gpio_v1_0" and "H743" in input_file_name: # Workaround for DB issue
|
|
||||||
gpiofile = "STM32H743_gpio_v1_0"
|
|
||||||
xml_gpio = parse(os.path.join(cubemxdirIP, "GPIO-" + gpiofile + "_Modes.xml"))
|
xml_gpio = parse(os.path.join(cubemxdirIP, "GPIO-" + gpiofile + "_Modes.xml"))
|
||||||
print (" * GPIO file: " + os.path.join(cubemxdirIP, "GPIO-" + gpiofile + "_Modes.xml"))
|
print (" * GPIO file: " + os.path.join(cubemxdirIP, "GPIO-" + gpiofile + "_Modes.xml"))
|
||||||
|
|
||||||
|
@ -1805,7 +1858,7 @@ for mcu_file in mcu_list:
|
||||||
print_all_lists()
|
print_all_lists()
|
||||||
print_footer()
|
print_footer()
|
||||||
|
|
||||||
nb_pin = (len(io_list))
|
nb_pin = (len(gpio_list))
|
||||||
nb_connected_pin = len(PinLabel)
|
nb_connected_pin = len(PinLabel)
|
||||||
print (" * I/O pins found: %i connected: %i\n" % (nb_pin, nb_connected_pin))
|
print (" * I/O pins found: %i connected: %i\n" % (nb_pin, nb_connected_pin))
|
||||||
clean_all_lists()
|
clean_all_lists()
|
||||||
|
|
Loading…
Reference in New Issue