cancel
Showing results for 
Search instead for 
Did you mean: 

SPI Communication Issues After Replacing STM32F767 with STM32H753

dorawa
Associate II

Hello,

I recently replaced an existing STM32F767 MCU with a new STM32H753 MCU in my project that involves SPI communication with an FPGA using 16-bit data frames. After the replacement, I encountered issues with SPI read/write timing and overall communication stability.

MCU and Clock Configurations
- Original MCU (STM32F767) clock settings: SYSCLK 216MHz, HCLK 216MHz, APB1 54MHz, APB2 108MHz.
- New MCU (STM32H753) clock settings: SYSCLK 400MHz, APB4 200MHz, APB2 100MHz, APB1 100MHz with SPI clocks muxed at 200MHz.

SPI Initialization on STM32H753
The STM32H753 SPI is configured mostly similar to STM32F767 except for the NSS pin setup:
- STM32F767 used SPI_NSS_SOFT with manual GPIO control.
- STM32H753 uses SPI_NSS_HARD_OUTPUT.
- The rest of the SPI parameters (master mode, 16-bit data size, clock polarity/phase) remain identical.

SPI Initialization Code Example (STM32H753)

=====================================================================
void initSensorProfileSpi1(void) {
spi1SensorProfilehandle.Instance = SPI1;
spi1SensorProfilehandle.Init.Mode = SPI_MODE_MASTER;
spi1SensorProfilehandle.Init.Direction = SPI_DIRECTION_2LINES;
spi1SensorProfilehandle.Init.DataSize = SPI_DATASIZE_16BIT;
spi1SensorProfilehandle.Init.CLKPolarity = SPI_POLARITY_LOW;
spi1SensorProfilehandle.Init.CLKPhase = SPI_PHASE_1EDGE;
spi1SensorProfilehandle.Init.NSS = SPI_NSS_HARD_OUTPUT;
spi1SensorProfilehandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
spi1SensorProfilehandle.Init.FirstBit = SPI_FIRSTBIT_MSB;
spi1SensorProfilehandle.Init.TIMode = SPI_TIMODE_DISABLE;
spi1SensorProfilehandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
spi1SensorProfilehandle.Init.CRCPolynomial = 7;
spi1SensorProfilehandle.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE;
spi1SensorProfilehandle.Init.NSSPMode = SPI_NSS_PULSE_ENABLE;
spi1SensorProfilehandle.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
spi1SensorProfilehandle.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
spi1SensorProfilehandle.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;
spi1SensorProfilehandle.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_00CYCLE;
spi1SensorProfilehandle.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE;
spi1SensorProfilehandle.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_DISABLE;

if (HAL_SPI_Init(&spi1SensorProfilehandle) != HAL_OK) {
ErrorHandler();
}
}
=====================================================================

SPI Read/Write Function(STM32H753)
=====================================================================
void spiReadprofile(uint16_t command, uint16_t address) {
memset(txspiBuffer, 0, 5);
memset(rxspiBuffer, 0, 5);

txspiBuffer[0] = command;
txspiBuffer[1] = address;

if (HAL_SPI_Transmit(&spi1SensorProfilehandle, (uint8_t*)txspiBuffer, 2, 10) != HAL_OK) {
printf("SPI Read Transmit Error");
}
if (HAL_SPI_Receive(&spi1SensorProfilehandle, (uint8_t*)rxspiBuffer, 2, 10) != HAL_OK) {
printf("SPI Read Receive Error");
}
}
=====================================================================

Observed Issues
- SPI communication that was stable on STM32F767 shows timing mismatches and unreliable data transfer after switching to STM32H753.
- Using hardware NSS output versus software NSS control seems to affect timing.
- SPI clock prescalers and timer configurations may behave differently between the two MCUs.
- DMA configurations are consistent but cannot completely resolve timing issues.

dorawa_0-1761905908402.png

 

Questions
1. What are the recommended SPI NSS modes and timing configurations when migrating from STM32F767 to STM32H753 to ensure stable SPI communication?
2. Are there known peripheral or HAL differences, especially in SPI or timer modules, that could affect compatibility in this MCU upgrade?
3. How should one adjust clock settings and prescalers to compensate for the STM32H753’s higher SYSCLK and peripheral clock setup?
4. Any best practices or errata references for SPI communication issues after MCU migration from STM32F7 to STM32H7?

Thank you for your help.


Edited to apply source code formatting - please see How to insert source code for future reference.

1 REPLY 1
TDK
Super User

Are pins set to VERY_HIGH frequency?

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