動かし方が判らんかったST7735のLCDが動いたのでsource codeをupします.
↓こんな感じで文字列を表示できます.
縦16行x横21文字
カラー制御はしてなくて白黒表示だけ
以下はST7735というLCD chipの使い方についてのポエム.
結線
ST7735には様々な結線方式がありますが、この基板は4線シリアルになってます.
LEDはLED電源らしくて3.3Vにするらしいのでそうしました.
SCK,MOSI,A0,NSSはSTM32のoutput portへ接続します.
RESETは10kΩでpullup.
VCCは5V.
ピン制御の電気的作法NSS(CS)はlow activeです.コマンド毎にいちいち上げ下げするのではなく、1画面分を描く毎に上げ下げするぐらいの緩い制御でいいです.
MOSI(DATA)+SCKでシリアル通信します.MOSI→CLK上げ→CLK下げ で1bit転送です.
A0が曲者です.
HIGHでdata、LOWでcommandを意味します.
つまりこういうことです.
1)ST7735へコマンドを送るとき LOW
2)ST7735のGRAMへ書くとき HIGH
3)ST7735のコマンドオペランドを送る時 HIGH
ヒラ的には3が戸惑いMAXでした.3もコマンドの一部ですよね.なのにコマンドオペランドはdata扱いなんです.
SPIは使わずに、GPIO叩きで実装しました.
制御コマンド
BYTE単位で送ります.
コマンドformatはこんなのがあります.もっと長いのもあります.
コマンドのみ (1BYTE)
コマンド+オペランド (2BYTE)
コマンド+オペランド+オペランド (3BYTE)
コマンド+オペランド+オペランド+オペランド (4BYTE)
コマンド+オペランド+オペランド+オペランド+オペランド (5BYTE)
コマンドは
このpdfの104page辺りにあります.
GRAMへ書くのもコマンドでやります.
pixel format
12bit/16bit/18bitからコマンドで選べます.とりあえず16bitで運用しているわたくし.
16bitへのRGBの格納は、こうなっています.
R[15:11]
G[10:5]
B[4:0]
初期化
こんなことをやって事なきを得ています.
void LCD_init(void){
LCD_NSS_assert(); CS=LOW
LCD_COMsend_1byte(ST7735_SWRESET); リセット
HAL_Delay(50);
LCD_COMsend_1byte(ST7735_SLPOUT); スリープから脱出
HAL_Delay(255);
LCD_COMsend_2byte(ST7735_COLMOD,5); 16bit pixel mode
HAL_Delay(10);
LCD_COMsend_2byte(ST7735_MADCTL,0b11000000); 画面方向
LCD_COMsend_1byte(ST7735_NORON); 非partial
HAL_Delay(10);
LCD_COMsend_1byte(ST7735_DISPON); 表示オン
HAL_Delay(255);
LCD_NSS_deassert(); CS=HIGH
}
pixelを打つには
XY座標を指定するコマンド →GRAM転送コマンド の順でやります.
GRAM転送コマンドのオペランドがpixelデータです.2BYTEで1pixel.
GRAM転送コマンドオペランドは連続して送って良いので連続した任意個のpixelを一括setできます.その際のXY座標は自動インクリメントされます.↓こんなかんじに
1キャラクタを描画する手順
まず、GRAMの矩形エリアを描画対象として指定します.
この例では、(50,60)~(55,67)の6x8bitエリアを描画対象とします.
LCD_COMsend_5byte(ST7735_CASET, 0, 50, 0, 55);
LCD_COMsend_5byte(ST7735_RASET, 0, 60, 0, 67);
次にGRAMへ6x8bit fontを描画します.上記エリアにpixel dataを流し込んでやります.
LCD_COMmode(); A0=0
LCD_send_byte(ST7735_RAMWR); GRAM転送コマンド
LCD_DATAmode(); A0=1
for(i=0; i<6x8; i++){
pixel転送16bit
}
6x8bit fontなのでpixel転送を48回やります.
1つのpixel dataは16bitでRGBです.
したがって、6x8bit fontを描画するために送信するBYTE数は、5+5+1+48x2=107BYTES とかなり多いです.RGBですからね.
ーーーー
概念的には以上です.
コマンドはたくさんあってとても全部はわかりません.
sourceをupしておきます.
bugってたら素直に死んでください.責任はとらぬ.
かしこ