본문 바로가기

[STM32F746G-DISCO] I2C 사용하기 (feat. OLED)

by rudals.kim 2024. 7. 6. 댓글 개
반응형
아래 테스트는 STM32CubeIDE 1.6.1/STM32Cube_FW_F7_V1.16.1를 사용하여 테스트 되었습니다.


이전 게시글에서는 STM32F746G-DISCO 보드의 I2C를 테스트하기 위해 터치스크린을 사용해 보았습니다.

 

[STM32F746G-DISCO] I2C 사용하기 (feat. 터치스크린)

아래 테스트는 STM32CubeIDE 1.6.1/STM32Cube_FW_F7_V1.16.1를 사용하여 테스트 되었습니다.STM32F746G-DISCO 보드의 터치 스크린은 I2C를 사용하여 동작됩니다.정전식 터치 스크린이 사용되는데 컨트롤러로 FT5336

rudalskim.tistory.com

I2C 테스트를 하나 더 해 보기로 결정한 후 무엇을 해 볼까 고민하다가 흔하디 흔한 SSD1306 드라이버를 사용하는 OLED를 테스트해 보았습니다. 전원 GND/VCC 2개의 라인과, I2C용 SCL/SDA 2라인 총 4개인 라인으로 되어있습니다.

이전 게시글에서는 I2C3을 사용했었는데 이번에는 아두이노의 I2C 포트인 I2C1 포트를 사용하여 OLED를 디스플레이해 보았습니다.

STM32CubeIDE에서 새 프로젝트를 생성 후 핀 초기화 후 SYS/USART1/I2C1 부분만 설정하였습니다.

I2C 설정은 기본값을 사용하였습니다.

프로젝트 생성 후 OLED를 구동하기 위해 u8glib 라이브러리 코드를 사용하였는데 관련 소스는 아래 github을 참고하였습니다.

 

GitHub - leechwort/SSD1306_I2C: Test u8glib on my stm32f4discovery board using CubeMX, u8glib and System workbench for stm32 for

Test u8glib on my stm32f4discovery board using CubeMX, u8glib and System workbench for stm32 for my i2c OLED display. - leechwort/SSD1306_I2C

github.com

소스코드를 다운로드 받은 후 압축을 풀면 폴더내에 u8glib 코드가 있는데 프로젝트의 Drivers 밑에 복사해 줍니다.
추가된 소스를 프로젝트에서 참조할 수 있도록 include와 symbol 패스를 설정하여 줍니다.


main 함수에 u8glib의 초기화 코드를 추가합니다.

/* USER CODE BEGIN 2 */
u8g_InitComFn(&u8g, &u8g_dev_ssd1306_128x64_i2c, u8g_com_hw_i2c_fn);
/* USER CODE END 2 */


OLED에 디스플레이될 draw함수를 추가합니다.

void draw(void)
{
  u8g_DrawFrame(&u8g, 0, 0, 128, 64);
  u8g_SetFont(&u8g, u8g_font_fixed_v0);
  u8g_DrawStr(&u8g, 2, 12, "STM32F746G-DISCO");//write string - you set coordinates and string
  u8g_DrawHLine(&u8g, 0, 14, 128);
  u8g_DrawStr(&u8g, 2, 32, "I2C1 Test by rudalskim");//write string - you set coordinates and string
  u8g_DrawStr(&u8g, 2, 52, "rudalskim.tistory.com");
}


main 함수의 while문에 아래 코드를 추가하여 OLED에 디스플레이되도록 합니다.

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    u8g_FirstPage(&u8g);
    do {
      draw();
    } while ( u8g_NextPage(&u8g) );
    u8g_Delay(10);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */


회로 구성은 아래와 같이 연결하였습니다. 소스를 빌드 후 실행해 보면 잘 동작됩니다.

I2C1인터페이스를 사용하여 OLED가 정상동작됨을 확인 해 보았습니다.

반응형

댓글