Knight KE / Mbed OS Game_Master
Committer:
WFKnight
Date:
Thu Jun 21 13:51:43 2018 +0000
Revision:
0:9b3d4731edbb
UART, RTOS, LED

Who changed what in which revision?

UserRevisionLine numberNew contents of line
WFKnight 0:9b3d4731edbb 1 """
WFKnight 0:9b3d4731edbb 2 * mbed Microcontroller Library
WFKnight 0:9b3d4731edbb 3 * Copyright (c) 2006-2018 ARM Limited
WFKnight 0:9b3d4731edbb 4 *
WFKnight 0:9b3d4731edbb 5 * Licensed under the Apache License, Version 2.0 (the "License");
WFKnight 0:9b3d4731edbb 6 * you may not use this file except in compliance with the License.
WFKnight 0:9b3d4731edbb 7 * You may obtain a copy of the License at
WFKnight 0:9b3d4731edbb 8 *
WFKnight 0:9b3d4731edbb 9 * http://www.apache.org/licenses/LICENSE-2.0
WFKnight 0:9b3d4731edbb 10 *
WFKnight 0:9b3d4731edbb 11 * Unless required by applicable law or agreed to in writing, software
WFKnight 0:9b3d4731edbb 12 * distributed under the License is distributed on an "AS IS" BASIS,
WFKnight 0:9b3d4731edbb 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
WFKnight 0:9b3d4731edbb 14 * See the License for the specific language governing permissions and
WFKnight 0:9b3d4731edbb 15 * limitations under the License.
WFKnight 0:9b3d4731edbb 16 """
WFKnight 0:9b3d4731edbb 17
WFKnight 0:9b3d4731edbb 18 import argparse
WFKnight 0:9b3d4731edbb 19 import datetime
WFKnight 0:9b3d4731edbb 20 import fnmatch
WFKnight 0:9b3d4731edbb 21 import json
WFKnight 0:9b3d4731edbb 22 import os
WFKnight 0:9b3d4731edbb 23 import re
WFKnight 0:9b3d4731edbb 24 import sys
WFKnight 0:9b3d4731edbb 25 import textwrap
WFKnight 0:9b3d4731edbb 26 from xml.dom.minidom import parse, Node
WFKnight 0:9b3d4731edbb 27 from argparse import RawTextHelpFormatter
WFKnight 0:9b3d4731edbb 28
WFKnight 0:9b3d4731edbb 29 GENPINMAP_VERSION = "1.2"
WFKnight 0:9b3d4731edbb 30
WFKnight 0:9b3d4731edbb 31 ADD_DEVICE_IFDEF = 0
WFKnight 0:9b3d4731edbb 32 ADD_QSPI_FEATURE = 0
WFKnight 0:9b3d4731edbb 33
WFKnight 0:9b3d4731edbb 34 mcu_file=""
WFKnight 0:9b3d4731edbb 35 mcu_list = [] #'name'
WFKnight 0:9b3d4731edbb 36 io_list = [] #'PIN','name'
WFKnight 0:9b3d4731edbb 37 adclist = [] #'PIN','name','ADCSignal'
WFKnight 0:9b3d4731edbb 38 daclist = [] #'PIN','name','DACSignal'
WFKnight 0:9b3d4731edbb 39 i2cscl_list = [] #'PIN','name','I2CSCLSignal'
WFKnight 0:9b3d4731edbb 40 i2csda_list = [] #'PIN','name','I2CSDASignal'
WFKnight 0:9b3d4731edbb 41 pwm_list = [] #'PIN','name','PWM'
WFKnight 0:9b3d4731edbb 42 uarttx_list = [] #'PIN','name','UARTtx'
WFKnight 0:9b3d4731edbb 43 uartrx_list = [] #'PIN','name','UARTrx'
WFKnight 0:9b3d4731edbb 44 uartcts_list = [] #'PIN','name','UARTcts'
WFKnight 0:9b3d4731edbb 45 uartrts_list = [] #'PIN','name','UARTrts'
WFKnight 0:9b3d4731edbb 46 spimosi_list = [] #'PIN','name','SPIMOSI'
WFKnight 0:9b3d4731edbb 47 spimiso_list = [] #'PIN','name','SPIMISO'
WFKnight 0:9b3d4731edbb 48 spissel_list = [] #'PIN','name','SPISSEL'
WFKnight 0:9b3d4731edbb 49 spisclk_list = [] #'PIN','name','SPISCLK'
WFKnight 0:9b3d4731edbb 50 cantd_list = [] #'PIN','name','CANTD'
WFKnight 0:9b3d4731edbb 51 canrd_list = [] #'PIN','name','CANRD'
WFKnight 0:9b3d4731edbb 52 eth_list = [] #'PIN','name','ETH'
WFKnight 0:9b3d4731edbb 53 quadspidata_list = [] #'PIN','name','QUADSPIDATA'
WFKnight 0:9b3d4731edbb 54 quadspisclk_list = [] #'PIN','name','QUADSPISCLK'
WFKnight 0:9b3d4731edbb 55 quadspissel_list = [] #'PIN','name','QUADSPISSEL'
WFKnight 0:9b3d4731edbb 56 usb_list = [] #'PIN','name','USB'
WFKnight 0:9b3d4731edbb 57 osc_list = [] #'PIN','name','OSC'
WFKnight 0:9b3d4731edbb 58 sys_list = [] #'PIN','name','SYS'
WFKnight 0:9b3d4731edbb 59
WFKnight 0:9b3d4731edbb 60 TIM_MST_LIST = { # Timer used for us ticker is hardcoded in this script
WFKnight 0:9b3d4731edbb 61 "NUCLEO_F030R8":"TIM1",
WFKnight 0:9b3d4731edbb 62 "NUCLEO_F072RB":"TIM2",
WFKnight 0:9b3d4731edbb 63 "NUCLEO_F091RC":"TIM2",
WFKnight 0:9b3d4731edbb 64 "NUCLEO_F070RB":"TIM1",
WFKnight 0:9b3d4731edbb 65 "NUCLEO_F042K6":"TIM2",
WFKnight 0:9b3d4731edbb 66 "NUCLEO_F031K6":"TIM2",
WFKnight 0:9b3d4731edbb 67 "NUCLEO_F103RB":"TIM4",
WFKnight 0:9b3d4731edbb 68 "NUCLEO_F207ZG":"TIM5",
WFKnight 0:9b3d4731edbb 69 "NUCLEO_F302R8":"TIM2",
WFKnight 0:9b3d4731edbb 70 "NUCLEO_F334R8":"TIM2",
WFKnight 0:9b3d4731edbb 71 "NUCLEO_F303RE":"TIM2",
WFKnight 0:9b3d4731edbb 72 "NUCLEO_F303K8":"TIM2",
WFKnight 0:9b3d4731edbb 73 "NUCLEO_F303ZE":"TIM2",
WFKnight 0:9b3d4731edbb 74 "NUCLEO_F401RE":"TIM5",
WFKnight 0:9b3d4731edbb 75 "NUCLEO_F411RE":"TIM5",
WFKnight 0:9b3d4731edbb 76 "NUCLEO_F446RE":"TIM5",
WFKnight 0:9b3d4731edbb 77 "NUCLEO_F410RB":"TIM5",
WFKnight 0:9b3d4731edbb 78 "NUCLEO_F429ZI":"TIM5",
WFKnight 0:9b3d4731edbb 79 "NUCLEO_F446ZE":"TIM5",
WFKnight 0:9b3d4731edbb 80 "NUCLEO_F412ZG":"TIM5",
WFKnight 0:9b3d4731edbb 81 "NUCLEO_F413ZH":"TIM5",
WFKnight 0:9b3d4731edbb 82 "NUCLEO_F746ZG":"TIM5",
WFKnight 0:9b3d4731edbb 83 "NUCLEO_F767ZI":"TIM5",
WFKnight 0:9b3d4731edbb 84 "NUCLEO_F722ZE":"TIM5",
WFKnight 0:9b3d4731edbb 85 "NUCLEO_H743ZI":"TIM5",
WFKnight 0:9b3d4731edbb 86 "NUCLEO_L053R8":"TIM21",
WFKnight 0:9b3d4731edbb 87 "NUCLEO_L073RZ":"TIM21",
WFKnight 0:9b3d4731edbb 88 "NUCLEO_L031K6":"TIM21",
WFKnight 0:9b3d4731edbb 89 "NUCLEO_L011K4":"TIM21",
WFKnight 0:9b3d4731edbb 90 "NUCLEO_L152RE":"TIM5",
WFKnight 0:9b3d4731edbb 91 "NUCLEO_L476RG":"TIM5",
WFKnight 0:9b3d4731edbb 92 "NUCLEO_L432KC":"TIM2",
WFKnight 0:9b3d4731edbb 93 "NUCLEO_L496ZG":"TIM5",
WFKnight 0:9b3d4731edbb 94 "NUCLEO_L496ZG_P":"TIM5",
WFKnight 0:9b3d4731edbb 95 "NUCLEO_L433RC_P":"TIM2",
WFKnight 0:9b3d4731edbb 96
WFKnight 0:9b3d4731edbb 97 "DISCO_F051R8":"TIM1",
WFKnight 0:9b3d4731edbb 98 "DISCO_F100RB":"TIM4",
WFKnight 0:9b3d4731edbb 99 "DISCO_F303VC":"TIM2",
WFKnight 0:9b3d4731edbb 100 "DISCO_F334C8":"TIM2",
WFKnight 0:9b3d4731edbb 101 "DISCO_F401VC":"TIM5",
WFKnight 0:9b3d4731edbb 102 "DISCO_F407VG":"TIM5",
WFKnight 0:9b3d4731edbb 103 "DISCO_F413ZH":"TIM5",
WFKnight 0:9b3d4731edbb 104 "DISCO_F429ZI":"TIM5",
WFKnight 0:9b3d4731edbb 105 "DISCO_F469NI":"TIM5",
WFKnight 0:9b3d4731edbb 106 "DISCO_F769NI":"TIM5",
WFKnight 0:9b3d4731edbb 107 "DISCO_F746NG":"TIM5",
WFKnight 0:9b3d4731edbb 108 "DISCO_L053C8":"TIM21",
WFKnight 0:9b3d4731edbb 109 "DISCO_L072CZ_LRWAN1":"TIM21",
WFKnight 0:9b3d4731edbb 110 "DISCO_L475VG_IOT01A":"TIM5",
WFKnight 0:9b3d4731edbb 111 "DISCO_L476VG":"TIM5",
WFKnight 0:9b3d4731edbb 112 "DISCO_L496AG":"TIM5"
WFKnight 0:9b3d4731edbb 113 }
WFKnight 0:9b3d4731edbb 114
WFKnight 0:9b3d4731edbb 115
WFKnight 0:9b3d4731edbb 116 def find_gpio_file():
WFKnight 0:9b3d4731edbb 117 res = 'ERROR'
WFKnight 0:9b3d4731edbb 118 itemlist = xml_mcu.getElementsByTagName('IP')
WFKnight 0:9b3d4731edbb 119 for s in itemlist:
WFKnight 0:9b3d4731edbb 120 a = s.attributes['Name'].value
WFKnight 0:9b3d4731edbb 121 if "GPIO" in a:
WFKnight 0:9b3d4731edbb 122 res = s.attributes['Version'].value
WFKnight 0:9b3d4731edbb 123 return res
WFKnight 0:9b3d4731edbb 124
WFKnight 0:9b3d4731edbb 125 def get_gpio_af_num(pintofind, iptofind):
WFKnight 0:9b3d4731edbb 126 if 'STM32F10' in mcu_file:
WFKnight 0:9b3d4731edbb 127 return get_gpio_af_numF1(pintofind, iptofind)
WFKnight 0:9b3d4731edbb 128 #DBG print ('pin to find ' + pintofind)
WFKnight 0:9b3d4731edbb 129 i=0
WFKnight 0:9b3d4731edbb 130 mygpioaf = 'NOTFOUND'
WFKnight 0:9b3d4731edbb 131 for n in xml_gpio.documentElement.childNodes:
WFKnight 0:9b3d4731edbb 132 i += 1
WFKnight 0:9b3d4731edbb 133 j = 0
WFKnight 0:9b3d4731edbb 134 if n.nodeType == Node.ELEMENT_NODE:
WFKnight 0:9b3d4731edbb 135 for firstlevel in n.attributes.items():
WFKnight 0:9b3d4731edbb 136 # if 'PB7' in firstlevel:
WFKnight 0:9b3d4731edbb 137 if pintofind == firstlevel[1]:
WFKnight 0:9b3d4731edbb 138 #DBG print (i , firstlevel)
WFKnight 0:9b3d4731edbb 139 #n = pin node found
WFKnight 0:9b3d4731edbb 140 for m in n.childNodes:
WFKnight 0:9b3d4731edbb 141 j += 1
WFKnight 0:9b3d4731edbb 142 k = 0
WFKnight 0:9b3d4731edbb 143 if m.nodeType == Node.ELEMENT_NODE:
WFKnight 0:9b3d4731edbb 144 for secondlevel in m.attributes.items():
WFKnight 0:9b3d4731edbb 145 k += 1
WFKnight 0:9b3d4731edbb 146 # if 'I2C1_SDA' in secondlevel:
WFKnight 0:9b3d4731edbb 147 if iptofind in secondlevel:
WFKnight 0:9b3d4731edbb 148 #DBG print (i, j, m.attributes.items())
WFKnight 0:9b3d4731edbb 149 # m = IP node found
WFKnight 0:9b3d4731edbb 150 for p in m.childNodes:
WFKnight 0:9b3d4731edbb 151 if p.nodeType == Node.ELEMENT_NODE:
WFKnight 0:9b3d4731edbb 152 #p node of 'Specific parameter'
WFKnight 0:9b3d4731edbb 153 #DBG print (i,j,k,p.attributes.items())
WFKnight 0:9b3d4731edbb 154 for myc in p.childNodes:
WFKnight 0:9b3d4731edbb 155 #DBG print (myc)
WFKnight 0:9b3d4731edbb 156 if myc.nodeType == Node.ELEMENT_NODE:
WFKnight 0:9b3d4731edbb 157 #myc = node of ALTERNATE
WFKnight 0:9b3d4731edbb 158 for mygpioaflist in myc.childNodes:
WFKnight 0:9b3d4731edbb 159 mygpioaf += ' ' + mygpioaflist.data
WFKnight 0:9b3d4731edbb 160 #print (mygpioaf)
WFKnight 0:9b3d4731edbb 161 if mygpioaf == 'NOTFOUND':
WFKnight 0:9b3d4731edbb 162 print ('GPIO AF not found in ' + gpiofile + ' for ' + pintofind + ' and the IP ' + iptofind)
WFKnight 0:9b3d4731edbb 163 #quit()
WFKnight 0:9b3d4731edbb 164 return mygpioaf.replace('NOTFOUND ', '')
WFKnight 0:9b3d4731edbb 165
WFKnight 0:9b3d4731edbb 166 def get_gpio_af_numF1(pintofind, iptofind):
WFKnight 0:9b3d4731edbb 167 #print ('pin to find ' + pintofind + ' ip to find ' + iptofind)
WFKnight 0:9b3d4731edbb 168 i=0
WFKnight 0:9b3d4731edbb 169 mygpioaf = 'NOTFOUND'
WFKnight 0:9b3d4731edbb 170 for n in xml_gpio.documentElement.childNodes:
WFKnight 0:9b3d4731edbb 171 i += 1
WFKnight 0:9b3d4731edbb 172 j = 0
WFKnight 0:9b3d4731edbb 173 if n.nodeType == Node.ELEMENT_NODE:
WFKnight 0:9b3d4731edbb 174 for firstlevel in n.attributes.items():
WFKnight 0:9b3d4731edbb 175 #print ('firstlevel ' , firstlevel)
WFKnight 0:9b3d4731edbb 176 # if 'PB7' in firstlevel:
WFKnight 0:9b3d4731edbb 177 if pintofind == firstlevel[1]:
WFKnight 0:9b3d4731edbb 178 #print ('firstlevel ' , i , firstlevel)
WFKnight 0:9b3d4731edbb 179 #n = pin node found
WFKnight 0:9b3d4731edbb 180 for m in n.childNodes:
WFKnight 0:9b3d4731edbb 181 j += 1
WFKnight 0:9b3d4731edbb 182 k = 0
WFKnight 0:9b3d4731edbb 183 if m.nodeType == Node.ELEMENT_NODE:
WFKnight 0:9b3d4731edbb 184 for secondlevel in m.attributes.items():
WFKnight 0:9b3d4731edbb 185 #print ('secondlevel ' , i, j, k , secondlevel)
WFKnight 0:9b3d4731edbb 186 k += 1
WFKnight 0:9b3d4731edbb 187 # if 'I2C1_SDA' in secondlevel:
WFKnight 0:9b3d4731edbb 188 if iptofind in secondlevel:
WFKnight 0:9b3d4731edbb 189 # m = IP node found
WFKnight 0:9b3d4731edbb 190 #print (i, j, m.attributes.items())
WFKnight 0:9b3d4731edbb 191 for p in m.childNodes:
WFKnight 0:9b3d4731edbb 192 #p node 'RemapBlock'
WFKnight 0:9b3d4731edbb 193 if p.nodeType == Node.ELEMENT_NODE and p.hasChildNodes() == False:
WFKnight 0:9b3d4731edbb 194 mygpioaf += ' AFIO_NONE'
WFKnight 0:9b3d4731edbb 195 else:
WFKnight 0:9b3d4731edbb 196 for s in p.childNodes:
WFKnight 0:9b3d4731edbb 197 if s.nodeType == Node.ELEMENT_NODE:
WFKnight 0:9b3d4731edbb 198 #s node 'Specific parameter'
WFKnight 0:9b3d4731edbb 199 #DBG print (i,j,k,p.attributes.items())
WFKnight 0:9b3d4731edbb 200 for myc in s.childNodes:
WFKnight 0:9b3d4731edbb 201 #DBG print (myc)
WFKnight 0:9b3d4731edbb 202 if myc.nodeType == Node.ELEMENT_NODE:
WFKnight 0:9b3d4731edbb 203 #myc = AF value
WFKnight 0:9b3d4731edbb 204 for mygpioaflist in myc.childNodes:
WFKnight 0:9b3d4731edbb 205 mygpioaf += ' ' + mygpioaflist.data.replace("__HAL_", "").replace("_REMAP", "")
WFKnight 0:9b3d4731edbb 206 #print mygpioaf
WFKnight 0:9b3d4731edbb 207 if mygpioaf == 'NOTFOUND':
WFKnight 0:9b3d4731edbb 208 print ('GPIO AF not found in ' + gpiofile + ' for ' + pintofind + ' and the IP ' + iptofind + ' set as AFIO_NONE')
WFKnight 0:9b3d4731edbb 209 mygpioaf = 'AFIO_NONE'
WFKnight 0:9b3d4731edbb 210 return mygpioaf.replace('NOTFOUND ', '')\
WFKnight 0:9b3d4731edbb 211 .replace("AFIO_NONE", "0")\
WFKnight 0:9b3d4731edbb 212 .replace("AFIO_SPI1_ENABLE", "1")\
WFKnight 0:9b3d4731edbb 213 .replace("AFIO_I2C1_ENABLE", "2")\
WFKnight 0:9b3d4731edbb 214 .replace("AFIO_USART1_ENABLE", "3")\
WFKnight 0:9b3d4731edbb 215 .replace("AFIO_USART3_PARTIAL", "5")\
WFKnight 0:9b3d4731edbb 216 .replace("AFIO_TIM1_PARTIAL", "6")\
WFKnight 0:9b3d4731edbb 217 .replace("AFIO_TIM3_PARTIAL", "7")\
WFKnight 0:9b3d4731edbb 218 .replace("AFIO_TIM2_ENABLE", "8")\
WFKnight 0:9b3d4731edbb 219 .replace("AFIO_TIM3_ENABLE", "9")\
WFKnight 0:9b3d4731edbb 220 .replace("AFIO_CAN1_2", "10")
WFKnight 0:9b3d4731edbb 221
WFKnight 0:9b3d4731edbb 222 #function to store I/O pin
WFKnight 0:9b3d4731edbb 223 def store_pin (pin, name):
WFKnight 0:9b3d4731edbb 224 p = [pin, name]
WFKnight 0:9b3d4731edbb 225 io_list.append(p)
WFKnight 0:9b3d4731edbb 226
WFKnight 0:9b3d4731edbb 227 #function to store ADC list
WFKnight 0:9b3d4731edbb 228 def store_adc (pin, name, signal):
WFKnight 0:9b3d4731edbb 229 adclist.append([pin,name,signal])
WFKnight 0:9b3d4731edbb 230
WFKnight 0:9b3d4731edbb 231 #function to store DAC list
WFKnight 0:9b3d4731edbb 232 def store_dac (pin, name, signal):
WFKnight 0:9b3d4731edbb 233 daclist.append([pin,name,signal])
WFKnight 0:9b3d4731edbb 234
WFKnight 0:9b3d4731edbb 235 #function to store I2C list
WFKnight 0:9b3d4731edbb 236 def store_i2c (pin, name, signal):
WFKnight 0:9b3d4731edbb 237 #is it SDA or SCL ?
WFKnight 0:9b3d4731edbb 238 if "_SCL" in signal:
WFKnight 0:9b3d4731edbb 239 i2cscl_list.append([pin,name,signal])
WFKnight 0:9b3d4731edbb 240 if "_SDA" in signal:
WFKnight 0:9b3d4731edbb 241 i2csda_list.append([pin,name,signal])
WFKnight 0:9b3d4731edbb 242
WFKnight 0:9b3d4731edbb 243 #function to store timers
WFKnight 0:9b3d4731edbb 244 def store_pwm(pin, name, signal):
WFKnight 0:9b3d4731edbb 245 if "_CH" in signal:
WFKnight 0:9b3d4731edbb 246 pwm_list.append([pin,name,signal])
WFKnight 0:9b3d4731edbb 247
WFKnight 0:9b3d4731edbb 248 #function to store Uart pins
WFKnight 0:9b3d4731edbb 249 def store_uart(pin, name, signal):
WFKnight 0:9b3d4731edbb 250 if "_TX" in signal:
WFKnight 0:9b3d4731edbb 251 uarttx_list.append([pin,name,signal])
WFKnight 0:9b3d4731edbb 252 if "_RX" in signal:
WFKnight 0:9b3d4731edbb 253 uartrx_list.append([pin,name,signal])
WFKnight 0:9b3d4731edbb 254 if "_CTS" in signal:
WFKnight 0:9b3d4731edbb 255 uartcts_list.append([pin,name,signal])
WFKnight 0:9b3d4731edbb 256 if "_RTS" in signal:
WFKnight 0:9b3d4731edbb 257 uartrts_list.append([pin,name,signal])
WFKnight 0:9b3d4731edbb 258
WFKnight 0:9b3d4731edbb 259 #function to store SPI pins
WFKnight 0:9b3d4731edbb 260 def store_spi(pin, name, signal):
WFKnight 0:9b3d4731edbb 261 if "_MISO" in signal:
WFKnight 0:9b3d4731edbb 262 spimiso_list.append([pin,name,signal])
WFKnight 0:9b3d4731edbb 263 if "_MOSI" in signal:
WFKnight 0:9b3d4731edbb 264 spimosi_list.append([pin,name,signal])
WFKnight 0:9b3d4731edbb 265 if "_SCK" in signal:
WFKnight 0:9b3d4731edbb 266 spisclk_list.append([pin,name,signal])
WFKnight 0:9b3d4731edbb 267 if "_NSS" in signal:
WFKnight 0:9b3d4731edbb 268 spissel_list.append([pin,name,signal])
WFKnight 0:9b3d4731edbb 269
WFKnight 0:9b3d4731edbb 270 #function to store CAN pins
WFKnight 0:9b3d4731edbb 271 def store_can(pin, name, signal):
WFKnight 0:9b3d4731edbb 272 if "_RX" in signal:
WFKnight 0:9b3d4731edbb 273 canrd_list.append([pin,name,signal])
WFKnight 0:9b3d4731edbb 274 if "_TX" in signal:
WFKnight 0:9b3d4731edbb 275 cantd_list.append([pin,name,signal])
WFKnight 0:9b3d4731edbb 276
WFKnight 0:9b3d4731edbb 277 #function to store ETH list
WFKnight 0:9b3d4731edbb 278 def store_eth (pin, name, signal):
WFKnight 0:9b3d4731edbb 279 eth_list.append([pin,name,signal])
WFKnight 0:9b3d4731edbb 280
WFKnight 0:9b3d4731edbb 281 #function to store QSPI pins
WFKnight 0:9b3d4731edbb 282 def store_qspi (pin, name, signal):
WFKnight 0:9b3d4731edbb 283 if "_BK" in signal:
WFKnight 0:9b3d4731edbb 284 quadspidata_list.append([pin,name,signal])
WFKnight 0:9b3d4731edbb 285 if "_CLK" in signal:
WFKnight 0:9b3d4731edbb 286 quadspisclk_list.append([pin,name,signal])
WFKnight 0:9b3d4731edbb 287 if "_NCS" in signal:
WFKnight 0:9b3d4731edbb 288 quadspissel_list.append([pin,name,signal])
WFKnight 0:9b3d4731edbb 289
WFKnight 0:9b3d4731edbb 290 #function to store USB pins
WFKnight 0:9b3d4731edbb 291 def store_usb (pin, name, signal):
WFKnight 0:9b3d4731edbb 292 usb_list.append([pin,name,signal])
WFKnight 0:9b3d4731edbb 293
WFKnight 0:9b3d4731edbb 294 #function to store OSC pins
WFKnight 0:9b3d4731edbb 295 def store_osc (pin, name, signal):
WFKnight 0:9b3d4731edbb 296 osc_list.append([pin,name,signal])
WFKnight 0:9b3d4731edbb 297
WFKnight 0:9b3d4731edbb 298 #function to store SYS pins
WFKnight 0:9b3d4731edbb 299 def store_sys (pin, name, signal):
WFKnight 0:9b3d4731edbb 300 sys_list.append([pin,name,signal])
WFKnight 0:9b3d4731edbb 301
WFKnight 0:9b3d4731edbb 302 def print_header():
WFKnight 0:9b3d4731edbb 303 s = ("""/* mbed Microcontroller Library
WFKnight 0:9b3d4731edbb 304 *******************************************************************************
WFKnight 0:9b3d4731edbb 305 * Copyright (c) %i, STMicroelectronics
WFKnight 0:9b3d4731edbb 306 * All rights reserved.
WFKnight 0:9b3d4731edbb 307 *
WFKnight 0:9b3d4731edbb 308 * Redistribution and use in source and binary forms, with or without
WFKnight 0:9b3d4731edbb 309 * modification, are permitted provided that the following conditions are met:
WFKnight 0:9b3d4731edbb 310 *
WFKnight 0:9b3d4731edbb 311 * 1. Redistributions of source code must retain the above copyright notice,
WFKnight 0:9b3d4731edbb 312 * this list of conditions and the following disclaimer.
WFKnight 0:9b3d4731edbb 313 * 2. Redistributions in binary form must reproduce the above copyright notice,
WFKnight 0:9b3d4731edbb 314 * this list of conditions and the following disclaimer in the documentation
WFKnight 0:9b3d4731edbb 315 * and/or other materials provided with the distribution.
WFKnight 0:9b3d4731edbb 316 * 3. Neither the name of STMicroelectronics nor the names of its contributors
WFKnight 0:9b3d4731edbb 317 * may be used to endorse or promote products derived from this software
WFKnight 0:9b3d4731edbb 318 * without specific prior written permission.
WFKnight 0:9b3d4731edbb 319 *
WFKnight 0:9b3d4731edbb 320 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
WFKnight 0:9b3d4731edbb 321 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
WFKnight 0:9b3d4731edbb 322 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
WFKnight 0:9b3d4731edbb 323 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
WFKnight 0:9b3d4731edbb 324 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
WFKnight 0:9b3d4731edbb 325 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
WFKnight 0:9b3d4731edbb 326 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
WFKnight 0:9b3d4731edbb 327 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
WFKnight 0:9b3d4731edbb 328 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
WFKnight 0:9b3d4731edbb 329 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
WFKnight 0:9b3d4731edbb 330 *******************************************************************************
WFKnight 0:9b3d4731edbb 331 *
WFKnight 0:9b3d4731edbb 332 * Automatically generated from %s
WFKnight 0:9b3d4731edbb 333 */
WFKnight 0:9b3d4731edbb 334
WFKnight 0:9b3d4731edbb 335 #include "PeripheralPins.h"
WFKnight 0:9b3d4731edbb 336 #include "mbed_toolchain.h"
WFKnight 0:9b3d4731edbb 337
WFKnight 0:9b3d4731edbb 338 //==============================================================================
WFKnight 0:9b3d4731edbb 339 // Notes
WFKnight 0:9b3d4731edbb 340 //
WFKnight 0:9b3d4731edbb 341 // - The pins mentioned Px_y_ALTz are alternative possibilities which use other
WFKnight 0:9b3d4731edbb 342 // HW peripheral instances. You can use them the same way as any other "normal"
WFKnight 0:9b3d4731edbb 343 // pin (i.e. PwmOut pwm(PA_7_ALT0);). These pins are not displayed on the board
WFKnight 0:9b3d4731edbb 344 // pinout image on mbed.org.
WFKnight 0:9b3d4731edbb 345 //
WFKnight 0:9b3d4731edbb 346 // - The pins which are connected to other components present on the board have
WFKnight 0:9b3d4731edbb 347 // the comment "Connected to xxx". The pin function may not work properly in this
WFKnight 0:9b3d4731edbb 348 // case. These pins may not be displayed on the board pinout image on mbed.org.
WFKnight 0:9b3d4731edbb 349 // Please read the board reference manual and schematic for more information.
WFKnight 0:9b3d4731edbb 350 //
WFKnight 0:9b3d4731edbb 351 // - Warning: pins connected to the default STDIO_UART_TX and STDIO_UART_RX pins are commented
WFKnight 0:9b3d4731edbb 352 // See https://os.mbed.com/teams/ST/wiki/STDIO for more information.
WFKnight 0:9b3d4731edbb 353 //
WFKnight 0:9b3d4731edbb 354 //==============================================================================
WFKnight 0:9b3d4731edbb 355
WFKnight 0:9b3d4731edbb 356 """ % (datetime.datetime.now().year, os.path.basename(input_file_name)))
WFKnight 0:9b3d4731edbb 357 out_c_file.write( s )
WFKnight 0:9b3d4731edbb 358
WFKnight 0:9b3d4731edbb 359 s = ("""/* mbed Microcontroller Library
WFKnight 0:9b3d4731edbb 360 *******************************************************************************
WFKnight 0:9b3d4731edbb 361 * Copyright (c) %i, STMicroelectronics
WFKnight 0:9b3d4731edbb 362 * All rights reserved.
WFKnight 0:9b3d4731edbb 363 *
WFKnight 0:9b3d4731edbb 364 * Redistribution and use in source and binary forms, with or without
WFKnight 0:9b3d4731edbb 365 * modification, are permitted provided that the following conditions are met:
WFKnight 0:9b3d4731edbb 366 *
WFKnight 0:9b3d4731edbb 367 * 1. Redistributions of source code must retain the above copyright notice,
WFKnight 0:9b3d4731edbb 368 * this list of conditions and the following disclaimer.
WFKnight 0:9b3d4731edbb 369 * 2. Redistributions in binary form must reproduce the above copyright notice,
WFKnight 0:9b3d4731edbb 370 * this list of conditions and the following disclaimer in the documentation
WFKnight 0:9b3d4731edbb 371 * and/or other materials provided with the distribution.
WFKnight 0:9b3d4731edbb 372 * 3. Neither the name of STMicroelectronics nor the names of its contributors
WFKnight 0:9b3d4731edbb 373 * may be used to endorse or promote products derived from this software
WFKnight 0:9b3d4731edbb 374 * without specific prior written permission.
WFKnight 0:9b3d4731edbb 375 *
WFKnight 0:9b3d4731edbb 376 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
WFKnight 0:9b3d4731edbb 377 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
WFKnight 0:9b3d4731edbb 378 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
WFKnight 0:9b3d4731edbb 379 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
WFKnight 0:9b3d4731edbb 380 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
WFKnight 0:9b3d4731edbb 381 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
WFKnight 0:9b3d4731edbb 382 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
WFKnight 0:9b3d4731edbb 383 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
WFKnight 0:9b3d4731edbb 384 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
WFKnight 0:9b3d4731edbb 385 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
WFKnight 0:9b3d4731edbb 386 *******************************************************************************
WFKnight 0:9b3d4731edbb 387 *
WFKnight 0:9b3d4731edbb 388 * Automatically generated from %s
WFKnight 0:9b3d4731edbb 389 */
WFKnight 0:9b3d4731edbb 390
WFKnight 0:9b3d4731edbb 391 #ifndef MBED_PINNAMES_H
WFKnight 0:9b3d4731edbb 392 #define MBED_PINNAMES_H
WFKnight 0:9b3d4731edbb 393
WFKnight 0:9b3d4731edbb 394 #include "cmsis.h"
WFKnight 0:9b3d4731edbb 395 #include "PinNamesTypes.h"
WFKnight 0:9b3d4731edbb 396
WFKnight 0:9b3d4731edbb 397 #ifdef __cplusplus
WFKnight 0:9b3d4731edbb 398 extern "C" {
WFKnight 0:9b3d4731edbb 399 #endif
WFKnight 0:9b3d4731edbb 400
WFKnight 0:9b3d4731edbb 401 typedef enum {
WFKnight 0:9b3d4731edbb 402 ALT0 = 0x100,
WFKnight 0:9b3d4731edbb 403 ALT1 = 0x200,
WFKnight 0:9b3d4731edbb 404 ALT2 = 0x300,
WFKnight 0:9b3d4731edbb 405 ALT3 = 0x400
WFKnight 0:9b3d4731edbb 406 } ALTx;
WFKnight 0:9b3d4731edbb 407
WFKnight 0:9b3d4731edbb 408 typedef enum {
WFKnight 0:9b3d4731edbb 409
WFKnight 0:9b3d4731edbb 410 """ % (datetime.datetime.now().year, os.path.basename(input_file_name)))
WFKnight 0:9b3d4731edbb 411 out_h_file.write( s )
WFKnight 0:9b3d4731edbb 412
WFKnight 0:9b3d4731edbb 413
WFKnight 0:9b3d4731edbb 414 def print_footer():
WFKnight 0:9b3d4731edbb 415 s = ("""
WFKnight 0:9b3d4731edbb 416 // Not connected
WFKnight 0:9b3d4731edbb 417 NC = (int)0xFFFFFFFF
WFKnight 0:9b3d4731edbb 418 } PinName;
WFKnight 0:9b3d4731edbb 419
WFKnight 0:9b3d4731edbb 420 #ifdef __cplusplus
WFKnight 0:9b3d4731edbb 421 }
WFKnight 0:9b3d4731edbb 422 #endif
WFKnight 0:9b3d4731edbb 423
WFKnight 0:9b3d4731edbb 424 #endif
WFKnight 0:9b3d4731edbb 425 """)
WFKnight 0:9b3d4731edbb 426 out_h_file.write(s)
WFKnight 0:9b3d4731edbb 427
WFKnight 0:9b3d4731edbb 428
WFKnight 0:9b3d4731edbb 429 def print_all_lists():
WFKnight 0:9b3d4731edbb 430 if print_list_header("ADC", "ADC", adclist, "ANALOGIN"):
WFKnight 0:9b3d4731edbb 431 print_adc()
WFKnight 0:9b3d4731edbb 432 if print_list_header("DAC", "DAC", daclist, "ANALOGOUT"):
WFKnight 0:9b3d4731edbb 433 print_dac()
WFKnight 0:9b3d4731edbb 434 if print_list_header("I2C", "I2C_SDA", i2csda_list, "I2C"):
WFKnight 0:9b3d4731edbb 435 print_i2c(i2csda_list)
WFKnight 0:9b3d4731edbb 436 if print_list_header("", "I2C_SCL", i2cscl_list, "I2C"):
WFKnight 0:9b3d4731edbb 437 print_i2c(i2cscl_list)
WFKnight 0:9b3d4731edbb 438 if print_list_header("PWM", "PWM", pwm_list, "PWMOUT"):
WFKnight 0:9b3d4731edbb 439 print_pwm()
WFKnight 0:9b3d4731edbb 440 if print_list_header("SERIAL", "UART_TX", uarttx_list, "SERIAL"):
WFKnight 0:9b3d4731edbb 441 print_uart(uarttx_list)
WFKnight 0:9b3d4731edbb 442 if print_list_header("", "UART_RX", uartrx_list, "SERIAL"):
WFKnight 0:9b3d4731edbb 443 print_uart(uartrx_list)
WFKnight 0:9b3d4731edbb 444 if print_list_header("", "UART_RTS", uartrts_list, "SERIAL"):
WFKnight 0:9b3d4731edbb 445 print_uart(uartrts_list)
WFKnight 0:9b3d4731edbb 446 if print_list_header("", "UART_CTS", uartcts_list, "SERIAL"):
WFKnight 0:9b3d4731edbb 447 print_uart(uartcts_list)
WFKnight 0:9b3d4731edbb 448 if print_list_header("SPI", "SPI_MOSI", spimosi_list, "SPI"):
WFKnight 0:9b3d4731edbb 449 print_spi(spimosi_list)
WFKnight 0:9b3d4731edbb 450 if print_list_header("", "SPI_MISO", spimiso_list, "SPI"):
WFKnight 0:9b3d4731edbb 451 print_spi(spimiso_list)
WFKnight 0:9b3d4731edbb 452 if print_list_header("", "SPI_SCLK", spisclk_list, "SPI"):
WFKnight 0:9b3d4731edbb 453 print_spi(spisclk_list)
WFKnight 0:9b3d4731edbb 454 if print_list_header("", "SPI_SSEL", spissel_list, "SPI"):
WFKnight 0:9b3d4731edbb 455 print_spi(spissel_list)
WFKnight 0:9b3d4731edbb 456 if print_list_header("CAN", "CAN_RD", canrd_list, "CAN"):
WFKnight 0:9b3d4731edbb 457 print_can(canrd_list)
WFKnight 0:9b3d4731edbb 458 if print_list_header("", "CAN_TD", cantd_list, "CAN"):
WFKnight 0:9b3d4731edbb 459 print_can(cantd_list)
WFKnight 0:9b3d4731edbb 460 if ADD_QSPI_FEATURE:
WFKnight 0:9b3d4731edbb 461 if print_list_header("QUADSPI", "QSPI_DATA", quadspidata_list, "QSPI"):
WFKnight 0:9b3d4731edbb 462 print_qspi(quadspidata_list)
WFKnight 0:9b3d4731edbb 463 if print_list_header("", "QSPI_SCLK", quadspisclk_list, "QSPI"):
WFKnight 0:9b3d4731edbb 464 print_qspi(quadspisclk_list)
WFKnight 0:9b3d4731edbb 465 if print_list_header("", "QSPI_SSEL", quadspissel_list, "QSPI"):
WFKnight 0:9b3d4731edbb 466 print_qspi(quadspissel_list)
WFKnight 0:9b3d4731edbb 467 print_h_file(usb_list, "USB")
WFKnight 0:9b3d4731edbb 468 print_h_file(eth_list, "ETHERNET")
WFKnight 0:9b3d4731edbb 469 print_h_file(osc_list, "OSCILLATOR")
WFKnight 0:9b3d4731edbb 470 print_h_file(sys_list, "DEBUG")
WFKnight 0:9b3d4731edbb 471
WFKnight 0:9b3d4731edbb 472 def print_list_header(comment, name, l, switch):
WFKnight 0:9b3d4731edbb 473 s = ""
WFKnight 0:9b3d4731edbb 474 if len(l)>0:
WFKnight 0:9b3d4731edbb 475 if comment:
WFKnight 0:9b3d4731edbb 476 s += "\n//*** %s ***\n" % comment
WFKnight 0:9b3d4731edbb 477
WFKnight 0:9b3d4731edbb 478 s += "\n"
WFKnight 0:9b3d4731edbb 479
WFKnight 0:9b3d4731edbb 480 if name == "PWM":
WFKnight 0:9b3d4731edbb 481 if TargetName in TIM_MST_LIST.keys():
WFKnight 0:9b3d4731edbb 482 s += "// %s cannot be used because already used by the us_ticker\n" % TIM_MST_LIST[TargetName]
WFKnight 0:9b3d4731edbb 483 else:
WFKnight 0:9b3d4731edbb 484 s += "// TIM<x> cannot be used because already used by the us_ticker\n"
WFKnight 0:9b3d4731edbb 485 s += "// You have to comment all PWM using TIM_MST defined in hal_tick.h file\n"
WFKnight 0:9b3d4731edbb 486 s += "// or update python script (check TIM_MST_LIST) and re-run it\n"
WFKnight 0:9b3d4731edbb 487
WFKnight 0:9b3d4731edbb 488 if ADD_DEVICE_IFDEF:
WFKnight 0:9b3d4731edbb 489 s += "#ifdef DEVICE_%s\n" % switch
WFKnight 0:9b3d4731edbb 490
WFKnight 0:9b3d4731edbb 491 s += "MBED_WEAK const PinMap PinMap_%s[] = {\n" % name
WFKnight 0:9b3d4731edbb 492
WFKnight 0:9b3d4731edbb 493 # else:
WFKnight 0:9b3d4731edbb 494 # if comment:
WFKnight 0:9b3d4731edbb 495 # s += "\n//*** No %s ***\n" % comment
WFKnight 0:9b3d4731edbb 496
WFKnight 0:9b3d4731edbb 497 out_c_file.write(s)
WFKnight 0:9b3d4731edbb 498 return len(l)
WFKnight 0:9b3d4731edbb 499
WFKnight 0:9b3d4731edbb 500 def print_adc():
WFKnight 0:9b3d4731edbb 501 s_pin_data = 'STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, '
WFKnight 0:9b3d4731edbb 502 prev_p = ''
WFKnight 0:9b3d4731edbb 503 alt_index = 0
WFKnight 0:9b3d4731edbb 504 for p in adclist:
WFKnight 0:9b3d4731edbb 505 if "IN" in p[2]:
WFKnight 0:9b3d4731edbb 506 CommentedLine = " "
WFKnight 0:9b3d4731edbb 507 if p[1] in PinLabel.keys():
WFKnight 0:9b3d4731edbb 508 if "STDIO_UART" in PinLabel[p[1]]:
WFKnight 0:9b3d4731edbb 509 CommentedLine = "//"
WFKnight 0:9b3d4731edbb 510 if "RCC_OSC" in PinLabel[p[1]]:
WFKnight 0:9b3d4731edbb 511 CommentedLine = "//"
WFKnight 0:9b3d4731edbb 512 if CommentedLine != "//":
WFKnight 0:9b3d4731edbb 513 if p[0] == prev_p:
WFKnight 0:9b3d4731edbb 514 prev_p = p[0]
WFKnight 0:9b3d4731edbb 515 p[0] += '_ALT%d' % alt_index
WFKnight 0:9b3d4731edbb 516 alt_index += 1
WFKnight 0:9b3d4731edbb 517 else:
WFKnight 0:9b3d4731edbb 518 prev_p = p[0]
WFKnight 0:9b3d4731edbb 519 alt_index = 0
WFKnight 0:9b3d4731edbb 520 s1 = "%-17s" % (CommentedLine + " {" + p[0] + ',')
WFKnight 0:9b3d4731edbb 521 a = p[2].split('_')
WFKnight 0:9b3d4731edbb 522 inst = a[0].replace("ADC", "")
WFKnight 0:9b3d4731edbb 523 if len(inst) == 0:
WFKnight 0:9b3d4731edbb 524 inst = '1' #single ADC for this product
WFKnight 0:9b3d4731edbb 525 s1 += "%-7s" % ('ADC_' + inst + ',')
WFKnight 0:9b3d4731edbb 526 chan = re.sub('IN[N|P]?', '', a[1])
WFKnight 0:9b3d4731edbb 527 s1 += s_pin_data + chan
WFKnight 0:9b3d4731edbb 528 s1 += ', 0)}, // ' + p[2]
WFKnight 0:9b3d4731edbb 529 if p[1] in PinLabel.keys():
WFKnight 0:9b3d4731edbb 530 s1 += ' // Connected to ' + PinLabel[p[1]]
WFKnight 0:9b3d4731edbb 531 s1 += '\n'
WFKnight 0:9b3d4731edbb 532 out_c_file.write(s1)
WFKnight 0:9b3d4731edbb 533 out_c_file.write( """ {NC, NC, 0}
WFKnight 0:9b3d4731edbb 534 };
WFKnight 0:9b3d4731edbb 535
WFKnight 0:9b3d4731edbb 536 // !!! SECTION TO BE CHECKED WITH DEVICE REFERENCE MANUAL
WFKnight 0:9b3d4731edbb 537 MBED_WEAK const PinMap PinMap_ADC_Internal[] = {
WFKnight 0:9b3d4731edbb 538 {ADC_TEMP, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 16, 0)},
WFKnight 0:9b3d4731edbb 539 {ADC_VREF, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 17, 0)},
WFKnight 0:9b3d4731edbb 540 {ADC_VBAT, ADC_1, STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, 18, 0)},
WFKnight 0:9b3d4731edbb 541 {NC, NC, 0}
WFKnight 0:9b3d4731edbb 542 };
WFKnight 0:9b3d4731edbb 543 """)
WFKnight 0:9b3d4731edbb 544 if ADD_DEVICE_IFDEF:
WFKnight 0:9b3d4731edbb 545 out_c_file.write( "#endif\n" )
WFKnight 0:9b3d4731edbb 546
WFKnight 0:9b3d4731edbb 547 def print_dac():
WFKnight 0:9b3d4731edbb 548 for p in daclist:
WFKnight 0:9b3d4731edbb 549 CommentedLine = " "
WFKnight 0:9b3d4731edbb 550 if p[1] in PinLabel.keys():
WFKnight 0:9b3d4731edbb 551 if "STDIO_UART" in PinLabel[p[1]]:
WFKnight 0:9b3d4731edbb 552 CommentedLine = "//"
WFKnight 0:9b3d4731edbb 553 if "RCC_OSC" in PinLabel[p[1]]:
WFKnight 0:9b3d4731edbb 554 CommentedLine = "//"
WFKnight 0:9b3d4731edbb 555 s1 = "%-17s" % (CommentedLine + " {" + p[0] + ',')
WFKnight 0:9b3d4731edbb 556 #p[2] : DAC_OUT1 / DAC1_OUT1
WFKnight 0:9b3d4731edbb 557 a = p[2].split('_')
WFKnight 0:9b3d4731edbb 558 inst = a[0].replace("DAC", "")
WFKnight 0:9b3d4731edbb 559 b = a[1].replace("OUT", "")
WFKnight 0:9b3d4731edbb 560 if len(inst) == 0:
WFKnight 0:9b3d4731edbb 561 inst = '1' # single DAC for this product
WFKnight 0:9b3d4731edbb 562 s1 += "%-7s" % ('DAC_' + inst + ',')
WFKnight 0:9b3d4731edbb 563 s1 += 'STM_PIN_DATA_EXT(STM_MODE_ANALOG, GPIO_NOPULL, 0, ' + b + ', 0)}, // ' + p[2]
WFKnight 0:9b3d4731edbb 564 if p[1] in PinLabel.keys():
WFKnight 0:9b3d4731edbb 565 s1 += ' // Connected to ' + PinLabel[p[1]]
WFKnight 0:9b3d4731edbb 566 s1 += '\n'
WFKnight 0:9b3d4731edbb 567 out_c_file.write(s1)
WFKnight 0:9b3d4731edbb 568 out_c_file.write( """ {NC, NC, 0}
WFKnight 0:9b3d4731edbb 569 };
WFKnight 0:9b3d4731edbb 570 """)
WFKnight 0:9b3d4731edbb 571 if ADD_DEVICE_IFDEF:
WFKnight 0:9b3d4731edbb 572 out_c_file.write( "#endif\n" )
WFKnight 0:9b3d4731edbb 573
WFKnight 0:9b3d4731edbb 574 def print_i2c(l):
WFKnight 0:9b3d4731edbb 575 prev_p = ''
WFKnight 0:9b3d4731edbb 576 alt_index = 0
WFKnight 0:9b3d4731edbb 577 for p in l:
WFKnight 0:9b3d4731edbb 578 result = get_gpio_af_num(p[1], p[2])
WFKnight 0:9b3d4731edbb 579 if result != 'NOTFOUND':
WFKnight 0:9b3d4731edbb 580 CommentedLine = " "
WFKnight 0:9b3d4731edbb 581 if p[1] in PinLabel.keys():
WFKnight 0:9b3d4731edbb 582 if "STDIO_UART" in PinLabel[p[1]]:
WFKnight 0:9b3d4731edbb 583 CommentedLine = "//"
WFKnight 0:9b3d4731edbb 584 if "RCC_OSC" in PinLabel[p[1]]:
WFKnight 0:9b3d4731edbb 585 CommentedLine = "//"
WFKnight 0:9b3d4731edbb 586 if CommentedLine != "//":
WFKnight 0:9b3d4731edbb 587 if p[0] == prev_p:
WFKnight 0:9b3d4731edbb 588 prev_p = p[0]
WFKnight 0:9b3d4731edbb 589 p[0] += '_ALT%d' % alt_index
WFKnight 0:9b3d4731edbb 590 alt_index += 1
WFKnight 0:9b3d4731edbb 591 else:
WFKnight 0:9b3d4731edbb 592 prev_p = p[0]
WFKnight 0:9b3d4731edbb 593 alt_index = 0
WFKnight 0:9b3d4731edbb 594 s1 = "%-17s" % (CommentedLine + " {" + p[0] + ',')
WFKnight 0:9b3d4731edbb 595 # p[2] : I2C1_SDA / FMPI2C1_SDA
WFKnight 0:9b3d4731edbb 596 if "FMP" in p[2]:
WFKnight 0:9b3d4731edbb 597 inst = p[2].split('_')[0].replace("FMPI2C", "")
WFKnight 0:9b3d4731edbb 598 s1 += "%-10s" % ('FMPI2C_' + inst + ',')
WFKnight 0:9b3d4731edbb 599 else:
WFKnight 0:9b3d4731edbb 600 inst = p[2].split('_')[0].replace("I2C", "")
WFKnight 0:9b3d4731edbb 601 s1 += "%-7s" % ('I2C_' + inst + ',')
WFKnight 0:9b3d4731edbb 602 s1 += 'STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, '
WFKnight 0:9b3d4731edbb 603 r = result.split(' ')
WFKnight 0:9b3d4731edbb 604 for af in r:
WFKnight 0:9b3d4731edbb 605 s2 = s1 + af + ')},'
WFKnight 0:9b3d4731edbb 606 if p[1] in PinLabel.keys():
WFKnight 0:9b3d4731edbb 607 s2 += ' // Connected to ' + PinLabel[p[1]]
WFKnight 0:9b3d4731edbb 608 s2 += '\n'
WFKnight 0:9b3d4731edbb 609 out_c_file.write(s2)
WFKnight 0:9b3d4731edbb 610 out_c_file.write( """ {NC, NC, 0}
WFKnight 0:9b3d4731edbb 611 };
WFKnight 0:9b3d4731edbb 612 """)
WFKnight 0:9b3d4731edbb 613 if ADD_DEVICE_IFDEF:
WFKnight 0:9b3d4731edbb 614 out_c_file.write( "#endif\n" )
WFKnight 0:9b3d4731edbb 615
WFKnight 0:9b3d4731edbb 616 def print_pwm():
WFKnight 0:9b3d4731edbb 617 prev_p = ''
WFKnight 0:9b3d4731edbb 618 alt_index = 0
WFKnight 0:9b3d4731edbb 619 TIM_MST = "NOT_KNOWN"
WFKnight 0:9b3d4731edbb 620 if TargetName in TIM_MST_LIST.keys():
WFKnight 0:9b3d4731edbb 621 TIM_MST = TIM_MST_LIST[TargetName]
WFKnight 0:9b3d4731edbb 622 for p in pwm_list:
WFKnight 0:9b3d4731edbb 623 result = get_gpio_af_num(p[1], p[2])
WFKnight 0:9b3d4731edbb 624 if result != 'NOTFOUND':
WFKnight 0:9b3d4731edbb 625 CommentedLine = " "
WFKnight 0:9b3d4731edbb 626 if p[1] in PinLabel.keys():
WFKnight 0:9b3d4731edbb 627 if "STDIO_UART" in PinLabel[p[1]]:
WFKnight 0:9b3d4731edbb 628 CommentedLine = "//"
WFKnight 0:9b3d4731edbb 629 if "RCC_OSC" in PinLabel[p[1]]:
WFKnight 0:9b3d4731edbb 630 CommentedLine = "//"
WFKnight 0:9b3d4731edbb 631 if "%s_" % TIM_MST in p[2]:
WFKnight 0:9b3d4731edbb 632 CommentedLine = "//"
WFKnight 0:9b3d4731edbb 633 if CommentedLine != "//":
WFKnight 0:9b3d4731edbb 634 if p[0] == prev_p:
WFKnight 0:9b3d4731edbb 635 prev_p = p[0]
WFKnight 0:9b3d4731edbb 636 p[0] += '_ALT%d' % alt_index
WFKnight 0:9b3d4731edbb 637 alt_index += 1
WFKnight 0:9b3d4731edbb 638 else:
WFKnight 0:9b3d4731edbb 639 prev_p = p[0]
WFKnight 0:9b3d4731edbb 640 alt_index = 0
WFKnight 0:9b3d4731edbb 641 s1 = "%-17s" % (CommentedLine + " {" + p[0] + ',')
WFKnight 0:9b3d4731edbb 642 # p[2] : TIM2_CH1 / TIM15_CH1N
WFKnight 0:9b3d4731edbb 643 a = p[2].split('_')
WFKnight 0:9b3d4731edbb 644 inst = a[0].replace("TIM", "PWM_")
WFKnight 0:9b3d4731edbb 645 # if len(inst) == 3:
WFKnight 0:9b3d4731edbb 646 # inst += '1'
WFKnight 0:9b3d4731edbb 647 s1 += "%-8s" % (inst + ',')
WFKnight 0:9b3d4731edbb 648 chan = a[1].replace("CH", "")
WFKnight 0:9b3d4731edbb 649 if chan.endswith('N'):
WFKnight 0:9b3d4731edbb 650 neg = ', 1'
WFKnight 0:9b3d4731edbb 651 chan = chan.strip('N')
WFKnight 0:9b3d4731edbb 652 else:
WFKnight 0:9b3d4731edbb 653 neg = ', 0'
WFKnight 0:9b3d4731edbb 654 s1 += 'STM_PIN_DATA_EXT(STM_MODE_AF_PP, GPIO_PULLUP, '
WFKnight 0:9b3d4731edbb 655 r = result.split(' ')
WFKnight 0:9b3d4731edbb 656 for af in r:
WFKnight 0:9b3d4731edbb 657 s2 = s1 + af + ', ' + chan + neg + ')}, // ' + p[2]
WFKnight 0:9b3d4731edbb 658 if p[1] in PinLabel.keys():
WFKnight 0:9b3d4731edbb 659 s2 += ' // Connected to ' + PinLabel[p[1]]
WFKnight 0:9b3d4731edbb 660 s2 += '\n'
WFKnight 0:9b3d4731edbb 661 out_c_file.write(s2)
WFKnight 0:9b3d4731edbb 662 out_c_file.write( """ {NC, NC, 0}
WFKnight 0:9b3d4731edbb 663 };
WFKnight 0:9b3d4731edbb 664 """)
WFKnight 0:9b3d4731edbb 665 if ADD_DEVICE_IFDEF:
WFKnight 0:9b3d4731edbb 666 out_c_file.write( "#endif\n" )
WFKnight 0:9b3d4731edbb 667
WFKnight 0:9b3d4731edbb 668 def print_uart(l):
WFKnight 0:9b3d4731edbb 669 prev_p = ''
WFKnight 0:9b3d4731edbb 670 alt_index = 0
WFKnight 0:9b3d4731edbb 671 for p in l:
WFKnight 0:9b3d4731edbb 672 result = get_gpio_af_num(p[1], p[2])
WFKnight 0:9b3d4731edbb 673 if result != 'NOTFOUND':
WFKnight 0:9b3d4731edbb 674 CommentedLine = " "
WFKnight 0:9b3d4731edbb 675 if p[1] in PinLabel.keys():
WFKnight 0:9b3d4731edbb 676 if "RCC_OSC" in PinLabel[p[1]]:
WFKnight 0:9b3d4731edbb 677 CommentedLine = "//"
WFKnight 0:9b3d4731edbb 678 if CommentedLine != "//":
WFKnight 0:9b3d4731edbb 679 if p[0] == prev_p:
WFKnight 0:9b3d4731edbb 680 prev_p = p[0]
WFKnight 0:9b3d4731edbb 681 p[0] += '_ALT%d' % alt_index
WFKnight 0:9b3d4731edbb 682 alt_index += 1
WFKnight 0:9b3d4731edbb 683 else:
WFKnight 0:9b3d4731edbb 684 prev_p = p[0]
WFKnight 0:9b3d4731edbb 685 alt_index = 0
WFKnight 0:9b3d4731edbb 686 s1 = "%-17s" % (CommentedLine + " {" + p[0] + ',')
WFKnight 0:9b3d4731edbb 687 # p[2] : USART2_RX
WFKnight 0:9b3d4731edbb 688 b=p[2].split('_')[0]
WFKnight 0:9b3d4731edbb 689 b = b.replace("UART", "UART_")
WFKnight 0:9b3d4731edbb 690 b = b.replace("USART", "UART_")
WFKnight 0:9b3d4731edbb 691 s1 += "%-9s" % (b[:len(b)-1] + b[len(b)-1:] + ',')
WFKnight 0:9b3d4731edbb 692 if 'STM32F10' in mcu_file and l == uartrx_list:
WFKnight 0:9b3d4731edbb 693 s1 += 'STM_PIN_DATA(STM_MODE_INPUT, GPIO_PULLUP, '
WFKnight 0:9b3d4731edbb 694 else:
WFKnight 0:9b3d4731edbb 695 s1 += 'STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, '
WFKnight 0:9b3d4731edbb 696 r = result.split(' ')
WFKnight 0:9b3d4731edbb 697 for af in r:
WFKnight 0:9b3d4731edbb 698 s2 = s1 + af + ')},'
WFKnight 0:9b3d4731edbb 699 if p[1] in PinLabel.keys():
WFKnight 0:9b3d4731edbb 700 s2 += ' // Connected to ' + PinLabel[p[1]]
WFKnight 0:9b3d4731edbb 701 s2 += '\n'
WFKnight 0:9b3d4731edbb 702 out_c_file.write(s2)
WFKnight 0:9b3d4731edbb 703 out_c_file.write( """ {NC, NC, 0}
WFKnight 0:9b3d4731edbb 704 };
WFKnight 0:9b3d4731edbb 705 """)
WFKnight 0:9b3d4731edbb 706 if ADD_DEVICE_IFDEF:
WFKnight 0:9b3d4731edbb 707 out_c_file.write( "#endif\n" )
WFKnight 0:9b3d4731edbb 708
WFKnight 0:9b3d4731edbb 709 def print_spi(l):
WFKnight 0:9b3d4731edbb 710 prev_p = ''
WFKnight 0:9b3d4731edbb 711 alt_index = 0
WFKnight 0:9b3d4731edbb 712 for p in l:
WFKnight 0:9b3d4731edbb 713 result = get_gpio_af_num(p[1], p[2])
WFKnight 0:9b3d4731edbb 714 if result != 'NOTFOUND':
WFKnight 0:9b3d4731edbb 715 CommentedLine = " "
WFKnight 0:9b3d4731edbb 716 if p[1] in PinLabel.keys():
WFKnight 0:9b3d4731edbb 717 if "STDIO_UART" in PinLabel[p[1]]:
WFKnight 0:9b3d4731edbb 718 CommentedLine = "//"
WFKnight 0:9b3d4731edbb 719 if "RCC_OSC" in PinLabel[p[1]]:
WFKnight 0:9b3d4731edbb 720 CommentedLine = "//"
WFKnight 0:9b3d4731edbb 721 if CommentedLine != "//":
WFKnight 0:9b3d4731edbb 722 if p[0] == prev_p:
WFKnight 0:9b3d4731edbb 723 prev_p = p[0]
WFKnight 0:9b3d4731edbb 724 p[0] += '_ALT%d' % alt_index
WFKnight 0:9b3d4731edbb 725 alt_index += 1
WFKnight 0:9b3d4731edbb 726 else:
WFKnight 0:9b3d4731edbb 727 prev_p = p[0]
WFKnight 0:9b3d4731edbb 728 alt_index = 0
WFKnight 0:9b3d4731edbb 729 s1 = "%-17s" % (CommentedLine + " {" + p[0] + ',')
WFKnight 0:9b3d4731edbb 730 # p[2] : SPI1_MISO
WFKnight 0:9b3d4731edbb 731 instance=p[2].split('_')[0].replace("SPI", "")
WFKnight 0:9b3d4731edbb 732 s1 += "%-7s" % ('SPI_' + instance + ',')
WFKnight 0:9b3d4731edbb 733 s1 += 'STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, '
WFKnight 0:9b3d4731edbb 734 r = result.split(' ')
WFKnight 0:9b3d4731edbb 735 for af in r:
WFKnight 0:9b3d4731edbb 736 s2 = s1 + af + ')},'
WFKnight 0:9b3d4731edbb 737 if p[1] in PinLabel.keys():
WFKnight 0:9b3d4731edbb 738 s2 += ' // Connected to ' + PinLabel[p[1]]
WFKnight 0:9b3d4731edbb 739 s2 += '\n'
WFKnight 0:9b3d4731edbb 740 out_c_file.write(s2)
WFKnight 0:9b3d4731edbb 741 out_c_file.write( """ {NC, NC, 0}
WFKnight 0:9b3d4731edbb 742 };
WFKnight 0:9b3d4731edbb 743 """)
WFKnight 0:9b3d4731edbb 744 if ADD_DEVICE_IFDEF:
WFKnight 0:9b3d4731edbb 745 out_c_file.write( "#endif\n" )
WFKnight 0:9b3d4731edbb 746
WFKnight 0:9b3d4731edbb 747 def print_can(l):
WFKnight 0:9b3d4731edbb 748 for p in l:
WFKnight 0:9b3d4731edbb 749 result = get_gpio_af_num(p[1], p[2])
WFKnight 0:9b3d4731edbb 750 if result != 'NOTFOUND':
WFKnight 0:9b3d4731edbb 751 CommentedLine = " "
WFKnight 0:9b3d4731edbb 752 if p[1] in PinLabel.keys():
WFKnight 0:9b3d4731edbb 753 if "STDIO_UART" in PinLabel[p[1]]:
WFKnight 0:9b3d4731edbb 754 CommentedLine = "//"
WFKnight 0:9b3d4731edbb 755 if "RCC_OSC" in PinLabel[p[1]]:
WFKnight 0:9b3d4731edbb 756 CommentedLine = "//"
WFKnight 0:9b3d4731edbb 757 s1 = "%-17s" % (CommentedLine + " {" + p[0] + ',')
WFKnight 0:9b3d4731edbb 758 # p[2] : CAN_RX / CAN1_RX
WFKnight 0:9b3d4731edbb 759 p[2] = p[2].replace("FD", "")
WFKnight 0:9b3d4731edbb 760 instance = p[2].split('_')[0].replace("CAN", "")
WFKnight 0:9b3d4731edbb 761 if len(instance) == 0:
WFKnight 0:9b3d4731edbb 762 instance = '1'
WFKnight 0:9b3d4731edbb 763 s1 += "%-7s" % ('CAN_' + instance + ',')
WFKnight 0:9b3d4731edbb 764 if 'STM32F10' in mcu_file and l == canrd_list:
WFKnight 0:9b3d4731edbb 765 s1 += 'STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, '
WFKnight 0:9b3d4731edbb 766 else:
WFKnight 0:9b3d4731edbb 767 s1 += 'STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, '
WFKnight 0:9b3d4731edbb 768 r = result.split(' ')
WFKnight 0:9b3d4731edbb 769 for af in r:
WFKnight 0:9b3d4731edbb 770 s2 = s1 + af + ')},'
WFKnight 0:9b3d4731edbb 771 if p[1] in PinLabel.keys():
WFKnight 0:9b3d4731edbb 772 s2 += ' // Connected to ' + PinLabel[p[1]]
WFKnight 0:9b3d4731edbb 773 s2 += '\n'
WFKnight 0:9b3d4731edbb 774 out_c_file.write(s2)
WFKnight 0:9b3d4731edbb 775 out_c_file.write( """ {NC, NC, 0}
WFKnight 0:9b3d4731edbb 776 };
WFKnight 0:9b3d4731edbb 777 """)
WFKnight 0:9b3d4731edbb 778 if ADD_DEVICE_IFDEF:
WFKnight 0:9b3d4731edbb 779 out_c_file.write( "#endif\n" )
WFKnight 0:9b3d4731edbb 780
WFKnight 0:9b3d4731edbb 781 def print_qspi(l):
WFKnight 0:9b3d4731edbb 782 prev_s = ''
WFKnight 0:9b3d4731edbb 783 for p in l:
WFKnight 0:9b3d4731edbb 784 result = get_gpio_af_num(p[1], p[2])
WFKnight 0:9b3d4731edbb 785 if result != 'NOTFOUND':
WFKnight 0:9b3d4731edbb 786 CommentedLine = " "
WFKnight 0:9b3d4731edbb 787 if p[1] in PinLabel.keys():
WFKnight 0:9b3d4731edbb 788 if "STDIO_UART" in PinLabel[p[1]]:
WFKnight 0:9b3d4731edbb 789 CommentedLine = "//"
WFKnight 0:9b3d4731edbb 790 if "RCC_OSC" in PinLabel[p[1]]:
WFKnight 0:9b3d4731edbb 791 CommentedLine = "//"
WFKnight 0:9b3d4731edbb 792 s1 = "%-17s" % (CommentedLine + " {" + p[0] + ',')
WFKnight 0:9b3d4731edbb 793 # p[2] : QUADSPI_BK1_IO3 / QUADSPI_CLK / QUADSPI_NCS
WFKnight 0:9b3d4731edbb 794 instance = p[2].split('_')[1].replace("BK", "")
WFKnight 0:9b3d4731edbb 795 instance = instance.replace("CLK", "1")
WFKnight 0:9b3d4731edbb 796 instance = instance.replace("NCS", "1")
WFKnight 0:9b3d4731edbb 797 s1 += "%-7s" % ('QSPI_' + instance + ',')
WFKnight 0:9b3d4731edbb 798 s1 += 'STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, ' + result +')},'
WFKnight 0:9b3d4731edbb 799 #check duplicated lines, only signal differs
WFKnight 0:9b3d4731edbb 800 if (prev_s == s1):
WFKnight 0:9b3d4731edbb 801 s1 = '|' + p[2]
WFKnight 0:9b3d4731edbb 802 else:
WFKnight 0:9b3d4731edbb 803 if len(prev_s)>0:
WFKnight 0:9b3d4731edbb 804 out_c_file.write('\n')
WFKnight 0:9b3d4731edbb 805 prev_s = s1
WFKnight 0:9b3d4731edbb 806 s1 += ' // ' + p[2]
WFKnight 0:9b3d4731edbb 807 if p[1] in PinLabel.keys():
WFKnight 0:9b3d4731edbb 808 s1 += ' // Connected to ' + PinLabel[p[1]]
WFKnight 0:9b3d4731edbb 809 s1 += '\n'
WFKnight 0:9b3d4731edbb 810 out_c_file.write(s1)
WFKnight 0:9b3d4731edbb 811 out_c_file.write( """ {NC, NC, 0}
WFKnight 0:9b3d4731edbb 812 };
WFKnight 0:9b3d4731edbb 813 """)
WFKnight 0:9b3d4731edbb 814 if ADD_DEVICE_IFDEF:
WFKnight 0:9b3d4731edbb 815 out_c_file.write( "#endif\n" )
WFKnight 0:9b3d4731edbb 816
WFKnight 0:9b3d4731edbb 817 def print_h_file(l, comment):
WFKnight 0:9b3d4731edbb 818 if len(l) > 0:
WFKnight 0:9b3d4731edbb 819 s = ("\n/**** %s pins ****/\n" % comment)
WFKnight 0:9b3d4731edbb 820 out_h_file.write(s)
WFKnight 0:9b3d4731edbb 821
WFKnight 0:9b3d4731edbb 822 prev_s = ''
WFKnight 0:9b3d4731edbb 823 alt_index = 0
WFKnight 0:9b3d4731edbb 824 for p in l:
WFKnight 0:9b3d4731edbb 825 if p[2] == prev_s:
WFKnight 0:9b3d4731edbb 826 prev_s = p[2]
WFKnight 0:9b3d4731edbb 827 p[2] += '_ALT%d' % alt_index
WFKnight 0:9b3d4731edbb 828 alt_index += 1
WFKnight 0:9b3d4731edbb 829 else:
WFKnight 0:9b3d4731edbb 830 prev_s = p[2]
WFKnight 0:9b3d4731edbb 831 alt_index = 0
WFKnight 0:9b3d4731edbb 832 s1 = " %s = %s,\n" % (p[2].replace("-", "_"), p[0])
WFKnight 0:9b3d4731edbb 833 out_h_file.write(s1)
WFKnight 0:9b3d4731edbb 834 # else:
WFKnight 0:9b3d4731edbb 835 # s = ("\n/**** No %s pins ***/\n" % comment)
WFKnight 0:9b3d4731edbb 836 # out_h_file.write(s)
WFKnight 0:9b3d4731edbb 837
WFKnight 0:9b3d4731edbb 838
WFKnight 0:9b3d4731edbb 839 tokenize = re.compile(r'(\d+)|(\D+)').findall
WFKnight 0:9b3d4731edbb 840
WFKnight 0:9b3d4731edbb 841 def natural_sortkey(list_2_elem):
WFKnight 0:9b3d4731edbb 842 return tuple(int(num) if num else alpha for num, alpha in tokenize(list_2_elem[0]))
WFKnight 0:9b3d4731edbb 843
WFKnight 0:9b3d4731edbb 844 def natural_sortkey2(list_2_elem):
WFKnight 0:9b3d4731edbb 845 return tuple(int(num) if num else alpha for num, alpha in tokenize(list_2_elem[2]))
WFKnight 0:9b3d4731edbb 846
WFKnight 0:9b3d4731edbb 847 def natural_sortkey_uart(list_2_elem):
WFKnight 0:9b3d4731edbb 848 return tuple(int(num) if num else alpha for num, alpha in tokenize(list_2_elem[2].replace("USART", "UART").replace("LPUART", "ZUART")))
WFKnight 0:9b3d4731edbb 849
WFKnight 0:9b3d4731edbb 850 def natural_sortkey_i2c(list_2_elem):
WFKnight 0:9b3d4731edbb 851 return tuple(int(num) if num else alpha for num, alpha in tokenize(list_2_elem[2].replace("FMPI2C", "ZFMPI2C")))
WFKnight 0:9b3d4731edbb 852
WFKnight 0:9b3d4731edbb 853 def sort_my_lists():
WFKnight 0:9b3d4731edbb 854 adclist.sort(key=natural_sortkey)
WFKnight 0:9b3d4731edbb 855 daclist.sort(key=natural_sortkey)
WFKnight 0:9b3d4731edbb 856 i2cscl_list.sort(key=natural_sortkey_i2c) # first sort on name column
WFKnight 0:9b3d4731edbb 857 i2csda_list.sort(key=natural_sortkey_i2c) # first sort on name column
WFKnight 0:9b3d4731edbb 858 i2cscl_list.sort(key=natural_sortkey)
WFKnight 0:9b3d4731edbb 859 i2csda_list.sort(key=natural_sortkey)
WFKnight 0:9b3d4731edbb 860 pwm_list.sort(key=natural_sortkey2) # first sort on name column
WFKnight 0:9b3d4731edbb 861 pwm_list.sort(key=natural_sortkey)
WFKnight 0:9b3d4731edbb 862 uarttx_list.sort(key=natural_sortkey_uart) # first sort on name column
WFKnight 0:9b3d4731edbb 863 uartrx_list.sort(key=natural_sortkey_uart) # first sort on name column
WFKnight 0:9b3d4731edbb 864 uartcts_list.sort(key=natural_sortkey_uart) # first sort on name column
WFKnight 0:9b3d4731edbb 865 uartrts_list.sort(key=natural_sortkey_uart) # first sort on name column
WFKnight 0:9b3d4731edbb 866 uarttx_list.sort(key=natural_sortkey)
WFKnight 0:9b3d4731edbb 867 uartrx_list.sort(key=natural_sortkey)
WFKnight 0:9b3d4731edbb 868 uartcts_list.sort(key=natural_sortkey)
WFKnight 0:9b3d4731edbb 869 uartrts_list.sort(key=natural_sortkey)
WFKnight 0:9b3d4731edbb 870 spimosi_list.sort(key=natural_sortkey)
WFKnight 0:9b3d4731edbb 871 spimiso_list.sort(key=natural_sortkey)
WFKnight 0:9b3d4731edbb 872 spissel_list.sort(key=natural_sortkey)
WFKnight 0:9b3d4731edbb 873 spisclk_list.sort(key=natural_sortkey)
WFKnight 0:9b3d4731edbb 874 cantd_list.sort(key=natural_sortkey)
WFKnight 0:9b3d4731edbb 875 canrd_list.sort(key=natural_sortkey)
WFKnight 0:9b3d4731edbb 876 eth_list.sort(key=natural_sortkey2)
WFKnight 0:9b3d4731edbb 877 quadspidata_list.sort(key=natural_sortkey)
WFKnight 0:9b3d4731edbb 878 quadspisclk_list.sort(key=natural_sortkey)
WFKnight 0:9b3d4731edbb 879 quadspissel_list.sort(key=natural_sortkey)
WFKnight 0:9b3d4731edbb 880 usb_list.sort(key=natural_sortkey2)
WFKnight 0:9b3d4731edbb 881 osc_list.sort(key=natural_sortkey2)
WFKnight 0:9b3d4731edbb 882 sys_list.sort(key=natural_sortkey2)
WFKnight 0:9b3d4731edbb 883
WFKnight 0:9b3d4731edbb 884 def clean_all_lists():
WFKnight 0:9b3d4731edbb 885 del io_list[:]
WFKnight 0:9b3d4731edbb 886 del adclist[:]
WFKnight 0:9b3d4731edbb 887 del daclist[:]
WFKnight 0:9b3d4731edbb 888 del i2cscl_list[:]
WFKnight 0:9b3d4731edbb 889 del i2csda_list[:]
WFKnight 0:9b3d4731edbb 890 del pwm_list[:]
WFKnight 0:9b3d4731edbb 891 del uarttx_list[:]
WFKnight 0:9b3d4731edbb 892 del uartrx_list[:]
WFKnight 0:9b3d4731edbb 893 del uartcts_list[:]
WFKnight 0:9b3d4731edbb 894 del uartrts_list[:]
WFKnight 0:9b3d4731edbb 895 del spimosi_list[:]
WFKnight 0:9b3d4731edbb 896 del spimiso_list[:]
WFKnight 0:9b3d4731edbb 897 del spissel_list[:]
WFKnight 0:9b3d4731edbb 898 del spisclk_list[:]
WFKnight 0:9b3d4731edbb 899 del cantd_list[:]
WFKnight 0:9b3d4731edbb 900 del canrd_list[:]
WFKnight 0:9b3d4731edbb 901 del eth_list[:]
WFKnight 0:9b3d4731edbb 902 del quadspidata_list[:]
WFKnight 0:9b3d4731edbb 903 del quadspisclk_list[:]
WFKnight 0:9b3d4731edbb 904 del quadspissel_list[:]
WFKnight 0:9b3d4731edbb 905 del usb_list[:]
WFKnight 0:9b3d4731edbb 906 del osc_list[:]
WFKnight 0:9b3d4731edbb 907 del sys_list[:]
WFKnight 0:9b3d4731edbb 908
WFKnight 0:9b3d4731edbb 909 def parse_pins():
WFKnight 0:9b3d4731edbb 910 # print (" * Getting pins per Ips...")
WFKnight 0:9b3d4731edbb 911 pinregex=r'^(P[A-Z][0-9][0-5]?)'
WFKnight 0:9b3d4731edbb 912 itemlist = xml_mcu.getElementsByTagName('Pin')
WFKnight 0:9b3d4731edbb 913 for s in itemlist:
WFKnight 0:9b3d4731edbb 914 m = re.match(pinregex, s.attributes['Name'].value)
WFKnight 0:9b3d4731edbb 915 if m:
WFKnight 0:9b3d4731edbb 916 pin = m.group(0)[:2] + '_' + m.group(0)[2:] # pin formatted P<port>_<number>: PF_O
WFKnight 0:9b3d4731edbb 917 name = s.attributes['Name'].value.strip() # full name: "PF0 / OSC_IN"
WFKnight 0:9b3d4731edbb 918 if s.attributes['Type'].value == "I/O":
WFKnight 0:9b3d4731edbb 919 store_pin(pin, name)
WFKnight 0:9b3d4731edbb 920 else:
WFKnight 0:9b3d4731edbb 921 continue
WFKnight 0:9b3d4731edbb 922 siglist = s.getElementsByTagName('Signal')
WFKnight 0:9b3d4731edbb 923 for a in siglist:
WFKnight 0:9b3d4731edbb 924 sig = a.attributes['Name'].value.strip()
WFKnight 0:9b3d4731edbb 925 if "ADC" in sig:
WFKnight 0:9b3d4731edbb 926 store_adc(pin, name, sig)
WFKnight 0:9b3d4731edbb 927 if all(["DAC" in sig, "_OUT" in sig]):
WFKnight 0:9b3d4731edbb 928 store_dac(pin, name, sig)
WFKnight 0:9b3d4731edbb 929 if "I2C" in sig:
WFKnight 0:9b3d4731edbb 930 store_i2c(pin, name, sig)
WFKnight 0:9b3d4731edbb 931 if re.match('^TIM', sig) is not None: #ignore HRTIM
WFKnight 0:9b3d4731edbb 932 store_pwm(pin, name, sig)
WFKnight 0:9b3d4731edbb 933 if re.match('^(LPU|US|U)ART', sig) is not None:
WFKnight 0:9b3d4731edbb 934 store_uart(pin, name, sig)
WFKnight 0:9b3d4731edbb 935 if "SPI" in sig:
WFKnight 0:9b3d4731edbb 936 store_spi(pin, name, sig)
WFKnight 0:9b3d4731edbb 937 if "CAN" in sig:
WFKnight 0:9b3d4731edbb 938 store_can(pin, name, sig)
WFKnight 0:9b3d4731edbb 939 if "ETH" in sig:
WFKnight 0:9b3d4731edbb 940 store_eth(pin, name, sig)
WFKnight 0:9b3d4731edbb 941 if "QUADSPI" in sig:
WFKnight 0:9b3d4731edbb 942 store_qspi(pin, name, sig)
WFKnight 0:9b3d4731edbb 943 if "USB" in sig:
WFKnight 0:9b3d4731edbb 944 store_usb(pin, name, sig)
WFKnight 0:9b3d4731edbb 945 if "RCC_OSC" in sig:
WFKnight 0:9b3d4731edbb 946 store_osc(pin, name, sig)
WFKnight 0:9b3d4731edbb 947 if "SYS_" in sig:
WFKnight 0:9b3d4731edbb 948 store_sys(pin, name, sig)
WFKnight 0:9b3d4731edbb 949
WFKnight 0:9b3d4731edbb 950 PinData = {}
WFKnight 0:9b3d4731edbb 951 PinLabel = {}
WFKnight 0:9b3d4731edbb 952
WFKnight 0:9b3d4731edbb 953 def parse_BoardFile(fileName):
WFKnight 0:9b3d4731edbb 954 print(" * Board file: '%s'" % (fileName))
WFKnight 0:9b3d4731edbb 955 board_file = open(board_file_name, "r")
WFKnight 0:9b3d4731edbb 956 # IOC_PIN_pattern = re.compile(r'(P[A-I][\d]*).*\.([\w]*)=(.*)')
WFKnight 0:9b3d4731edbb 957 IOC_PIN_pattern = re.compile(r'(.*)\.([\w]*)=(.*)')
WFKnight 0:9b3d4731edbb 958 for line in board_file.readlines():
WFKnight 0:9b3d4731edbb 959 IOC_PIN = re.match(IOC_PIN_pattern, line)
WFKnight 0:9b3d4731edbb 960 if IOC_PIN:
WFKnight 0:9b3d4731edbb 961 if IOC_PIN.groups()[0] in PinData.keys():
WFKnight 0:9b3d4731edbb 962 PinData[IOC_PIN.groups()[0]][IOC_PIN.groups()[1]] = IOC_PIN.groups()[2]
WFKnight 0:9b3d4731edbb 963 else:
WFKnight 0:9b3d4731edbb 964 PinData[IOC_PIN.groups()[0]] = {}
WFKnight 0:9b3d4731edbb 965 PinData[IOC_PIN.groups()[0]][IOC_PIN.groups()[1]] = IOC_PIN.groups()[2]
WFKnight 0:9b3d4731edbb 966 # IOC_MCU = re.match(r'Mcu\.UserName=(.*)', line)
WFKnight 0:9b3d4731edbb 967 IOC_MCU = re.match(r'Mcu\.Name=(.*)', line)
WFKnight 0:9b3d4731edbb 968 if IOC_MCU:
WFKnight 0:9b3d4731edbb 969 mcu_list.append("%s.xml" % IOC_MCU.groups()[0])
WFKnight 0:9b3d4731edbb 970
WFKnight 0:9b3d4731edbb 971 board_file.close()
WFKnight 0:9b3d4731edbb 972
WFKnight 0:9b3d4731edbb 973 for EachPin in PinData:
WFKnight 0:9b3d4731edbb 974 try:
WFKnight 0:9b3d4731edbb 975 PinLabel[EachPin] = PinData[EachPin]["Signal"]
WFKnight 0:9b3d4731edbb 976 except:
WFKnight 0:9b3d4731edbb 977 pass
WFKnight 0:9b3d4731edbb 978
WFKnight 0:9b3d4731edbb 979 try:
WFKnight 0:9b3d4731edbb 980 PinLabel[EachPin] = PinData[EachPin]["GPIO_Label"]
WFKnight 0:9b3d4731edbb 981
WFKnight 0:9b3d4731edbb 982 if "STLK_RX" in PinLabel[EachPin] or "STLK_TX" in PinLabel[EachPin]:
WFKnight 0:9b3d4731edbb 983 if "RX" in PinData[EachPin]["Signal"]:
WFKnight 0:9b3d4731edbb 984 PinLabel[EachPin] = "STDIO_UART_RX"
WFKnight 0:9b3d4731edbb 985 else:
WFKnight 0:9b3d4731edbb 986 PinLabel[EachPin] = "STDIO_UART_TX"
WFKnight 0:9b3d4731edbb 987 elif "USART_RX" in PinLabel[EachPin]:
WFKnight 0:9b3d4731edbb 988 PinLabel[EachPin] = "STDIO_UART_RX"
WFKnight 0:9b3d4731edbb 989 elif "USART_TX" in PinLabel[EachPin]:
WFKnight 0:9b3d4731edbb 990 PinLabel[EachPin] = "STDIO_UART_TX"
WFKnight 0:9b3d4731edbb 991 elif "VCP_RX" in PinLabel[EachPin]:
WFKnight 0:9b3d4731edbb 992 PinLabel[EachPin] = "STDIO_UART_RX"
WFKnight 0:9b3d4731edbb 993 elif "VCP_TX" in PinLabel[EachPin]:
WFKnight 0:9b3d4731edbb 994 PinLabel[EachPin] = "STDIO_UART_TX"
WFKnight 0:9b3d4731edbb 995 elif "ST_LINK_UART1_RX" in PinLabel[EachPin]:
WFKnight 0:9b3d4731edbb 996 PinLabel[EachPin] = "STDIO_UART_RX"
WFKnight 0:9b3d4731edbb 997 elif "ST_LINK_UART1_TX" in PinLabel[EachPin]:
WFKnight 0:9b3d4731edbb 998 PinLabel[EachPin] = "STDIO_UART_TX"
WFKnight 0:9b3d4731edbb 999 elif "USART2_RX" in PinLabel[EachPin]:
WFKnight 0:9b3d4731edbb 1000 PinLabel[EachPin] = "STDIO_UART_RX"
WFKnight 0:9b3d4731edbb 1001 elif "USART2_TX" in PinLabel[EachPin]:
WFKnight 0:9b3d4731edbb 1002 PinLabel[EachPin] = "STDIO_UART_TX"
WFKnight 0:9b3d4731edbb 1003 elif "STLINK_RX" in PinLabel[EachPin] or "STLINK_TX" in PinLabel[EachPin]:
WFKnight 0:9b3d4731edbb 1004 if "RX" in PinData[EachPin]["Signal"]:
WFKnight 0:9b3d4731edbb 1005 PinLabel[EachPin] = "STDIO_UART_RX"
WFKnight 0:9b3d4731edbb 1006 else:
WFKnight 0:9b3d4731edbb 1007 PinLabel[EachPin] = "STDIO_UART_TX"
WFKnight 0:9b3d4731edbb 1008 except:
WFKnight 0:9b3d4731edbb 1009 pass
WFKnight 0:9b3d4731edbb 1010
WFKnight 0:9b3d4731edbb 1011 # main
WFKnight 0:9b3d4731edbb 1012 print ("\nScript version %s" % GENPINMAP_VERSION)
WFKnight 0:9b3d4731edbb 1013 cur_dir = os.getcwd()
WFKnight 0:9b3d4731edbb 1014 PeripheralPins_c_filename = 'PeripheralPins.c'
WFKnight 0:9b3d4731edbb 1015 PinNames_h_filename = 'PinNames.h'
WFKnight 0:9b3d4731edbb 1016 config_filename = 'cube_path.json'
WFKnight 0:9b3d4731edbb 1017
WFKnight 0:9b3d4731edbb 1018 try:
WFKnight 0:9b3d4731edbb 1019 config_file = open(config_filename, "r")
WFKnight 0:9b3d4731edbb 1020 except IOError:
WFKnight 0:9b3d4731edbb 1021 print("Please set your configuration in '%s' file" % config_filename)
WFKnight 0:9b3d4731edbb 1022 config_file = open(config_filename, "w")
WFKnight 0:9b3d4731edbb 1023 if sys.platform.startswith('win32'):
WFKnight 0:9b3d4731edbb 1024 print("Platform is Windows")
WFKnight 0:9b3d4731edbb 1025 cubemxdir = 'C:\\Program Files (x86)\\STMicroelectronics\\STM32Cube\\STM32CubeMX'
WFKnight 0:9b3d4731edbb 1026 elif sys.platform.startswith('linux'):
WFKnight 0:9b3d4731edbb 1027 print("Platform is Linux")
WFKnight 0:9b3d4731edbb 1028 cubemxdir = os.getenv("HOME")+'/STM32CubeMX'
WFKnight 0:9b3d4731edbb 1029 elif sys.platform.startswith('darwin'):
WFKnight 0:9b3d4731edbb 1030 print("Platform is Mac OSX")
WFKnight 0:9b3d4731edbb 1031 cubemxdir = '/Applications/STMicroelectronics/STM32CubeMX.app/Contents/Resources'
WFKnight 0:9b3d4731edbb 1032 else:
WFKnight 0:9b3d4731edbb 1033 print("Platform unknown")
WFKnight 0:9b3d4731edbb 1034 cubemxdir = '<Set CubeMX install directory>'
WFKnight 0:9b3d4731edbb 1035 config_file.write(json.dumps({"CUBEMX_DIRECTORY":cubemxdir}))
WFKnight 0:9b3d4731edbb 1036 config_file.close()
WFKnight 0:9b3d4731edbb 1037 exit(1)
WFKnight 0:9b3d4731edbb 1038
WFKnight 0:9b3d4731edbb 1039 config = json.load(config_file)
WFKnight 0:9b3d4731edbb 1040 config_file.close()
WFKnight 0:9b3d4731edbb 1041 cubemxdir = config["CUBEMX_DIRECTORY"]
WFKnight 0:9b3d4731edbb 1042
WFKnight 0:9b3d4731edbb 1043 parser = argparse.ArgumentParser(
WFKnight 0:9b3d4731edbb 1044 description=textwrap.dedent('''\
WFKnight 0:9b3d4731edbb 1045 Script will generate %s thanks to the xml files description available in
WFKnight 0:9b3d4731edbb 1046 STM32CubeMX directory defined in '%s':
WFKnight 0:9b3d4731edbb 1047 \t%s''' % (PeripheralPins_c_filename, config_filename, cubemxdir)),
WFKnight 0:9b3d4731edbb 1048 epilog=textwrap.dedent('''\
WFKnight 0:9b3d4731edbb 1049 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, ...)
WFKnight 0:9b3d4731edbb 1050 '''),
WFKnight 0:9b3d4731edbb 1051 formatter_class=RawTextHelpFormatter)
WFKnight 0:9b3d4731edbb 1052 group = parser.add_mutually_exclusive_group()
WFKnight 0:9b3d4731edbb 1053
WFKnight 0:9b3d4731edbb 1054 group.add_argument("-l", "--list", help="list available mcu xml files description in STM32CubeMX", action="store_true")
WFKnight 0:9b3d4731edbb 1055
WFKnight 0:9b3d4731edbb 1056 group.add_argument("-b", "--boards", help="list available boards description in STM32CubeMX", action="store_true")
WFKnight 0:9b3d4731edbb 1057
WFKnight 0:9b3d4731edbb 1058 group.add_argument("-m", "--mcu", metavar='xml', help=textwrap.dedent('''\
WFKnight 0:9b3d4731edbb 1059 specify the mcu xml file description in STM32CubeMX to use (use double quotes).
WFKnight 0:9b3d4731edbb 1060 Parameter can be a filter like L496 if you want to parse all L496 chips (-m STM32 to parse all).
WFKnight 0:9b3d4731edbb 1061 '''))
WFKnight 0:9b3d4731edbb 1062
WFKnight 0:9b3d4731edbb 1063 group.add_argument("-t", "--target", metavar='HW', help=textwrap.dedent('''\
WFKnight 0:9b3d4731edbb 1064 specify the board file description in STM32CubeMX to use (use double quotes).
WFKnight 0:9b3d4731edbb 1065 Parameter can be a filter like L496 (only the first file found will be parsed).
WFKnight 0:9b3d4731edbb 1066 '''))
WFKnight 0:9b3d4731edbb 1067
WFKnight 0:9b3d4731edbb 1068 args = parser.parse_args()
WFKnight 0:9b3d4731edbb 1069
WFKnight 0:9b3d4731edbb 1070 if not(os.path.isdir(cubemxdir)):
WFKnight 0:9b3d4731edbb 1071 print ("\n ! ! ! Cube Mx seems not to be installed or not at the requested location")
WFKnight 0:9b3d4731edbb 1072 print ("\n ! ! ! please check the value you set for 'CUBEMX_DIRECTORY' in '%s' file" % config_filename)
WFKnight 0:9b3d4731edbb 1073 quit()
WFKnight 0:9b3d4731edbb 1074
WFKnight 0:9b3d4731edbb 1075 cubemxdirMCU = os.path.join(cubemxdir, 'db', 'mcu')
WFKnight 0:9b3d4731edbb 1076 cubemxdirIP = os.path.join(cubemxdir, 'db', 'mcu', 'IP')
WFKnight 0:9b3d4731edbb 1077 cubemxdirBOARDS = os.path.join(cubemxdir, 'db', 'plugins', 'boardmanager', 'boards')
WFKnight 0:9b3d4731edbb 1078
WFKnight 0:9b3d4731edbb 1079 version_file = os.path.join(cubemxdir, 'db', 'package.xml')
WFKnight 0:9b3d4731edbb 1080 try:
WFKnight 0:9b3d4731edbb 1081 xml_file = parse(version_file)
WFKnight 0:9b3d4731edbb 1082 PackDescription_item = xml_file.getElementsByTagName('PackDescription')
WFKnight 0:9b3d4731edbb 1083 for item in PackDescription_item:
WFKnight 0:9b3d4731edbb 1084 CUBEMX_DB_VERSION = item.attributes['Release'].value
WFKnight 0:9b3d4731edbb 1085 except:
WFKnight 0:9b3d4731edbb 1086 CUBEMX_DB_VERSION = "NOT_FOUND"
WFKnight 0:9b3d4731edbb 1087 print ("CubeMX DB version %s\n" % CUBEMX_DB_VERSION)
WFKnight 0:9b3d4731edbb 1088
WFKnight 0:9b3d4731edbb 1089 if args.list:
WFKnight 0:9b3d4731edbb 1090 FileCount = 0
WFKnight 0:9b3d4731edbb 1091 for f in fnmatch.filter(os.listdir(cubemxdirMCU), 'STM32*.xml'):
WFKnight 0:9b3d4731edbb 1092 print(f)
WFKnight 0:9b3d4731edbb 1093 FileCount += 1
WFKnight 0:9b3d4731edbb 1094 print
WFKnight 0:9b3d4731edbb 1095 print("%i available xml files description" % FileCount)
WFKnight 0:9b3d4731edbb 1096 quit()
WFKnight 0:9b3d4731edbb 1097
WFKnight 0:9b3d4731edbb 1098 if args.boards:
WFKnight 0:9b3d4731edbb 1099 NucleoFileCount = 0
WFKnight 0:9b3d4731edbb 1100 DiscoFileCount = 0
WFKnight 0:9b3d4731edbb 1101 for f in fnmatch.filter(os.listdir(cubemxdirBOARDS), '*AllConfig.ioc'):
WFKnight 0:9b3d4731edbb 1102 print(f)
WFKnight 0:9b3d4731edbb 1103 if "Nucleo" in f:
WFKnight 0:9b3d4731edbb 1104 NucleoFileCount += 1
WFKnight 0:9b3d4731edbb 1105 elif "Discovery" in f:
WFKnight 0:9b3d4731edbb 1106 DiscoFileCount += 1
WFKnight 0:9b3d4731edbb 1107 print
WFKnight 0:9b3d4731edbb 1108 print("%2i available Nucleo files description" % NucleoFileCount)
WFKnight 0:9b3d4731edbb 1109 print("%2i available Disco files description" % DiscoFileCount)
WFKnight 0:9b3d4731edbb 1110 quit()
WFKnight 0:9b3d4731edbb 1111
WFKnight 0:9b3d4731edbb 1112 if args.mcu:
WFKnight 0:9b3d4731edbb 1113 #check input file exists
WFKnight 0:9b3d4731edbb 1114 if os.path.isfile(os.path.join(cubemxdirMCU, args.mcu)):
WFKnight 0:9b3d4731edbb 1115 mcu_list.append(args.mcu)
WFKnight 0:9b3d4731edbb 1116 else:
WFKnight 0:9b3d4731edbb 1117 mcu_list = fnmatch.filter(os.listdir(cubemxdirMCU), '*%s*' % args.mcu)
WFKnight 0:9b3d4731edbb 1118 if len(mcu_list) == 0:
WFKnight 0:9b3d4731edbb 1119 print (" ! ! ! " + args.mcu + " file not found")
WFKnight 0:9b3d4731edbb 1120 print (" ! ! ! Check in " + cubemxdirMCU + " the correct name of this file")
WFKnight 0:9b3d4731edbb 1121 print (" ! ! ! You may use double quotes for this file if it contains special characters")
WFKnight 0:9b3d4731edbb 1122 quit()
WFKnight 0:9b3d4731edbb 1123
WFKnight 0:9b3d4731edbb 1124 if args.target:
WFKnight 0:9b3d4731edbb 1125 board_file_name = os.path.join(cubemxdirBOARDS, args.target)
WFKnight 0:9b3d4731edbb 1126 if not(os.path.isfile(board_file_name)):
WFKnight 0:9b3d4731edbb 1127 board_list = fnmatch.filter(os.listdir(cubemxdirBOARDS), '*%s*AllConfig.ioc' % args.target)
WFKnight 0:9b3d4731edbb 1128 if len(board_list) == 0:
WFKnight 0:9b3d4731edbb 1129 print (" ! ! ! No file contains " + args.target)
WFKnight 0:9b3d4731edbb 1130 print (" ! ! ! Check in " + cubemxdirBOARDS + " the correct filter to apply")
WFKnight 0:9b3d4731edbb 1131 quit()
WFKnight 0:9b3d4731edbb 1132 elif len(board_list) > 1:
WFKnight 0:9b3d4731edbb 1133 print (" ! ! ! Multiple files contains " + args.target)
WFKnight 0:9b3d4731edbb 1134 for board_elem in board_list: print (board_elem)
WFKnight 0:9b3d4731edbb 1135 print (" ! ! ! Only the first one will be parsed\n")
WFKnight 0:9b3d4731edbb 1136 board_file_name = os.path.join(cubemxdirBOARDS,board_list[0])
WFKnight 0:9b3d4731edbb 1137 if not (os.path.isfile(board_file_name)):
WFKnight 0:9b3d4731edbb 1138 print (" ! ! ! " + args.target + " file not found")
WFKnight 0:9b3d4731edbb 1139 print (" ! ! ! Check in " + cubemxdirBOARDS + " the correct name of this file")
WFKnight 0:9b3d4731edbb 1140 print (" ! ! ! You may use double quotes for this file if it contains special characters")
WFKnight 0:9b3d4731edbb 1141 quit()
WFKnight 0:9b3d4731edbb 1142 parse_BoardFile(board_file_name)
WFKnight 0:9b3d4731edbb 1143 TargetName = ""
WFKnight 0:9b3d4731edbb 1144 if "Nucleo" in board_file_name:
WFKnight 0:9b3d4731edbb 1145 TargetName += "NUCLEO_"
WFKnight 0:9b3d4731edbb 1146 elif "Discovery" in board_file_name:
WFKnight 0:9b3d4731edbb 1147 TargetName += "DISCO_"
WFKnight 0:9b3d4731edbb 1148 elif "Evaluation" in board_file_name:
WFKnight 0:9b3d4731edbb 1149 TargetName += "EVAL_"
WFKnight 0:9b3d4731edbb 1150 m = re.search(r'STM32([\w][\dR]{3}[\w]{0,2})[\w]*_Board', board_file_name)
WFKnight 0:9b3d4731edbb 1151 if m:
WFKnight 0:9b3d4731edbb 1152 TargetName += "%s" % m.group(1)
WFKnight 0:9b3d4731edbb 1153 # specific case
WFKnight 0:9b3d4731edbb 1154 if "-P" in args.target:
WFKnight 0:9b3d4731edbb 1155 TargetName += "_P"
WFKnight 0:9b3d4731edbb 1156 if TargetName == "DISCO_L072":
WFKnight 0:9b3d4731edbb 1157 TargetName += "CZ_LRWAN1"
WFKnight 0:9b3d4731edbb 1158 if TargetName == "DISCO_L475V":
WFKnight 0:9b3d4731edbb 1159 TargetName += "G_IOT01A"
WFKnight 0:9b3d4731edbb 1160 else:
WFKnight 0:9b3d4731edbb 1161 quit()
WFKnight 0:9b3d4731edbb 1162
WFKnight 0:9b3d4731edbb 1163 for mcu_file in mcu_list:
WFKnight 0:9b3d4731edbb 1164 if args.mcu:
WFKnight 0:9b3d4731edbb 1165 TargetName = os.path.splitext(mcu_file)[0]
WFKnight 0:9b3d4731edbb 1166 out_path = os.path.join(cur_dir, '%s' % TargetName)
WFKnight 0:9b3d4731edbb 1167 print(" * Output directory: %s" % (out_path))
WFKnight 0:9b3d4731edbb 1168 print(" * Generating %s and %s with '%s'" % (PeripheralPins_c_filename, PinNames_h_filename, mcu_file))
WFKnight 0:9b3d4731edbb 1169 input_file_name = os.path.join(cubemxdirMCU, mcu_file)
WFKnight 0:9b3d4731edbb 1170 output_cfilename = os.path.join(out_path, PeripheralPins_c_filename)
WFKnight 0:9b3d4731edbb 1171 output_hfilename = os.path.join(out_path, PinNames_h_filename)
WFKnight 0:9b3d4731edbb 1172 if not(os.path.isdir(out_path)):
WFKnight 0:9b3d4731edbb 1173 os.makedirs(out_path)
WFKnight 0:9b3d4731edbb 1174
WFKnight 0:9b3d4731edbb 1175 if (os.path.isfile(output_cfilename)):
WFKnight 0:9b3d4731edbb 1176 # print (" * Requested %s file already exists and will be overwritten" % PeripheralPins_c_filename)
WFKnight 0:9b3d4731edbb 1177 os.remove(output_cfilename)
WFKnight 0:9b3d4731edbb 1178 out_c_file = open(output_cfilename, 'w')
WFKnight 0:9b3d4731edbb 1179 out_h_file = open(output_hfilename, 'w')
WFKnight 0:9b3d4731edbb 1180
WFKnight 0:9b3d4731edbb 1181 #open input file
WFKnight 0:9b3d4731edbb 1182 try:
WFKnight 0:9b3d4731edbb 1183 xml_mcu = parse(input_file_name)
WFKnight 0:9b3d4731edbb 1184 except:
WFKnight 0:9b3d4731edbb 1185 # Patch waiting for CubeMX correction
WFKnight 0:9b3d4731edbb 1186 if "STM32F042K6Tx" in input_file_name:
WFKnight 0:9b3d4731edbb 1187 input_file_name = os.path.join(cubemxdirMCU, "STM32F042K(4-6)Tx.xml")
WFKnight 0:9b3d4731edbb 1188 xml_mcu = parse(input_file_name)
WFKnight 0:9b3d4731edbb 1189 elif "STM32F429Z" in input_file_name:
WFKnight 0:9b3d4731edbb 1190 input_file_name = os.path.join(cubemxdirMCU, "STM32F429ZITx.xml")
WFKnight 0:9b3d4731edbb 1191 xml_mcu = parse(input_file_name)
WFKnight 0:9b3d4731edbb 1192 elif "STM32F746Z" in input_file_name:
WFKnight 0:9b3d4731edbb 1193 input_file_name = os.path.join(cubemxdirMCU, "STM32F746ZGTx.xml")
WFKnight 0:9b3d4731edbb 1194 xml_mcu = parse(input_file_name)
WFKnight 0:9b3d4731edbb 1195 elif "STM32F767Z" in input_file_name:
WFKnight 0:9b3d4731edbb 1196 input_file_name = os.path.join(cubemxdirMCU, "STM32F767ZGTx.xml")
WFKnight 0:9b3d4731edbb 1197 xml_mcu = parse(input_file_name)
WFKnight 0:9b3d4731edbb 1198
WFKnight 0:9b3d4731edbb 1199 elif "STM32L011K4Tx" in input_file_name:
WFKnight 0:9b3d4731edbb 1200 input_file_name = os.path.join(cubemxdirMCU, "STM32L011K(3-4)Tx.xml")
WFKnight 0:9b3d4731edbb 1201 xml_mcu = parse(input_file_name)
WFKnight 0:9b3d4731edbb 1202 elif "STM32L432KCUx" in input_file_name:
WFKnight 0:9b3d4731edbb 1203 input_file_name = os.path.join(cubemxdirMCU, "STM32L432K(B-C)Ux.xml")
WFKnight 0:9b3d4731edbb 1204 xml_mcu = parse(input_file_name)
WFKnight 0:9b3d4731edbb 1205 elif "STM32F746N" in input_file_name:
WFKnight 0:9b3d4731edbb 1206 input_file_name = os.path.join(cubemxdirMCU, "STM32F746NGHx.xml")
WFKnight 0:9b3d4731edbb 1207 xml_mcu = parse(input_file_name)
WFKnight 0:9b3d4731edbb 1208 else:
WFKnight 0:9b3d4731edbb 1209 print ("\n ! ! ! Error in CubeMX file. File " + input_file_name + " doesn't exist")
WFKnight 0:9b3d4731edbb 1210 print (" ! ! ! Check in " + cubemxdirMCU)
WFKnight 0:9b3d4731edbb 1211 quit()
WFKnight 0:9b3d4731edbb 1212 gpiofile = find_gpio_file()
WFKnight 0:9b3d4731edbb 1213 if gpiofile == 'ERROR':
WFKnight 0:9b3d4731edbb 1214 print("Could not find GPIO file")
WFKnight 0:9b3d4731edbb 1215 quit()
WFKnight 0:9b3d4731edbb 1216 xml_gpio = parse(os.path.join(cubemxdirIP, 'GPIO-' + gpiofile + '_Modes.xml'))
WFKnight 0:9b3d4731edbb 1217 print (" * GPIO file: " + os.path.join(cubemxdirIP, 'GPIO-' + gpiofile + '_Modes.xml'))
WFKnight 0:9b3d4731edbb 1218
WFKnight 0:9b3d4731edbb 1219 parse_pins()
WFKnight 0:9b3d4731edbb 1220 sort_my_lists()
WFKnight 0:9b3d4731edbb 1221 print_header()
WFKnight 0:9b3d4731edbb 1222 print_all_lists()
WFKnight 0:9b3d4731edbb 1223 print_footer()
WFKnight 0:9b3d4731edbb 1224
WFKnight 0:9b3d4731edbb 1225 nb_pin = (len(io_list))
WFKnight 0:9b3d4731edbb 1226 nb_connected_pin = len(PinLabel)
WFKnight 0:9b3d4731edbb 1227 print (" * I/O pins found: %i connected: %i\n" % (nb_pin, nb_connected_pin))
WFKnight 0:9b3d4731edbb 1228 clean_all_lists()
WFKnight 0:9b3d4731edbb 1229
WFKnight 0:9b3d4731edbb 1230 out_c_file.close()
WFKnight 0:9b3d4731edbb 1231 out_h_file.close()