Skip to main content
Pavel A.
June 27, 2021
Solved

Where are defined AF numbers for pins?

  • June 27, 2021
  • 2 replies
  • 914 views

I have a project for H743 with three SPIs.

CubeMX creates the following code for initializing SPI pins:

void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
{
 GPIO_InitTypeDef GPIO_InitStruct = {0};
 RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
 if(hspi->Instance==SPI1)
 {
 PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI1;
 PeriphClkInitStruct.Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL;
 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
 {
 Error_Handler();
 }
 
 __HAL_RCC_SPI1_CLK_ENABLE();
 
 __HAL_RCC_GPIOA_CLK_ENABLE();
 __HAL_RCC_GPIOB_CLK_ENABLE();
 /**SPI1 GPIO Configuration
 PA5 ------> SPI1_SCK
 PA6 ------> SPI1_MISO
 PB5 ------> SPI1_MOSI
 */
 GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_6;
 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
 GPIO_InitStruct.Pull = GPIO_NOPULL;
 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
 GPIO_InitStruct.Pin = GPIO_PIN_5;
 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
 GPIO_InitStruct.Pull = GPIO_NOPULL;
 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 GPIO_InitStruct.Alternate = GPIO_AF5_SPI1;
 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 }
 else if(hspi->Instance==SPI2)
 {
 PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI2;
 PeriphClkInitStruct.Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL;
 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
 {
 Error_Handler();
 }
 
 __HAL_RCC_SPI2_CLK_ENABLE();
 
 __HAL_RCC_GPIOC_CLK_ENABLE();
 __HAL_RCC_GPIOB_CLK_ENABLE();
 /**SPI2 GPIO Configuration
 PC2_C ------> SPI2_MISO
 PC3_C ------> SPI2_MOSI
 PB10 ------> SPI2_SCK
 */
 GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
 GPIO_InitStruct.Pull = GPIO_NOPULL;
 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
 
 GPIO_InitStruct.Pin = GPIO_PIN_10;
 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
 GPIO_InitStruct.Pull = GPIO_NOPULL;
 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 }
 else if(hspi->Instance==SPI3)
 {
 PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI3;
 PeriphClkInitStruct.Spi123ClockSelection = RCC_SPI123CLKSOURCE_PLL;
 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
 {
 Error_Handler();
 }
 
 __HAL_RCC_SPI3_CLK_ENABLE();
 
 __HAL_RCC_GPIOB_CLK_ENABLE();
 __HAL_RCC_GPIOC_CLK_ENABLE();
 /**SPI3 GPIO Configuration
 PB2 ------> SPI3_MOSI
 PC10 ------> SPI3_SCK
 PC11 ------> SPI3_MISO
 */
 GPIO_InitStruct.Pin = GPIO_PIN_2;
 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
 GPIO_InitStruct.Pull = GPIO_NOPULL;
 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 GPIO_InitStruct.Alternate = GPIO_AF7_SPI3;
 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 
 GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11;
 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
 GPIO_InitStruct.Pull = GPIO_NOPULL;
 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
 GPIO_InitStruct.Alternate = GPIO_AF6_SPI3;
 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
 }
}

Notice that for SPI2 all pins have AF=5, but for SPI3 some pins have AF=6 and some AF=7.

How one can discover these values, besides of reading Cube generated code (or templates)?

These AFs are defined in stm32h7xx_hal_gpio_ex.h.

For AF=5 there are definitions for SPI1 to 6.

For AF=6 there are definitions for SPI2 and 3.

For AF=7 there are definitions for SPI2,3,6.

So, how one should guess which value to use for SPI2 and 3?

I could not find this info in DS12117, neither in RM0433.

This topic has been closed for replies.
Best answer by TDK

They are in the datasheet, page 88+.

https://www.st.com/resource/en/datasheet/stm32h743bi.pdf

Your question says H743 but DS12117 is for H753. Perhaps a typo.

0693W00000Bc5UkQAJ.png 

2 replies

TDK
TDKBest answer
June 27, 2021

They are in the datasheet, page 88+.

https://www.st.com/resource/en/datasheet/stm32h743bi.pdf

Your question says H743 but DS12117 is for H753. Perhaps a typo.

0693W00000Bc5UkQAJ.png 

"If you feel a post has answered your question, please click ""Accept as Solution""."
Pavel A.
Pavel A.Author
June 27, 2021

Thank you. Could not make it thru table 8...