[STM32] I2C EEPROM HAL_BUSY 오류

이채윤·2022년 4월 28일
0

임베디드

목록 보기
21/70

[소개]

  • HAL 라이브러리를 사용할때 HAL_BUSY를 반환하는 것은 대표적으로 다른곳에서 장치를 쓰고 있을때, 주소를 잘못 할당했을때 등 오류가 발생한다고 합니다.
  • 하지만, 저의 경우 주소를 올바르게 할당을 해주었고 장치에도 문제가 없었습니다.

[문제 상황]

함수를 따라가보면, 해당 부분에서 HAL_BUSY를 리턴합니다.

[해결]

__HAL_RCC_I2C2_FORCE_RESET();
HAL_Delay(200);
__HAL_RCC_I2C2_RELEASE_RESET();
  • stm32f4xx_hal_msp.c 파일에 위와 같은 코드를 추가시켜줬더니 제대로 작동을 하는 것을 볼 수 있습니다.
  • 리셋 작업을 추가로 넣어줘야만 정상적으로 HAL_OK를 반환하는 것을 확인할 수 있습니다.

[소감]

  • 문제는 고쳐주고 나서 STM32CubeIDE부분을 수정하고나면 다시 원상복귀 된다는 점이다. 수시로 고쳐줘야 하는 부분에 있어서 매우 번거롭고 잊어버리기 쉽다.

[관련 글]
https://stackoverflow.com/questions/52947758/stm32-i2c-write-failure

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=just4u78&logNo=221286198232
https://electronics.stackexchange.com/questions/272427/stm32-busy-flag-is-set-after-i2c-initialization
https://community.st.com/s/question/0D53W000007Wj9wSAC/hali2c-hangs-when-it-enters-i2cwaitonflaguntiltimeout-function

0개의 댓글