Skip to main content
Rusty Jones
Associate
February 13, 2019
Question

Proper use of the HAL library for SPI communications.

  • February 13, 2019
  • 4 replies
  • 2410 views

Proper use of the HAL library for SPI communications.

OK, first, I am very new to this and I am slowly learning as I go.

The project I am working on is a radio beacon in the 430MHz range. I have a Nucleo-F446RE board and a RFM23B transceiver module. I am wanting to control the radio via SPI. Following a YouTube video to use SPI I have the following lines of code

uint8_t spiReadRegister(uint8_t address)
{
	uint8_t spiTxBuf[2], spiRxBuf[2];
	uint8_t result;
	spiRxBuf[0] = address;
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET); //Bring nSEL low
	HAL_SPI_Receive(&hspi1, spiRxBuf, 1, 50); // read 1 byte of data, wait 50usec
	HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET); //Bring nSEL high
	result = spiRxBuf;
	return(result);
}

 the code in is a separate src file "SPI.c" and I get the following error

"'hspi1' undeclared (first use in this function)" for the line "HAL_SPI_Receive(&hspi1, spiRxBuf, 1, 50); // read 1 byte of data, wait 50usec"

Now if I put the same block of code into the main.c file it has no error

What am I doing wrong??

Thanks

Rusty

This topic has been closed for replies.

4 replies

Tesla DeLorean
Guru
February 13, 2019

You'd need to define hspi as an extern​ variable in the secondary files.

Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
alister
Senior III
February 13, 2019

The hspi1 is defined in main.c:

SPI_HandleTypeDef hspi1;

You can declare it in your spi.c as follows:

extern SPI_HandleTypeDef hspi1;

Alister

Rusty Jones
Associate
February 13, 2019

THANK YOU BOTH!

As you can see I am somewhat new to all of this, but am learning!

Rusty

S.Ma
Principal
February 13, 2019

Get used in your IDE for the handy "find in files" command...