pins.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. import pyb
  4. import pins_af
  5. def af():
  6. max_name_width = 0
  7. max_af_width = 0
  8. for pin_entry in pins_af.PINS_AF:
  9. max_name_width = max(max_name_width, len(pin_entry[0]))
  10. for af_entry in pin_entry[1:]:
  11. max_af_width = max(max_af_width, len(af_entry[1]))
  12. for pin_entry in pins_af.PINS_AF:
  13. pin_name = pin_entry[0]
  14. print('%-*s ' % (max_name_width, pin_name), end='')
  15. for af_entry in pin_entry[1:]:
  16. print('%2d: %-*s ' % (af_entry[0], max_af_width, af_entry[1]), end='')
  17. print('')
  18. def pins():
  19. mode_str = { pyb.Pin.IN : 'IN',
  20. pyb.Pin.OUT_PP : 'OUT_PP',
  21. pyb.Pin.OUT_OD : 'OUT_OD',
  22. pyb.Pin.AF_PP : 'AF_PP',
  23. pyb.Pin.AF_OD : 'AF_OD',
  24. pyb.Pin.ANALOG : 'ANALOG' }
  25. pull_str = { pyb.Pin.PULL_NONE : '',
  26. pyb.Pin.PULL_UP : 'PULL_UP',
  27. pyb.Pin.PULL_DOWN : 'PULL_DOWN' }
  28. width = [0, 0, 0, 0]
  29. rows = []
  30. for pin_entry in pins_af.PINS_AF:
  31. row = []
  32. pin_name = pin_entry[0]
  33. pin = pyb.Pin(pin_name)
  34. pin_mode = pin.mode()
  35. row.append(pin_name)
  36. row.append(mode_str[pin_mode])
  37. row.append(pull_str[pin.pull()])
  38. if pin_mode == pyb.Pin.AF_PP or pin_mode == pyb.Pin.AF_OD:
  39. pin_af = pin.af()
  40. for af_entry in pin_entry[1:]:
  41. if pin_af == af_entry[0]:
  42. af_str = '%d: %s' % (pin_af, af_entry[1])
  43. break
  44. else:
  45. af_str = '%d' % pin_af
  46. else:
  47. af_str = ''
  48. row.append(af_str)
  49. for col in range(len(width)):
  50. width[col] = max(width[col], len(row[col]))
  51. rows.append(row)
  52. for row in rows:
  53. for col in range(len(width)):
  54. print('%-*s ' % (width[col], row[col]), end='')
  55. print('')