1# Print a nice list of pins, their current settings, and available afs. 2# Requires pins_af.py from ports/stm32/build-PYBV10/ directory. 3 4import pyb 5import pins_af 6 7 8def af(): 9 max_name_width = 0 10 max_af_width = 0 11 for pin_entry in pins_af.PINS_AF: 12 max_name_width = max(max_name_width, len(pin_entry[0])) 13 for af_entry in pin_entry[1:]: 14 max_af_width = max(max_af_width, len(af_entry[1])) 15 for pin_entry in pins_af.PINS_AF: 16 pin_name = pin_entry[0] 17 print("%-*s " % (max_name_width, pin_name), end="") 18 for af_entry in pin_entry[1:]: 19 print("%2d: %-*s " % (af_entry[0], max_af_width, af_entry[1]), end="") 20 print("") 21 22 23def pins(): 24 mode_str = { 25 pyb.Pin.IN: "IN", 26 pyb.Pin.OUT_PP: "OUT_PP", 27 pyb.Pin.OUT_OD: "OUT_OD", 28 pyb.Pin.AF_PP: "AF_PP", 29 pyb.Pin.AF_OD: "AF_OD", 30 pyb.Pin.ANALOG: "ANALOG", 31 } 32 pull_str = {pyb.Pin.PULL_NONE: "", pyb.Pin.PULL_UP: "PULL_UP", pyb.Pin.PULL_DOWN: "PULL_DOWN"} 33 width = [0, 0, 0, 0] 34 rows = [] 35 for pin_entry in pins_af.PINS_AF: 36 row = [] 37 pin_name = pin_entry[0] 38 pin = pyb.Pin(pin_name) 39 pin_mode = pin.mode() 40 row.append(pin_name) 41 row.append(mode_str[pin_mode]) 42 row.append(pull_str[pin.pull()]) 43 if pin_mode == pyb.Pin.AF_PP or pin_mode == pyb.Pin.AF_OD: 44 pin_af = pin.af() 45 for af_entry in pin_entry[1:]: 46 if pin_af == af_entry[0]: 47 af_str = "%d: %s" % (pin_af, af_entry[1]) 48 break 49 else: 50 af_str = "%d" % pin_af 51 else: 52 af_str = "" 53 row.append(af_str) 54 for col in range(len(width)): 55 width[col] = max(width[col], len(row[col])) 56 rows.append(row) 57 for row in rows: 58 for col in range(len(width)): 59 print("%-*s " % (width[col], row[col]), end="") 60 print("") 61