Question
STM32F401RET6 - Nucleo Board - SPI Problems
Posted on October 14, 2015 at 00:53
I have been working on setting up and trying to test the SPI output from the Nucleo-F401RE. I am currently using a logic analyzer to view the data and clock lines, though I have not yet been able to see any change on either line...
Here is what I have so far (I am very new to STM and the HAL libraries...):
#include ''stm32f4xx.h''
#include ''NONPRECISIONDELAY.h''
int main(void)
{
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN;
RCC->APB1ENR |= RCC_APB1ENR_SPI2EN;
// HAL GPIO - Onboard LED init
GPIO_InitTypeDef ledInit;
ledInit.Pin = GPIO_PIN_5;
ledInit.Mode = GPIO_MODE_OUTPUT_PP;
ledInit.Pull = GPIO_NOPULL;
ledInit.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIOA, &ledInit);
/* END GPIO INIT */
// CS
GPIO_InitTypeDef spiOneGpioInit_t;
spiOneGpioInit_t.Pin = GPIO_PIN_12;
spiOneGpioInit_t.Mode = GPIO_MODE_AF_PP;
spiOneGpioInit_t.Pull = GPIO_PULLUP;
spiOneGpioInit_t.Speed = GPIO_SPEED_LOW;
spiOneGpioInit_t.Alternate = GPIO_AF5_SPI2;
HAL_GPIO_Init(GPIOB, &spiOneGpioInit_t);
// SPI 2
spiOneGpioInit_t.Pin = GPIO_PIN_15 | GPIO_PIN_14 | GPIO_PIN_13;
spiOneGpioInit_t.Mode = GPIO_MODE_AF_PP;
spiOneGpioInit_t.Pull = GPIO_PULLDOWN;
spiOneGpioInit_t.Speed = GPIO_SPEED_LOW;
spiOneGpioInit_t.Alternate = GPIO_AF5_SPI2;
HAL_GPIO_Init(GPIOB, &spiOneGpioInit_t);
// SPI Handler
SPI_HandleTypeDef hspi;
hspi.Instance = SPI2;
hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
hspi.Init.Direction = SPI_DIRECTION_2LINES;
hspi.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi.Init.DataSize = SPI_DATASIZE_8BIT;
hspi.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi.Init.TIMode = SPI_TIMODE_DISABLED;
hspi.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED;
hspi.Init.NSS = SPI_NSS_HARD_OUTPUT;
if (HAL_SPI_Init(&hspi) != HAL_OK)
{
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); // On board LED for indication
return 1;
}
uint8_t data[] = {0xff};
while(1)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET); // On board LED for indication
delayMs(500);
HAL_SPI_Transmit(&hspi, data, 1, 10);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // On board LED for indication
delayMs(500);
}
}