STM32F407, назначение альтернативных функций выводам GPIO Печать
Добавил(а) microsin   

У микроконтроллера семейства STM32F40x есть 16-битные порты GPIO, которые носят имя GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH, GPIOI, у некоторых даже есть GPIOJ и GPIOK (на самом деле все порты GPIO представляются в адресном пространстве как 32-битные регистры, но у них старшие 16 бит зарезервированы и не используются). У каждого такого порта 16 ножек. В зависимости от типа используемого корпуса (LQFP100, LQFP144 и т. п.) некоторые порты могут отсутствовать. Например, у микроконтроллера STM32F407ZGT6 в корпусе LQFP144 отсутствуют порты GPIOH/I/J/K. В даташите буквы A..I/J/K заменяют символом x, когда обобщенно говорят о всех регистрах GPIO: GPIOx означает все порты GPIO от GPIOA до GPIOI.

Каждой ножке порта любого порта A..K можно присвоить любую из 16 альтернативных функций от AF0 до AF15. Альтернативная функция - это привязка ножки к какому-либо периферийному устройству микроконтроллера, например к порту SPI, USART, USB и т. д. Назначение альтернативной функции каждому выводу делается с помощью регистров GPIOx_AFRH и GPIOx_AFRL. Эти регистры 32-битные, и все их биты поделены на четверки бит, каждая четверка соответствует отдельной ножке порта GPIOx. Регистр GPIOx_AFRH отвечает за ножки с номерами бит от 15 до 8, а регистр GPIOx_AFRL отвечает за ножки с номерами бит от 7 до 0. Каждая альтернативная функция имеет двоичный номер от 0 до 15 (от AF0=0 до AF15=15), именно этот 4-битный номер записывается в четверку бит регистров GPIOx_AFRH и GPIOx_AFRL, определяя этим функционирование ножки порта.

Регистр назначает альтернативную функцию ножкам портов с номерами бит от 7 до 0. Например, четверка бит AFRL2 в регистре GPIOB_AFRL назначит ножке 2 порта GPIOB (т. е. PB2) любую альтернативную функцию от AF0=0 до AF15=15. Смещение адреса для GPIOx_AFRL равно 0x20, значение после сброса 0x00000000 (после сброса все ножки портов выполняют альтернативную функцию AF0).

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
AFRL7[3:0] AFRL6[3:0] AFRL5[3:0] AFRL4[3:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
AFRL3[3:0] AFRL2[3:0] AFRL1[3:0] AFRL0[3:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Регистр назначает альтернативную функцию ножкам портов с номерами бит от 15 до 8. Например, четверка бит AFRH13 в регистре GPIOA_AFRH назначит ножке 13 порта GPIOA (т. е. PA13) любую альтернативную функцию от AF0=0 до AF15=15. Смещение адреса для GPIOx_AFRH равно 0x24, значение после сброса 0x00000000 (после сброса все ножки портов выполняют альтернативную функцию AF0).

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
AFRH15[3:0] AFRH14[3:0] AFRH13[3:0] AFRH12[3:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
AFRH11[3:0] AFRH10[3:0] AFRH9[3:0] AFRH8[3:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

[Таблицы альтернативных функций портов микроконтроллеров STM32F405xx, STM32F407xx]

По умолчанию (после сброса) все ножки портов GPIOx настроены на альтернативную функцию AF0. Таблицу всех альтернативных функций можно найти в даташите на микроконтроллер, она называется Alternate function mapping.

Порт AF0 AF1 AF2 AF3 AF4 AF5 AF6 AF7
SYS TIM1/2 TIM3, TIM5 TIM8, TIM9 I2C3 SPI1 SPI3/
I2S3
USART1..2
PA0   TIM2_CH1_ETR TIM5_CH1 TIM8_ETR       USART2_CTS
PA1   TIM2_CH2 TIM5_CH2         USART2_RTS
PA2   TIM2_CH3 TIM5_CH3 TIM9_CH1       USART2_TX
PA3   TIM2_CH4 TIM5_CH4 TIM9_CH2       USART2_RX
PA4           SPI1_NSS SPI3_NSS
I2S3_WS
USART2_CK
PA5   TIM2_CH1_ETR   TIM8_CH1N   SPI1_SCK    
PA6   TIM1_BKIN TIM3_CH1 TIM8_BKIN   SPI1_MISO    
PA7   TIM1_CH1N TIM3_CH2 TIM8_CH1N   SPI1_MOSI    
PA8 MCO1 TIM1_CH1     I2C3_SCL     USART1_CK
PA9   TIM1_CH2     I2C3_SMBA     USART1_TX
PA10   TIM1_CH3           USART1_RX
PA11   TIM1_CH4           USART1_CTS
PA12   TIM1_ETR           USART1_RTS
PA13 JTMS-SWDIO              
PA14 JTCK-SWCLK              
PA15 JTDI TIM2_CH1
TIM2_ETR
      SPI1_NSS SPI3_NSS/
I2S3_WS
 

Порт AF8 AF9 AF10 AF11 AF12 AF13 AF14 AF15
UART4 CAN1/
TIM13..14
OTG_FS/
OTG_HS
ETH OTG_HS DCMI SYS
PA0 UART4_TX     ETH_MII_CRS       EVENTOUT
PA1 UART4_RX     ETH_MII_RX_CLK
ETH_RMII_REF_CLK
      EVENTOUT
PA2       ETH_MDIO       EVENTOUT
PA3     OTG_HS_ULPI_D0 ETH _MII_COL       EVENTOUT
PA4         OTG_HS_SOF DCMI_HSYNC   EVENTOUT
PA5     OTG_HS_ULPI_CK         EVENTOUT
PA6   TIM13_CH1       DCMI_PIXCK   EVENTOUT
PA7   TIM14_CH1   ETH_MII_RX_DV
ETH_RMII_CRS_DV
      EVENTOUT
PA8     OTG_FS_SOF         EVENTOUT
PA9           DCMI_D0   EVENTOUT
PA10     OTG_FS_ID     DCMI_D1   EVENTOUT
PA11   CAN1_RX OTG_FS_DM         EVENTOUT
PA12   CAN1_TX OTG_FS_DP         EVENTOUT
PA13               EVENTOUT
PA14               EVENTOUT
PA15               EVENTOUT

Порт AF0 AF1 AF2 AF3 AF4 AF5 AF6 AF7
SYS TIM1/2 TIM3/4 TIM8/TIM10/TIM11 I2C1/I2C2 SPI1/SPI2/
I2S2
SPI3/I2Sext/
I2S3
USART1/USART3/
I2S3ext
PB0   TIM1_CH2N TIM3_CH3 TIM8_CH2N        
PB1   TIM1_CH3N TIM3_CH4 TIM8_CH3N        
PB2                
PB3 JTDO/
TRACESWO
TIM2_CH2       SPI1_SCK SPI3_SCK
I2S3_CK
 
PB4 NJTRST   TIM3_CH1     SPI1_MISO SPI3_MISO I2S3ext_SD
PB5     TIM3_CH2   I2C1_SMBA SPI1_MOSI SPI3_MOSI
I2S3_SD
 
PB6     TIM4_CH1   I2C1_SCL     USART1_TX
PB7     TIM4_CH2   I2C1_SDA     USART1_RX
PB8     TIM4_CH3 TIM10_CH1 I2C1_SCL      
PB9     TIM4_CH4 TIM11_CH1 I2C1_SDA SPI2_NSS
I2S2_WS
   
PB10   TIM2_CH3     I2C2_SCL SPI2_SCK
I2S2_CK
  USART3_TX
PB11   TIM2_CH4     I2C2_SDA     USART3_RX
PB12   TIM1_BKIN     I2C2_SMBA SPI2_NSS
I2S2_WS
  USART3_CK
PB13   TIM1_CH1N       SPI2_SCK
I2S2_CK
  USART3_CTS
PB14   TIM1_CH2N   TIM8_CH2N   SPI2_MISO I2S2ext_SD USART3_RTS
PB15 RTC_REFIN TIM1_CH3N   TIM8_CH3N   SPI2_MOSI
I2S2_SD
   

Порт AF8
AF9 AF10 AF11 AF12 AF13 AF14 AF15
CAN1/CAN2/
TIM12
OTG_HS ETH FSMC/SDIO/
OTG_HS
DCMI SYS
PB0     OTG_HS_ULPI_D1 ETH_MII_RXD2       EVENTOUT
PB1     OTG_HS_ULPI_D2 ETH_MII_RXD3       EVENTOUT
PB2               EVENTOUT
PB3               EVENTOUT
PB4               EVENTOUT
PB5   CAN2_RX OTG_HS_ULPI_D7 ETH_PPS_OUT   DCMI_D10   EVENTOUT
PB6   CAN2_TX       DCMI_D5   EVENTOUT
PB7         FSMC_NL DCMI_VSYNC   EVENTOUT
PB8   CAN1_RX   ETH_MII_TXD3 SDIO_D4 DCMI_D6   EVENTOUT
PB9   CAN1_TX     SDIO_D5 DCMI_D7   EVENTOUT
PB10     OTG_HS_ULPI_D3 ETH_MII_RX_ER       EVENTOUT
PB11     OTG_HS_ULPI_D4 ETH_MII_TX_EN
ETH_RMII_TX_EN
      EVENTOUT
PB12   CAN2_RX OTG_HS_ULPI_D5 ETH_MII_TXD0
ETH_RMII_TXD0
OTG_HS_ID     EVENTOUT
PB13   CAN2_TX OTG_HS_ULPI_D6 ETH_MII_TXD1
ETH_RMII_TXD1
      EVENTOUT
PB14   TIM12_CH1     OTG_HS_DM     EVENTOUT
PB15   TIM12_CH2     OTG_HS_DP     EVENTOUT

Порт AF0
AF1
AF2 AF3 AF4 AF5 AF6 AF7
TIM3 TIM8 I2C3 SPI2/I2S/
I2S2/I2S2ext
SPI3/I2Sext/
I2S3
USART3
PC0                
PC1                
PC2           SPI2_MISO I2S2ext_SD  
PC3           SPI2_MOSI
I2S2_SD
   
PC4                
PC5                
PC6     TIM3_CH1 TIM8_CH1   I2S2_MCK    
PC7     TIM3_CH2 TIM8_CH2     I2S3_MCK  
PC8     TIM3_CH3 TIM8_CH3        
PC9     TIM3_CH4 TIM8_CH4 I2C3_SDA I2S_CKIN    
PC10             SPI3_SCK
I2S3_CK
USART3_TX
PC11           I2S3ext_SD SPI3_MISO USART3_RX
PC12             SPI3_MOSI
I2S3_SD
USART3_CK
PC13                
PC14                
PC15                

Порт AF8 AF9
AF10 AF11 AF12 AF13 AF14 AF15
UART4/5/
USART6
OTG_HS ETH SDIO DCMI SYS
PC0     OTG_HS_ULPI_STP         EVENTOUT
PC1       ETH_MDC       EVENTOUT
PC2     OTG_HS_ULPI_DIR ETH_MII_TXD2       EVENTOUT
PC3       ETH_MII_TX_CLK       EVENTOUT
PC4       ETH_MII_RXD0
ETH_RMII_RXD0
      EVENTOUT
PC5       ETH_MII_RXD1
ETH_RMII_RXD1
      EVENTOUT
PC6 USART6_TX       SDIO_D6 DCMI_D0   EVENTOUT
PC7 USART6_RX       SDIO_D7 DCMI_D1   EVENTOUT
PC8 USART6_CK       SDIO_D0 DCMI_D2   EVENTOUT
PC9         SDIO_D1 DCMI_D3   EVENTOUT
PC10 UART4_TX       SDIO_D2 DCMI_D8   EVENTOUT
PC11 UART4_RX       SDIO_D3 DCMI_D4   EVENTOUT
PC12 UART5_TX       SDIO_CK DCMI_D9   EVENTOUT
PC13               EVENTOUT
PC14               EVENTOUT
PC15               EVENTOUT

Порт AF0
AF1
AF2 AF3
AF4
AF5
AF6
AF7
TIM3/TIM4 USART2/UART3
PD0                
PD1                
PD2     TIM3_ETR          
PD3               USART2_CTS
PD4               USART2_RTS
PD5               USART2_TX
PD6               USART2_RX
PD7               USART2_CK
PD8               USART3_TX
PD9               USART3_RX
PD10               USART3_CK
PD11               USART3_CTS
PD12     TIM4_CH1         USART3_RTS
PD13     TIM4_CH2          
PD14     TIM4_CH3          
PD15     TIM4_CH4          

Порт AF8 AF9 AF10
AF11
AF12 AF13 AF14 AF15
UART5 CAN1 FSMC/SDIO/
OTG_FS
DCMI SYS
PD0   CAN1_RX     FSMC_D2     EVENTOUT
PD1   CAN1_TX     FSMC_D3     EVENTOUT
PD2 UART5_RX       SDIO_CMD DCMI_D11   EVENTOUT
PD3         FSMC_CLK     EVENTOUT
PD4         FSMC_NOE     EVENTOUT
PD5         FSMC_NWE     EVENTOUT
PD6         FSMC_NWAIT     EVENTOUT
PD7         FSMC_NE1
FSMC_NCE2
    EVENTOUT
PD8         FSMC_D13     EVENTOUT
PD9         FSMC_D14     EVENTOUT
PD10         FSMC_D15     EVENTOUT
PD11         FSMC_A16     EVENTOUT
PD12         FSMC_A17     EVENTOUT
PD13         FSMC_A18     EVENTOUT
PD14         FSMC_D0     EVENTOUT
PD15         FSMC_D1     EVENTOUT

Порт AF0 AF1 AF2 AF3 AF4
AF5
AF6
AF7
SYS TIM1 TIM4 TIM9
PE0     TIM4_ETR          
PE1                
PE2 TRACECLK              
PE3 TRACED0              
PE4 TRACED1              
PE5 TRACED2     TIM9_CH1        
PE6 TRACED3     TIM9_CH2        
PE7   TIM1_ETR            
PE8   TIM1_CH1N            
PE9   TIM1_CH1            
PE10   TIM1_CH2N            
PE11   TIM1_CH2            
PE12   TIM1_CH3N            
PE13   TIM1_CH3            
PE14   TIM1_CH4            
PE15   TIM1_BKIN            

Порт AF8
AF9
AF10
AF11 AF12 AF13 AF14 AF15
ETH FSMC/SDIO/
OTG_FS
DCMI SYS
PE0         FSMC_NBL0 DCMI_D2   EVENTOUT
PE1         FSMC_NBL1 DCMI_D3   EVENTOUT
PE2       ETH_MII_TXD3 FSMC_A23     EVENTOUT
PE3         FSMC_A19     EVENTOUT
PE4         FSMC_A20 DCMI_D4   EVENTOUT
PE5         FSMC_A21 DCMI_D6   EVENTOUT
PE6         FSMC_A22 DCMI_D7   EVENTOUT
PE7         FSMC_D4     EVENTOUT
PE8         FSMC_D5     EVENTOUT
PE9         FSMC_D6     EVENTOUT
PE10         FSMC_D7     EVENTOUT
PE11         FSMC_D8     EVENTOUT
PE12         FSMC_D9     EVENTOUT
PE13         FSMC_D10     EVENTOUT
PE14         FSMC_D11     EVENTOUT
PE15         FSMC_D12     EVENTOUT

Порт AF0
AF1
AF2
AF3 AF4 AF5
AF6
AF7
TIM10/TIM11 I2C2
PF0         I2C2_SDA      
PF1         I2C2_SCL      
PF2         I2C2_SMBA      
PF3                
PF4                
PF5                
PF6       TIM10_CH1        
PF7       TIM11_CH1        
PF8                
PF9                
PF10                
PF11                
PF12                
PF13                
PF14                
PF15                

Порт AF8
AF9 AF10
AF11
AF12 AF13 AF14 AF15
CAN1/2/
TIM12..14
FSMC/SDIO/
OTG_FS
DCMI SYS
PF0         FSMC_A0     EVENTOUT
PF1         FSMC_A1     EVENTOUT
PF2         FSMC_A2     EVENTOUT
PF3         FSMC_A3     EVENTOUT
PF4         FSMC_A4     EVENTOUT
PF5         FSMC_A5     EVENTOUT
PF6         FSMC_NIORD     EVENTOUT
PF7         FSMC_NREG     EVENTOUT
PF8   TIM13_CH1     FSMC_NIOWR     EVENTOUT
PF9   TIM14_CH1     FSMC_CD     EVENTOUT
PF10         FSMC_INTR     EVENTOUT
PF11           DCMI_D12   EVENTOUT
PF12         FSMC_A6     EVENTOUT
PF13         FSMC_A7     EVENTOUT
PF14         FSMC_A8     EVENTOUT
PF15         FSMC_A9     EVENTOUT

Порт AF0
AF1
AF2
AF3
AF4
AF5
AF6
AF7
PG0                
PG1                
PG2                
PG3                
PG4                
PG5                
PG6                
PG7                
PG8                
PG9                
PG10                
PG11                
PG12                
PG13                
PG14                
PG15                

Порт AF8 AF9
AF10
AF11 AF12 AF13 AF14 AF15
USART6 ETH FSMC/SDIO/
OTG_FS
DCMI SYS
PG0         FSMC_A10     EVENTOUT
PG1         FSMC_A11     EVENTOUT
PG2         FSMC_A12     EVENTOUT
PG3         FSMC_A13     EVENTOUT
PG4         FSMC_A14     EVENTOUT
PG5         FSMC_A15     EVENTOUT
PG6         FSMC_INT2     EVENTOUT
PG7 USART6_CK       FSMC_INT3     EVENTOUT
PG8 USART6_RTS     ETH_PPS_OUT       EVENTOUT
PG9 USART6_RX       FSMC_NE2
FSMC_NCE3
    EVENTOUT
PG10         FSMC_NCE4_1
FSMC_NE3
    EVENTOUT
PG11       ETH_MII_TX_EN
ETH_RMII_TX_EN
FSMC_NCE4_2     EVENTOUT
PG12 USART6_RTS       FSMC_NE4     EVENTOUT
PG13 USART6_CTS     ETH_MII_TXD0
ETH_RMII_TXD0
FSMC_A24     EVENTOUT
PG14 USART6_TX     ETH_MII_TXD1
ETH_RMII_TXD1
FSMC_A25     EVENTOUT
PG15 USART6_CTS         DCMI_D13   EVENTOUT