cancel
Showing results for 
Search instead for 
Did you mean: 

SPI2 STM32H745

fru999
Associate III

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 

4 REPLIES 4
AScha.3
Chief III

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 ? 

If you feel a post has answered your question, please click "Accept as Solution".
Saket_Om
ST Employee

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.

 

 

 

If your question is answered, please close this topic by clicking "Accept as Solution".

Thanks
Omar

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.

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.

If you feel a post has answered your question, please click "Accept as Solution".