본문 바로가기
Stm32/개인 학습

HAL 라이브러리 SPI 함수 정리

by [Akashic Records] 개발의선지자 2024. 7. 7.

해당 글은 개인 공부 정리를 위해 작성되었습니다.

STM32 HAL 라이브러리 SPI 관련 함수들과 해당 함수 매개변수들에 대해 정리하고 한다.

 

SPI   관련 함수들은 cpp.hotexample\ 발췌하였습니다.

Blocking(Polling) , 인터럽트, DMA 모드 각각 존재한다.

 

spi 통신 모식도

※ Blocking Mode

Polling Mode

1.  데이터 송신 

 

HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)

  • hspi 포인터 : SPI_HandleTypeDef를 가리키는 hspi 포인터 
  • pData : 데이터 버퍼를 가리키는 포인터
  • Size : 보낸 데이터 크기
  • Timeout : 타임아웃 시간(해당 작업이 수행되지 않아 자동적으로 종료하는 시간)
  • 리턴값 : spi status

2. 데이터 수신

HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout) 

  • hspi 포인터 : SPI_HandleTypeDef를 가리키는 hspi 포인터 
  • pData : 데이터 버퍼를 가리키는 포인터
  • Size : 수신 데이터 크기
  • Timeout : 타임아웃 시간(해당 작업이 수행되지 않아 자동적으로 종료하는 시간)
  • 리턴값 : spi status

3. 데이터 송수신

HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout)

 

  • hspi 포인터 : SPI_HandleTypeDef를 가리키는 hspi 포인터 
  • pTxData : 송신  데이터 버퍼를 가리키는 포인터
  • pRxData : 신 데이터 버퍼를 가리키는 포인터
  • Size : 송수신 데이터 크기
  • Timeout : 타임아웃 시간(해당 작업이 수행되지 않아 자동적으로 종료하는 시간)
  • 리턴값 : spi status

※ Non- Blocking Mode

Interrupt Mode

위 Blocking 함수 이름 + _IT  : Timeout 파라미터 빼고는 나머지 파라미터는 동일

DMA Mode

위 Blocking 함수 이름 + _DMA  : Timeout 파라미터 빼고는 나머지 파라미터는 동일

 

Non-Block Mode 일 때, 전송 또는 수신 프로세스가 끝날 때 각각 실행됩니다.

 

아래 함수가 호출된다.

 

4, 송신 콜백 함수

void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi)

 

5.수신 콜백 함수

void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi)

 

6. 송수신 콜백 함수

void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi)

 

 

7. SPI  전송 상태 반환

HAL_SPI_StateTypeDef HAL_SPI_GetState(SPI_HandleTypeDef *hspi)

  • hspi 포인터 : SPI_HandleTypeDef를 가리키는 hspi 포인터
  • 리턴값 : spi state

HAL_StatusTypeDef 

- HAL_OK       = 0x00U,
- HAL_ERROR    = 0x01U,
- HAL_BUSY     = 0x02U,
- HAL_TIMEOUT  = 0x03U

8. SPI 에러 상태 반환

uint32_t HAL_SPI_GetError(SPI_HandleTypeDef *hspi)

  • hspi 포인터 : SPI_HandleTypeDef를 가리키는 hspi 포인터
  • 리턴값 : spi error Code

에러 코드(Error Code)

#define HAL_SPI_ERROR_NONE              (0x00000000U)   /*!< No error                               */
#define HAL_SPI_ERROR_MODF              (0x00000001U)   /*!< MODF error                             */
#define HAL_SPI_ERROR_CRC               (0x00000002U)   /*!< CRC error                              */
#define HAL_SPI_ERROR_OVR               (0x00000004U)   /*!< OVR error                              */
#define HAL_SPI_ERROR_FRE               (0x00000008U)   /*!< FRE error                              */
#define HAL_SPI_ERROR_DMA               (0x00000010U)   /*!< DMA transfer error                     */
#define HAL_SPI_ERROR_FLAG              (0x00000020U)   /*!< Error on RXNE/TXE/BSY Flag             */
#define HAL_SPI_ERROR_ABORT             (0x00000040U)   /*!< Error during SPI Abort procedure       */

 

 

'Stm32 > 개인 학습' 카테고리의 다른 글

ST LINK V2 & SWD 디버깅[1]  (0) 2024.07.16
Timer[4] Input capture  (0) 2024.07.14
HAL 라이브러리 I2C 함수 정리  (0) 2024.07.07
ADC란?(PCM)[1]  (0) 2024.07.05
Timer[3] - PWM  (0) 2024.06.19