Gorilla Wisdom


STM32マイコンで有機ELディスプレイSO1602AWWBを動かす。

使用しているマイコンボードはSTM32のテストボードNUCLEO-F446RE。
OLEDモジュールは秋月で購入したSO1602AWWB-UC-WB-U。

STM32 Nucleo 開発ボード STM32F446RE MCU NUCLEO-F446RE付き

新品価格
¥7,573から
(2022/7/23 22:30時点)


マイコンのI2C設定は以下のようにした。
STM32CubeMXで設定すれば自動で書かれるのであえて入力する必要はなし。
hi2c1.Instance = I2C1;
hi2c1.Init.ClockSpeed = 400000;
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c1.Init.OwnAddress1 = 0;
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c1.Init.OwnAddress2 = 0;
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;


まず/* USER CODE BEGIN PD */~/* USER CODE END PD */の間にスレーブアドレスを記載。
/* USER CODE BEGIN PD */
#define SO1602_ADDRESS (0x3c << 1)//スレーブ+R/W
/* USER CODE END PD */


OLEDの操作用コマンドプログラムを/* USER CODE BEGIN 0 */~/* USER CODE END 0 */の間に記載。
/* USER CODE BEGIN 0 */

// I2C OLED : SO1602
void oled_cmd(uint8_t x)//OLEDコマンド用関数
{
uint8_t TxBuffer[2] = { 0x00, x };
HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)SO1602_ADDRESS, (uint8_t*)TxBuffer, 2, 1000);
}

void oled_data(uint8_t x)//OLEDデータ用関数
{
uint8_t TxBuffer[2] = { 0x40, x };
HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)SO1602_ADDRESS, (uint8_t*)TxBuffer, 2, 1000);
}

void oled_puts(const char *s)//OLED文字出力用関数
{
while(*s) oled_data(*s++);
}

void oled_contrast()//OLEDコントラスト
{
oled_cmd(0x2a); //RE=1
oled_cmd(0x79); //SD=1
oled_cmd(0x81); //コントラストセット
oled_cmd(0xFF); //輝度MAX
oled_cmd(0x78); //SD=0
oled_cmd(0x28); //2C=高文字 28=ノーマル
HAL_Delay(100);
}

void oled_init()//OLEDイニシャライズ用関数
{
HAL_Delay(100);
oled_cmd(0x01); //ClearDisplay
HAL_Delay(20);
oled_cmd(0x02); //ReturnHome
HAL_Delay(2);
oled_cmd(0x0F); //Display ON
HAL_Delay(2);
oled_cmd(0x01); //ClearDisplay
HAL_Delay(20);
}

void oled_move(uint8_t pos)//OLEのカーソル移動
{
oled_cmd(0x80 | pos);
}
/* USER CODE END 0 */


次にOLEDのイニシャライズを行う。
/* USER CODE BEGIN 2 */~/* USER CODE END 2 */の間に記載。 イニシャライズが終わったら実際に文字を表示させてみる。
oled_init();
oled_contrast();
oled_puts("Hello World");
oled_move(0x20);
oled_puts("SO1602");

error