Skip to main content
Visitor II
May 27, 2024
Question

SPI2 STM32H745

  • May 27, 2024
  • 2 replies
  • 1450 views

Hi everyone 

I can find help on how to connect SPI2 STM32H745. 

I have read the datasheet and did everything written on it.

Please can someone help me 

    This topic has been closed for replies.

    2 replies

    Super User
    May 27, 2024

    Hi,

    >I have read the datasheet and did everything written on it.

    What you did ?

    >how to connect SPI2 STM32H745

    In Cube - you set : SPI2 ? 

    fru999Author
    Visitor II
    May 27, 2024

    I initialize the SPI throught the CUBE MX 

    I have my SPI_init and everything OSAKE.1 talks about but I have the impression my PIN are not the good ones.

    Super User
    May 27, 2024

    The usual test for this: disable SPI setting, set PIN as gpio output and write in small loop hi/lo to the pin. Check with scope, what is on the pin then.

    Technical Moderator
    May 27, 2024

    Hello @fru999 

    Below is an example of how you might set up and use SPI2 with the HAL library on an STM32H745 microcontroller.

     

    Step 1: Initialize SPI2
    First, you need to create an SPI_HandleTypeDef structure and initialize it with the desired SPI parameters.

    #include "stm32h7xx_hal.h"
    
    SPI_HandleTypeDef hspi2;
    
    void SPI2_Init(void) {
     // SPI2 parameter configuration
     hspi2.Instance = SPI2;
     hspi2.Init.Mode = SPI_MODE_MASTER;
     hspi2.Init.Direction = SPI_DIRECTION_2LINES;
     hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
     hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
     hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
     hspi2.Init.NSS = SPI_NSS_SOFT;
     hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; // Adjust the prescaler value as needed
     hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
     hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
     hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
     hspi2.Init.CRCPolynomial = 10;
    
     if (HAL_SPI_Init(&hspi2) != HAL_OK) {
     // Initialization Error
     Error_Handler();
     }
    }
    
    void Error_Handler(void) {
     // User can add his own implementation to report the HAL error return state
     while(1) {
     }
    }

    Step 2: Configure GPIO Pins for SPI2
    You need to configure the GPIO pins for SPI2. This is typically done in the HAL_SPI_MspInit function, which is called by HAL_SPI_Init.

    void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) {
     GPIO_InitTypeDef GPIO_InitStruct = {0};
     if(hspi->Instance==SPI2) {
     // Enable clocks for SPI2 and GPIO
     __HAL_RCC_SPI2_CLK_ENABLE();
     __HAL_RCC_GPIOB_CLK_ENABLE();
    
     // SPI2 GPIO Configuration
     // PB13 ------> SPI2_SCK
     // PB14 ------> SPI2_MISO
     // PB15 ------> SPI2_MOSI
     GPIO_InitStruct.Pin = GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
     GPIO_InitStruct.Pull = GPIO_NOPULL;
     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
     GPIO_InitStruct.Alternate = GPIO_AF5_SPI2;
     HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
     }
    }

    Step 3: Transmit and Receive Data
    To transmit and receive data using the HAL library, you can use the HAL_SPI_Transmit, HAL_SPI_Receive, or HAL_SPI_TransmitReceive functions.

    uint8_t data_to_send = 0xAA; // Example data to send
    uint8_t received_data = 0x00;
    
    // Transmit data
    if (HAL_SPI_Transmit(&hspi2, &data_to_send, 1, HAL_MAX_DELAY) != HAL_OK) {
     // Transmission Error
     Error_Handler();
    }
    
    // Receive data
    if (HAL_SPI_Receive(&hspi2, &received_data, 1, HAL_MAX_DELAY) != HAL_OK) {
     // Reception Error
     Error_Handler();
    }

     

    For configuring the SPI2 peripheral on your STM32H745, I recommend using STM32CubeMX. This tool simplifies peripheral setup and pin configuration, ensuring an error-free initialization process.