AnsweredAssumed Answered

STM32F401RE: undefined reference to `HAL_SPI_Init'

Question asked by rudu.alex on Feb 18, 2016
Latest reply on Feb 19, 2016 by rudu.alex
Hello,
I try to initialize my SPI3 on the STM32F401RE Nucleo Board. But as soon as I call myInit_SPIMaster(); in the main, I get the error message, that there is an undefined reference to HAL_SPI_Init. The must be something wrong with my SPI_HandleTypeDef but thats the way I saw in several examples.

The error Message is:

Building target: Radar.elf
Invoking: Cross ARM C++ Linker
arm-none-eabi-g++ -mcpu=cortex-m4 -mthumb -mfloat-abi=soft -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -ffreestanding -Wall -Wextra  -g -T mem.ld -T libs.ld -T sections.ld -nostartfiles -Xlinker --gc-sections -L"../ldscripts" -Wl,-Map,"Radar.map" --specs=nano.specs -o "Radar.elf"  ./system/src/stm32f4-hal/stm32f4xx_hal.o ./system/src/stm32f4-hal/stm32f4xx_hal_cortex.o ./system/src/stm32f4-hal/stm32f4xx_hal_flash.o ./system/src/stm32f4-hal/stm32f4xx_hal_gpio.o ./system/src/stm32f4-hal/stm32f4xx_hal_iwdg.o ./system/src/stm32f4-hal/stm32f4xx_hal_pwr.o ./system/src/stm32f4-hal/stm32f4xx_hal_rcc.o  ./system/src/newlib/_cxx.o ./system/src/newlib/_exit.o ./system/src/newlib/_sbrk.o ./system/src/newlib/_startup.o ./system/src/newlib/_syscalls.o ./system/src/newlib/assert.o  ./system/src/diag/Trace.o ./system/src/diag/trace_impl.o  ./system/src/cortexm/_initialize_hardware.o ./system/src/cortexm/_reset_hardware.o ./system/src/cortexm/exception_handlers.o  ./system/src/cmsis/system_stm32f4xx.o ./system/src/cmsis/vectors_stm32f401xe.o  ./src/SPI_init.o ./src/_initialize_hardware.o ./src/_write.o ./src/main.o ./src/stm32f4xx_hal_msp.o ./src/timer.o  
./src/main.o: In function `Init_SPIMaster':
/home/akki/workspace/Radar/Release/../src/main.c:93: undefined reference to `HAL_SPI_Init'
collect2: error: ld returned 1 exit status
make: *** [Radar.elf] Error 1

Source code is

#include "stm32f4xx.h"
#include "stm32f4xx_hal.h"
#include "stm32f4xx_hal_conf.h"
#include "stm32f4xx_hal_spi.h"
 
SPI_HandleTypeDef hspi3;
 
static void Init_SPIMaster(void);
 
int main()
{
    HAL_Init();
 
    Init_SPIMaster();
 
}
 
void Init_SPIMaster(void)
{
 
    GPIO_InitTypeDef GPIO_InitStruct;
 
    /* Peripheral clock enable */
    __SPI3_CLK_ENABLE();
 
    /* Set Chipselect Pin to PA_15 */
    __GPIOA_CLK_ENABLE();
    GPIO_InitStruct.Pin             = GPIO_PIN_15;
    GPIO_InitStruct.Mode            = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull            = GPIO_PULLUP;
    GPIO_InitStruct.Speed           = GPIO_SPEED_HIGH;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
 
    /* SPI1 GPIO Configuration
     PC_10    : SPI1 SCK
     PC_11    : SPI1 MISO
     PC_12    : SPI1 MOSI
     */
    __GPIOC_CLK_ENABLE();
    GPIO_InitStruct.Pin             = GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12;
    GPIO_InitStruct.Mode            = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull            = GPIO_PULLUP;
    GPIO_InitStruct.Speed           = GPIO_SPEED_HIGH;
    GPIO_InitStruct.Alternate       = GPIO_AF6_SPI3;
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
 
    /* Setup new SPI interface  */
 
    SPI_HandleTypeDef hspi3;
 
 //   HAL_SPI_MspInit(&hspi3);
 
    hspi3.Instance                  = SPI3;
    hspi3.Init.Mode                 = SPI_MODE_MASTER;
    hspi3.Init.Direction                = SPI_DIRECTION_2LINES;
    hspi3.Init.DataSize             = SPI_DATASIZE_16BIT;
    hspi3.Init.CLKPolarity                  = SPI_POLARITY_LOW;
    hspi3.Init.CLKPhase             = SPI_PHASE_1EDGE;
    hspi3.Init.NSS                  = SPI_NSS_SOFT;                             // Soft because of Master
    hspi3.Init.BaudRatePrescaler    = SPI_BAUDRATEPRESCALER_16;     
    hspi3.Init.FirstBit             = SPI_FIRSTBIT_MSB;
    hspi3.Init.TIMode               = SPI_TIMODE_DISABLED;
    hspi3.Init.CRCCalculation       = SPI_CRCCALCULATION_DISABLED;
    hspi3.Init.CRCPolynomial        = 0;
 
    HAL_SPI_Init(&hspi3);
 
    //__HAL_SPI_ENABLE(&hspi3);
 
}

Outcomes