Skip to content

stm32: Support pins with multiple AFs for the same peripheral. #7998

@jimmo

Description

@jimmo

For example, on WB55, pin PD3 can be SPI2_SCK on AF3 and SPI2_MISO on AF5.

PortD,PD3,,,,SPI2_SCK,,SPI2_MISO,,,,,QUADSPI_BK1_NCS,,,,,EVENTOUT,

When we configure a default pin in mpconfigboard.h, it is unable (via pin_find_af and the generated code from make-pins.py) to resolve this because the AF_FN_SPI enum assumes that a given peripheral will always use the same AF number on all pins.

// This will fail, and make D3 be SPI2_SCK instead.
#define MICROPY_HW_SPI2_MISO        (pin_D3)

Here are some other AF CSV files and peripherals where different AFs share the same peripheral. Other than the WB55 SPI2 example I didn't see any that are accessible from Python. (i.e. the I2C4 are conflicting with I2C_SMBA).

boards/stm32f091_af.csv
    TIM15, USART7
boards/stm32f405_af.csv
    OTG
boards/stm32f429_af.csv
    LCD, OTG
boards/stm32f439_af.csv
    LCD, OTG
boards/stm32f722_af.csv
    OTG
boards/stm32f746_af.csv
    LCD, OTG
boards/stm32f767_af.csv
    OTG, DFSDM1, LCD, I2C4
boards/stm32h743_af.csv
    DFSDM, TIM8, SDMMC1, LCD, SAI1, TIM1, I2C4, OTG, SAI4
boards/stm32h7b3_af.csv
    OCTOSPIM, DFSDM1, PSSI, FMC, TIM8, LTDC, SDMMC1, SAI1, TIM1, I2C4
boards/stm32l072_af.csv
    TIM2, LPUART1
boards/stm32l432_af.csv
    TIM1, TIM2, COMP2, COMP1
boards/stm32l452_af.csv
    TIM1, TIM2, COMP2, COMP1
boards/stm32l476_af.csv
    TIM5, TIM2, TIM1, TIM8
boards/stm32l496_af.csv
    TIM2, SPI2, TIM8, TIM5, TIM1, QUADSPI
boards/stm32wb55_af.csv
    TIM2, TIM1, SAI1, SPI2

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions