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 */
コメント
コメントを投稿