Home » Post » STM » STM32F103 I2C 기초설정 및 코드 짜기

STM32F103 I2C 기초설정 및 코드 짜기

STM32F103 I2C 튜토리얼

오늘도 CUBEMX로 기초 설정하고 진행해보고자 한다.

Turn on Cubemx to configure, then click ‘New Project’

프로젝트 열자

Fill ‘f103’ in ‘Part Number Search’, and double click the board

F103을 입력하고 보드를 더블클릭하자

push Yes button

yes 버튼 눌러야 기초 설정 다된다.

click PB8, PB9 Pin and set i2c1 SCL, SDA

먼저 PB8, PB9를 눌러서 각각 i2c 설정을 해주자. 기본 설정이 PB8, PB9번핀이 아니라서 나중에 뉴클레오 보드에 눌러놓고 안돌아가서 샷건칠 수 있다.

/media/uploads/aalokbhat/st-nucleo-f103rb-arduino_2.png
You can see that I2C female connectors are connected with PB8, PB9.

뉴클레오 보드에 있는 FEMALE 커넥터에 물리고 싶다면 꼭 확인해봐야 할 사안이다.

Set I2C1

이제 좌측 패널에서 i2c를 설정해주면 주황색이 초록색으로 바뀌는 것을 알 수 있다.

그다음 뭐 별거 없다. 저거 톱니바퀴 누르면 아래와 같이 창이 뜬다.

Click the gear shaped button on the upside.
Fill the Project name and set Toolchain you use.

창이 켜지면 더 만질 것이 없다. 왜냐면 기초 설정도 필요 없기 때문이다. 그래서 그냥 보낸다고 하면 아래 함수 하나만 쓰면 된다.

HAL_I2C_Master_Transmit

이 함수는 데이터를 보낼 때 쓰는 놈이다. 디스크립션은 아래와 같다.

HAL_I2C_Master_Transmit Discription

데이터를 송신한다면 위의 설명을 참고하면 된다.

  • I2C_HandleTypeDef * hi2c : i2c의 핸들러의 주소를 넘겨주는 인자이다. 위에서 설정한대로라면 i2c1을 사용하므로 &hi2c1을 사용하면 될 것이다.
  • uint16_t DevAddress : 두번째로 넘겨줄 인자는 i2c의 주소를 넘겨주는 방식이다. i2c의 주소는 보통 7비트로 되어 있는데 이것을 <<1시킨 값을 넣어줘야 한다. 왜냐하면 i2c의 주소 7비트 + R/W bit로 총 8비트로 구동하기 때문이다. 이 함수에서는 자동으로 <<1 쉬프트 시켜주지 않으므로 쉬프트 된 결과를 넣어줘야한다.
  • uint8_t * pData : 넘겨줄 데이터의 주소를 넘겨줘야한다. 1개의 데이터라고 하면 보통 &연산자로 넘겨줄거고, 배열이라면 그냥 배열의 이름을 넣어주면 되겠다.
  • uint16_t Size : 이건 뭐 데이터 길이 넣어주면 된다.
  • uint32_t Timeout : 타임아웃 길이 정하는건데..뭐 대충 정해도 된다.

데이터를 보내보기

일단 mpu6050에게 데이터를 보내고 싶으면 주소를 알아야한다. 스펙시트를 보자.

MPU6050 I2C Addr

AD0이 0이라고 가정하면 주소는 1101000, 0x68이다. 근데 위 함수를 사용하려면 <<1 쉬프트를 해야하니까 주소는 최종적으로 아래과 같다.

0x68<<1 = 0xd0
0x68<<1 = 0xD0

구해졌으면 코드를 작성해보자.

declare data, addr

일단 데이터는 자신이 접속하고자 하는 주소와, 데이터를 넣어주면 되겠다.

data에 뭘 넣을지는 레지스터 맵을 보면된다.

그 다음에 위 처럼 코드를 작성하고 하단에 led가 켜지는 코드를 집어넣어보자.

LED가 켜진다면 I2C 통신은 잘 되는 것이라고 볼 수 있다. 만약에 안켜진다면 while문에 머물고 있는 것이니, 주소가 틀렸을 가능성이 있다.

while(HAL_I2C_Master_Transmit(&hi2c1, addr, &data, 1, 100000)!=HAL_OK)

데이터에 뭘 넣냐는 사용자마다 다르고, 기술하려면 내용이 너무 길어질 듯 해서 여기까지만 작성하겠다.

댓글 남기기

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.