32F429IDISCOVERY HAL_I2C 제어

2019. 7. 2. 00:24임베디드/32F429IDISCOVERY

https://cafe.naver.com/stm32study/ 에서 진행한 세미나를 바탕으로 재구성했습니다

 

I2C slave 장치를 디스커버리 보드에 있는 터치스크린 장치드라이버(STMPE811QTR)를 잡았다. 장치드라이버의 주소를 I2C로 읽어오는 실습을 하려고 한다

 

 

보드 회로도를 참고하면, I2C 3번을 사용하는 것으로 확인된다

그리고 STMPE811의 문서(아래 링크)를 확인하면 I2C 인터페이스 부분에서 주소를 확인할 수 있다

https://media.digikey.com/pdf/Data%20Sheets/ST%20Microelectronics%20PDFS/STMPE811.pdf

 

 

위 회로도를 보면 A0 핀이 그라운드로 연결되어있기 때문에 I2C 주소는 0x82가 된다

 

1. 주소값을 읽어와 UART로 확인하기 위해서 cubeMX로 I2C3와 USART1을 개방하도록 한다

 

 

 

문서를 봤을 때 STMPE811의 SCL은 400KHz까지 지원된다. 따라서 100KHz로 무방한 속도로 설정한다

 

 

2. UART printf 설정을 하자

 

 

3. I2C 프로토콜은 장치 주소를 보내고 읽을 위치의 reg 주소를 다음으로 보내야한다. 문서를 보면 0x00 reg 주소를 읽으면 2바이트의 칩 ID를 읽을 수 있게 된다

 

 

4. 마스터가 읽을 reg을 정하기 위해서 송신모드를 한 후, 읽기모드로 전환한 후 장치주소를 읽게 된다 

5. 장치주소가 7비트인데 HAL 라이브러리에서 shift를 하는지 확인해야 한다

 

 

shift를 하지 않기 때문에, 매개변수에 shift를 한 값을 넣어줘야 한다. 따라서 Default 주소인 0x41을 왼쪽으로 shift한 문서에 나와있는 0x82를 넣어야 한다