How to set up the SPI communication with powerSTEP01
- April 11, 2023
- 3 replies
- 2268 views
Hi beloved friends of software architecture,
i try to programm an SPI communication protocol of an STM32F373CCT6. It should communicate to the powerSTEP01 in order to move a motor. The problem is that i dont get any answer of the powerSTEP01. Did i do anything wrong with my SPI communication setup?
I try to do so using the following conditions:
- Maximum clock speed of the SPI is 5 MHz, so i chose 1 MHz with a prescaler of 4 to the bitrate, so i am at 250 kBits/s.
- I use SPI Mode 0, so i trigger on the first rising edge. (clock polarity (CPOL) is set on low and clock phase (CPHA) is set on the first edge).
- The Datasize is configured to 8 bits.
- And i use the MSB (most significant bit) first as described in the powerSTEP01 datasheet.
- Also in the datasheet of the powerSTEP01 is that you have to pull down your CS pin of the powerSTEP01 and pull it back to high after each byte of transmision for at least 625 ns.
- The nSTBY/nRESET Pin has to be set high in order to activate the powerSTEP01
Thank you for your help in advance here is my SPI protocol code:
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_6, GPIO_PIN_SET); //nSTBY/nRESET Pin is set
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); //SPI_CS Pin set (When CS is high the device is unselected and the SDO line is inactive)
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); //SPI_CS Pin reset
HAL_SPI_Transmit(&hspi1, &value_config_set[5], 1, 100);
HAL_SPI_Receive(&hspi1, &value_config_set[2], 1, 100);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); //SPI_CS Pin set
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); //SPI_CS Pin reset
HAL_SPI_Transmit(&hspi1, &value_config_set[4], 1, 100);
HAL_SPI_Receive(&hspi1, &value_config_set[1], 1, 100);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); //SPI_CS Pin set
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); //SPI_CS Pin reset
HAL_SPI_Transmit(&hspi1, &value_config_set[3], 1, 100);
HAL_SPI_Receive(&hspi1, &value_config_set[0], 1, 100);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); //SPI_CS Pin set
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); //SPI_CS Pin reset
HAL_SPI_Transmit(&hspi1, &value_config_get[5], 1, 100);
HAL_SPI_Receive(&hspi1, &value_config_get[2], 1, 100);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); //SPI_CS Pin set
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); //SPI_CS Pin reset
HAL_SPI_Transmit(&hspi1, &value_config_get[4], 1, 100);
HAL_SPI_Receive(&hspi1, &value_config_get[1], 1, 100);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); //SPI_CS Pin set
HAL_Delay(100);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); //SPI_CS Pin reset
HAL_SPI_Transmit(&hspi1, &value_config_get[3], 1, 100);
HAL_SPI_Receive(&hspi1, &value_config_get[0], 1, 100);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); //SPI_CS Pin set
HAL_Delay(100);
