STM32でSSD1306 OLED 128x

 STM32でSSD1306 OLED

Oliverさんという方が作られたライブラリーとそれを改変してSPIにも対応した Aleksander さんという方が作られたライブラリー。前者は128x32への対応をすると上手くできず、後者を利用。I2Cでの通信(ライブラリーを利用)。

1.ピンの割り当て

Connectivityの下のI2C1(または2)を選択して、上側の窓のI2Cの欄から、I2Cを選択

その他は、特段デフォルトでOK。(あえて言うならClockSpeed = 100000のところを好みで)保存して、コードを吐き出す。

2、ライブラリーのダウンロードと取り込み

https://github.com/afiskon/stm32-ssd1306

からZIPで一式ダウンロードする。DLしたファイルから必要なのは

ssd1306_fonts.h

ssd1306_conf.h (←ssd1306_conf_template.hが入っているが名前から_templateを削除)

ssd1306.h

ssd1306.c

ssd1306_fonts.c

hファイルとcファイルそれぞれIncとSrcにCureIDEのProject Explorerにドラッグ。

3,設定

ssd1306_conf.hを開いて、使うMPUにあわせて、コメントアウトを調整。また下の方に、サイズがあるので、使うサイズにあわせて変更する。

3,コード
2つのヘッダーファイルをincludeする
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "ssd1306.h"
#include "ssd1306_fonts.h"
/* USER CODE END Includes */

基本的な使い方は、以下。
ssd1306_Init();で初期化
ssd1306_Fill(Black);で一度画面を消す。
ssd1306_SetCursor(0, 0);はカーソルの位置を指定。
ssd1306_WriteString(str_temp, Font_6x8, White);で書き込み
ssd1306_UpdateScreen();で実際に描画する

以下がテストコード。

    /* USER CODE BEGIN 2 */
  ssd1306_Init();
    HAL_Delay(100);
    ssd1306_Fill(Black);
    
    float pii;
    pii=3.141592;
    int testint;
    testint=6543210;

    sprintf(str_temp,"%.3f",pii);
    sprintf(str_temp2,"%d",testint);
    ssd1306_SetCursor(0, 0);
    ssd1306_WriteString(str_temp, Font_6x8, White);
    ssd1306_SetCursor(0, 8);
    ssd1306_WriteString(str_temp2, Font_6x8, White);
    ssd1306_SetCursor(0, 16);
    ssd1306_WriteString("test3", Font_6x8, White);
    ssd1306_SetCursor(0, 24);
    ssd1306_WriteString("test4", Font_6x8, White);

    ssd1306_UpdateScreen();
  /* USER CODE END 2 */







コメント

このブログの人気の投稿

Attiny85とAQM0802A(LCD)のI2C接続

CH9329で日本語キーボード109で正しく表示する方法