タッチディスプレイ gen4-uLCD-35DT > raw formatted uSDの画像をディスプレイに表示する (Diablo16 Serial Command資料の間違いで時間を溶かした)


動作環境
Ubuntu 18.04 LTS 
display module: gen4-uLCD-35DT 
  Workshop 4 IDE v4.5.0.17 (on Windows 10 Pro)
MCU: STM32F446 Nuclero-64
  STM32CubeIDE v1.0.1 (on Ubuntu 18.04 LTS)

概要

  • microSDにraw formatted 画像イメージがある
    • Graphics Composerにてraw uSDとして画像を用意する
      • オフセット0とした
  • microSDの画像をディスプレイに表示する

実装

手順の主なものは下記を参照。

3つの実装を追加した。

  • A. Media Init
  • B. Set Address Byte
  • C. Display Image (RAW)

下記は追加分だけ記載。

disp_mediaSetByteAddress()については引数を使った実装にはまだなっていない。

STM32_serial.h
void disp_mediaInit(UART_HandleTypeDef *huartPtr);
void disp_mediaSetByteAddress(int Hi, int Low, UART_HandleTypeDef *huartPtr);
void disp_mediaDisplayImage(UART_HandleTypeDef *huartPtr);
STM32_serial.c
void disp_mediaInit(UART_HandleTypeDef *huartPtr)
{
    char txbuf[20] = {0};
    char rxbuf[20] = {0};
    int pos=0;

    txbuf[pos++] = 0xFF; // cmd
    txbuf[pos++] = 0x25;

    HAL_UART_Transmit(huartPtr, (uint8_t *)txbuf, pos, 300);
    // Note: Diablo16 Serial Commands Reference Manualには
    //       0x06しか返されないと記載があるが、0x06 0x00 0x01が返されるため3にしている
    HAL_UART_Receive(huartPtr, (uint8_t *)rxbuf, 3, 500);
}

void disp_mediaSetByteAddress(int Hi, int Low, UART_HandleTypeDef *huartPtr)
{
    char txbuf[20] = {0};
    char rxbuf[20] = {0};
    int pos=0;

    txbuf[pos++] = 0xFF; // cmd
    txbuf[pos++] = 0x2F;
    txbuf[pos++] = 0x00; // HIword(MSB)
    txbuf[pos++] = 0x00; // HIword(LSB)
    txbuf[pos++] = 0x00; // LOword(MSB)
    txbuf[pos++] = 0x00; // LOword(LSB)

    HAL_UART_Transmit(huartPtr, (uint8_t *)txbuf, pos, 300);
    HAL_UART_Receive(huartPtr, (uint8_t *)rxbuf, 1, 500);
}

void disp_mediaDisplayImage(UART_HandleTypeDef *huartPtr)
{
    char txbuf[20] = {0};
    char rxbuf[20] = {0};
    int pos=0;

    txbuf[pos++] = 0xFF; // cmd
    txbuf[pos++] = 0x27; //
    txbuf[pos++] = 0x00; // x(MSB)
    txbuf[pos++] = 0x00; // x(LSB)
    txbuf[pos++] = 0x00; // y(MSB)
    txbuf[pos++] = 0x00; // y(LSB)

    HAL_UART_Transmit(huartPtr, (uint8_t *)txbuf, pos, 300);
    HAL_UART_Receive(huartPtr, (uint8_t *)rxbuf, 1, 500);
}

使用は順番に実行するだけ。
下記はSTM32でUART1にて使用する場合。

main.c
      disp_mediaInit(&huart1);
      disp_mediaSetByteAddress(0, 0, &huart1);
      disp_mediaDisplayImage(&huart1);

実行例

補足

Media Initの応答に関する資料が間違ったいたため、時間を溶かした。

Workshop 4 IDEにてSerial Command Toolを使って応答を確認して気づいた。