stm32 NUCLEO boards: pin name conflicts
On pyboard:
>>> import pyb
>>> pin = pyb.Pin('A2')
>>> pin
Pin(Pin.cpu.A2, mode=Pin.ALT, pull=Pin.PULL_UP, af=Pin.AF7_USART2)
On many NUCLEO boards:
>>> import pyb
>>> pin = pyb.Pin('A2')
>>> pin
Pin(Pin.cpu.A4, mode=Pin.ANALOG)
On NUCLEO boards (eg NUCLEO_F091RC or L476RG) 'A2' maps to cpu pin A4.
This is because pins.csv has a board pin entry 'A2' for the Arduino analog pin name. Quite a few of the Arduino pin names are the same as the STM32 port names.
I can think of 4 solutions:
- Remove the Arduino pin names from pins.csv.
- Prepend the Arduino name with something, eg connector name -
CN8_A2 - Require cpu pins to be entered with a P, eg
pyb.Pin('PA2'). - Require cpu pins to be entered with a
cpu.prefix, egpyb.Pin('cpu.A2').
Options 3 & 4 are most likely to break existing code, although this could be avoided by mapping the short names in the csv file, eg A2,PA2 or A2,cpu.A2, for non NUCLEO ports.
Option 3 may not work for all MCUs as some MCUs don't have a P, just A2, etc.
I am currently using option 2, ie make board pin names unique.
Any suggestions on the best fix?
stm32/boards: Standardize pin names to always have P{PORT}{NUMBER} available
I noticed that some STM32 Nucleo boards were missing the PA0 notation that is used by machine.Pin to control GPIO pins.
I have added those pins to the pins.csv of the boards that were missing them.
I have not checked that all of the pins are externally exposed, only that they were on the second column (and, of course, removed duplicates).