해당 글은 개인 공부 정리를 위해 작성되었습니다.
STM32 HAL 라이브러리 I2C 관련 함수들과 해당 함수 매개변수들에 대해 정리하고 한다.
I2C 관련 함수들은 cpp.hotexample\ 발췌하였습니다.
Blocking(Polling) , 인터럽트, DMA 모드 각각 존재한다.
※ Blocking Mode
Polling Mode
1. Master 장치 데이터 송신
HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress,
uint8_t *pData, uint16_t Size, uint32_t Timeout)
- hi2c 포인터 : I2C_HandleTypeDef를 가리키는 hi2c 포인터
- DevAddress : 타겟 장치 어드레스(7bit)
- pData : 데이터 버퍼를 가리키는 포인터
- Size : 보낸 데이터 크기
- Timeout : 타임아웃 시간(해당 작업이 수행되지 않아 자동적으로 종료하는 시간)
- 리턴값 : i2c status
2. Master 장치 데이터 수신
HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
- hi2c 포인터 : I2C_HandleTypeDef를 가리키는 hi2c 포인터
- DevAddress : 타겟 장치 어드레스(7bit)
- pData : 데이터 버퍼를 가리키는 포인터
- Size : 받은 데이터 크기
- Timeout : 타임아웃 시간(해당 작업이 수행되지 않아 자동적으로 종료하는 시간)
- 리턴값 : i2c status
3. Slave 장치 데이터 송신
HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout)
- hi2c 포인터 : I2C_HandleTypeDef를 가리키는 hi2c 포인터
- DevAddress : 타겟 장치 어드레스(7bit)
- pData : 데이터 버퍼를 가리키는 포인터
- Size : 보낸 데이터 크기
- Timeout : 타임아웃 시간(해당 작업이 수행되지 않아 자동적으로 종료하는 시간)
- 리턴값 : i2c status
4. Slave 장치 데이터 수신
HAL_StatusTypeDef HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t Timeout)
- hi2c 포인터 : I2C_HandleTypeDef를 가리키는 hi2c 포인터
- DevAddress : 타겟 장치 어드레스(7bit)
- pData : 데이터 버퍼를 가리키는 포인터
- Size : 받은 데이터 크기
- Timeout : 타임아웃 시간(해당 작업이 수행되지 않아 자동적으로 종료하는 시간)
- 리턴값 : i2c status
5. 특정 메모리 번지에 데이터 쓰기
HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
- hi2c 포인터 : I2C_HandleTypeDef를 가리키는 hi2c 포인터
- DevAddress : 타겟 장치 어드레스(7bit)
- MemAddress : 데이터를 쓰고자 하는 내부 메모리 주소(주로 레지스터 주소)
- MemAddSize : 데이터를 쓰고자 하는 내부 메모리 주소 사이즈
- pData : 데이터 버퍼를 가리키는 포인터
- Size : 쓴 데이터 크기
- Timeout : 타임아웃 시간(해당 작업이 수행되지 않아 자동적으로 종료하는 시간)
- 리턴값 : i2c status
6. 특정 메모리 번지에 데이터 읽기
HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
- hi2c 포인터 : I2C_HandleTypeDef를 가리키는 hi2c 포인터
- DevAddress : 타겟 장치 어드레스(7bit)
- MemAddress : 데이터 읽고자 하는 내부 메모리 주소(주로 레지스터 주소)
- MemAddSize : 데이터 읽고자 하는 내부 메모리 주소 사이즈
- pData : 데이터 버퍼를 가리키는 포인터
- Size : 읽은 데이터 크기
- Timeout : 타임아웃 시간(해당 작업이 수행되지 않아 자동적으로 종료하는 시간)
- 리턴값 : i2c status
※ Non-Blocking Mode
Interrupt Mode
위 Blocking 함수 이름 + _IT : Timeout 파라미터 빼고는 나머지 파라미터는 동일
DMA Mode
위 Blocking 함수 이름 + _DMA : Timeout 파라미터 빼고는 나머지 파라미터는 동일
7. I2C 전송 상태 반환
HAL_I2C_StateTypeDef HAL_I2C_GetState(I2C_HandleTypeDef *hi2c)
- hi2c 포인터 : I2C_HandleTypeDef를 가리키는 hi2c 포인터
- 리턴값 : i2c state
i2c 전송 상태( I2C_HandleTypeDef)
HAL_I2C_STATE_RESET = 0x00U, /*!< Peripheral is not yet Initialized */
HAL_I2C_STATE_READY = 0x20U, /*!< Peripheral Initialized and ready for use */
HAL_I2C_STATE_BUSY = 0x24U, /*!< An internal process is ongoing */
HAL_I2C_STATE_BUSY_TX = 0x21U, /*!< Data Transmission process is ongoing */
HAL_I2C_STATE_BUSY_RX = 0x22U, /*!< Data Reception process is ongoing */
HAL_I2C_STATE_LISTEN = 0x28U, /*!< Address Listen Mode is ongoing */
HAL_I2C_STATE_BUSY_TX_LISTEN = 0x29U, /*!< Address Listen Mode and Data Transmission
process is ongoing */
HAL_I2C_STATE_BUSY_RX_LISTEN = 0x2AU, /*!< Address Listen Mode and Data Reception
process is ongoing */
HAL_I2C_STATE_ABORT = 0x60U, /*!< Abort user request ongoing */
HAL_I2C_STATE_TIMEOUT = 0xA0U, /*!< Timeout state */
HAL_I2C_STATE_ERROR = 0xE0U /*!< Error */
8. I2C 모드 반환
HAL_I2C_ModeTypeDef HAL_I2C_GetMode(I2C_HandleTypeDef *hi2c)
- hi2c 포인터 : I2C_HandleTypeDef를 가리키는 hi2c 포인터
- 리턴값 : i2c Mode(Master 또는 Slave 또는 no mode)
I2C 모드(HAL_I2C_ModeTypeDef)
HAL_I2C_MODE_NONE = 0x00U, /*!< No I2C communication on going */
HAL_I2C_MODE_MASTER = 0x10U, /*!< I2C communication is in Master Mode */
HAL_I2C_MODE_SLAVE = 0x20U, /*!< I2C communication is in Slave Mode */
HAL_I2C_MODE_MEM = 0x40U /*!< I2C communication is in Memory Mode */
9. I2C 에러 상태 반환
uint32_t HAL_I2C_GetError(I2C_HandleTypeDef *hi2c)
- hi2c 포인터 : I2C_HandleTypeDef를 가리키는 hi2c 포인터
- 리턴값 : i2c error Code
에러 코드(Error Code)
#define HAL_I2C_ERROR_NONE 0x00000000U /*!< No error */
#define HAL_I2C_ERROR_BERR 0x00000001U /*!< BERR error */
#define HAL_I2C_ERROR_ARLO 0x00000002U /*!< ARLO error */
#define HAL_I2C_ERROR_AF 0x00000004U /*!< AF error */
#define HAL_I2C_ERROR_OVR 0x00000008U /*!< OVR error */
#define HAL_I2C_ERROR_DMA 0x00000010U /*!< DMA transfer error */
#define HAL_I2C_ERROR_TIMEOUT 0x00000020U /*!< Timeout Error */
#define HAL_I2C_ERROR_SIZE 0x00000040U /*!< Size Management error */
#define HAL_I2C_ERROR_DMA_PARAM 0x00000080U /*!< DMA Parameter Error */
#define HAL_I2C_WRONG_START 0x00000200U /*!< Wrong start Error */
'Stm32 > 개인 학습' 카테고리의 다른 글
Timer[4] Input capture (0) | 2024.07.14 |
---|---|
HAL 라이브러리 SPI 함수 정리 (0) | 2024.07.07 |
ADC란?(PCM)[1] (0) | 2024.07.05 |
Timer[3] - PWM (0) | 2024.06.19 |
Timer[2] - 타이머 인터럽트 (0) | 2024.06.13 |