The way that pins are setup on the STM32 ports is as follows:
1 - In the ports/stm32/boards directory you'll see files which end in _af.csv. The one for the STM32F767 is stm32f767_af.csv This file contains all of the pins that the MCU (STM32F767 in this example) can have, along with all of the alternate functions, and which ADC inputs are tied to which pins.
2 - In the each board directory, you'll see a file called pins.csv which contains a mapping of board pins to MCU pins. This describes the pins which a particular board uses, and will be some subset of the MCU pins. The first field is the board pin name, and the second column is the CPU pin name. These 2 columns will wind up determining what shows up in pyb.Pin.board and pyb.Pin.cpu.
Lets look at board pin A0. In pins.csv it maps to CPU pin PA3, and if we then look in stm32f767_af.csv, for the row containing PA3 (line 6) if scroll way over to the rightmost column (which is the ADC column) we see: ADC123_IN3 which tells us that PA3 is available on ADC1, ADC2, and ADC3 and its on input channel 3.
Now lets look at pin A3 (one of the pins that doesn't work). The pins.csv file says it maps to PF3, and this agrees with the NUCLEO_F767ZI manual. Looking in the stm32f767_af.csv file, the ADC column for PF3 is blank, which is why micropython is reporting that ADC functionality is not supported on that pin. Now let's go check the datasheet:
https://www.st.com/resource/en/datashee ... f767zi.pdf Page 67 shows us that PF3 connects to ADC3_IN9
So this tells me that A3 should be available on ADC3 input channel 9, which wasn't recorded in the stm32f767_af.csv file.
However, currently MicroPython only supports a single ADC unit, and on the STM32F767 that would be ADC1. So 2 things need to happen before PF3 can support ADC.
1 - stm32f767_af.csv needs to be corrected
2 - ports/stm32/adc.c needs to be modified to support multiple ADCs.