해당 글은 개인 공부 정리를 위해 작성되었습니다.
STM32 HAL 라이브러리 SPI 관련 함수들과 해당 함수 매개변수들에 대해 정리하고 한다.
SPI 관련 함수들은 cpp.hotexample\ 발췌하였습니다.
Blocking(Polling) , 인터럽트, DMA 모드 각각 존재한다.
※ 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 |