robertkendrick / STM32M3_ST7735_Driver

Adafruit's ST7735 Driver modified to run on STM32 Cortex M3
0 stars 0 forks source link

Olimex ST7735 #2

Open redafenj opened 9 years ago

redafenj commented 9 years ago

Thanks for you help. I used the bk_GFX to get the graphic high speed compiled correctly.

I modify the Serial to SerialUSB, but the TFT Sainsmart is not working...

I am using the Olimex STM 32 Board.

So I used the Pin 9 for DC, PIN 10 for CS, PIN 11 for MOSI and PIN 13 for CLK. (I tried with and without Reset)

My display is working fine when I am using the Arduino UNO Board and Sketch, but It is not working on Olimex. Are the PIN I am using valid ?

robertkendrick commented 9 years ago

Hi

Attached at the bottom of this reply is the pde I used to test the maple ST7735 Library.

Note: 1) The ST7735 displays were manufactured in different versions. The version was identified by the colour of the tab protecting the display glass, red, green or black. The attached pde has different initializers for each colour. Make sure you uncomment the initializer of the colour you are using. 2) Check that the defines in this pde match the pin numbers you are using 3) You have the option of software or hardware SPI. Select which one you want to use by uncomment the required constructor in this pde. 4) You should not have to change Serial to SerialUSB in either ST7735 or bk_GFX as there is a define in the library that substitutes SerialUSB for every Serial it finds (#define Serial SerialUSB)

regards Bob

/*** This is an example sketch for the Adafruit 1.8" SPI display. This library works with the Adafruit 1.8" TFT Breakout w/SD card ----> http://www.adafruit.com/products/358 as well as Adafruit raw 1.8" TFT display ----> http://www.adafruit.com/products/618

Check out the links above for our tutorials and wiring diagrams These displays use SPI to communicate, 4 or 5 pins are required to interface (RST is optional) Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit!

Written by Limor Fried/Ladyada for Adafruit Industries. MIT license, all text above must be included in any redistribution ****/

//#define sclk 13 //#define mosi 11 //#define cs 10

define cs 20

define dc 9

define rst 8 // you can also connect this to the Arduino reset

include // Core graphics library

include // Hardware-specific library

include

// Option 1: use any pins but a little slower //Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, mosi, sclk, rst);

// Option 2: must use the hardware SPI pins // (for UNO thats sclk = 13 and sid = 11) and pin 10 must be // an output. This is much faster - also required if you want // to use the microSD card (see the image drawing example) Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst, SPI_1_125MHZ); float p = 3.1415926;

void setup(void) { SerialUSB.begin(); SerialUSB.print("hello!");

// Our supplier changed the 1.8" display slightly after Jan 10, 2012 // so that the alignment of the TFT had to be shifted by a few pixels // this just means the init code is slightly different. Check the // color of the tab to see which init code to try. If the display is // cut off or has extra 'random' pixels on the top & left, try the // other option!

// If your TFT's plastic wrap has a Black Tab, use the following: tft.initR(INITR_BLACKTAB); // initialize a ST7735R chip, black tab // If your TFT's plastic wrap has a Red Tab, use the following: //tft.initR(INITR_REDTAB); // initialize a ST7735R chip, red tab // If your TFT's plastic wrap has a Green Tab, use the following: //tft.initR(INITR_GREENTAB); // initialize a ST7735R chip, green tab

SerialUSB.println("init");

uint16_t time = millis(); tft.fillScreen(ST7735_BLACK); time = millis() - time;

SerialUSB.println(time, DEC); delay(500);

// large block of text tft.fillScreen(ST7735_BLACK); testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST7735_WHITE); delay(1000);

// tft print function! tftPrintTest(); delay(4000);

// a single pixel tft.drawPixel(tft.width()/2, tft.height()/2, ST7735_GREEN); delay(500);

// line draw test testlines(ST7735_YELLOW); delay(500);

// optimized lines testfastlines(ST7735_RED, ST7735_BLUE); delay(500);

testdrawrects(ST7735_GREEN); delay(500);

testfillrects(ST7735_YELLOW, ST7735_MAGENTA); delay(500);

tft.fillScreen(ST7735_BLACK); testfillcircles(10, ST7735_BLUE); testdrawcircles(10, ST7735_WHITE); delay(500);

testroundrects(); delay(500);

testtriangles(); delay(500);

mediabuttons(); delay(500);

SerialUSB.println("done"); delay(1000); }

void loop() { //tft.invertDisplay(true); //delay(500); //tft.invertDisplay(false); //delay(500); // large block of text tft.fillScreen(ST7735_BLACK); testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST7735_WHITE); delay(1000);

// tft print function! tftPrintTest(); delay(4000);

// a single pixel tft.drawPixel(tft.width()/2, tft.height()/2, ST7735_GREEN); delay(500);

// line draw test testlines(ST7735_YELLOW); delay(500);

// optimized lines testfastlines(ST7735_RED, ST7735_BLUE); delay(500);

testdrawrects(ST7735_GREEN); delay(500);

testfillrects(ST7735_YELLOW, ST7735_MAGENTA); delay(500);

tft.fillScreen(ST7735_BLACK); testfillcircles(10, ST7735_BLUE); testdrawcircles(10, ST7735_WHITE); delay(500);

testroundrects(); delay(500);

testtriangles(); delay(500);

mediabuttons(); delay(500);

SerialUSB.println("done"); delay(1000); }

void testlines(uint16_t color) { tft.fillScreen(ST7735_BLACK); for (int16_t x=0; x < tft.width(); x+=6) { tft.drawLine(0, 0, x, tft.height()-1, color); } for (int16_t y=0; y < tft.height(); y+=6) { tft.drawLine(0, 0, tft.width()-1, y, color); }

tft.fillScreen(ST7735_BLACK); for (int16_t x=0; x < tft.width(); x+=6) { tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color); } for (int16_t y=0; y < tft.height(); y+=6) { tft.drawLine(tft.width()-1, 0, 0, y, color); }

tft.fillScreen(ST7735_BLACK); for (int16_t x=0; x < tft.width(); x+=6) { tft.drawLine(0, tft.height()-1, x, 0, color); } for (int16_t y=0; y < tft.height(); y+=6) { tft.drawLine(0, tft.height()-1, tft.width()-1, y, color); }

tft.fillScreen(ST7735_BLACK); for (int16_t x=0; x < tft.width(); x+=6) { tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color); } for (int16_t y=0; y < tft.height(); y+=6) { tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color); } }

void testdrawtext(char *text, uint16_t color) { tft.setCursor(0, 0); tft.setTextColor(color); tft.setTextWrap(true); tft.print(text); }

void testfastlines(uint16_t color1, uint16_t color2) { tft.fillScreen(ST7735_BLACK); for (int16_t y=0; y < tft.height(); y+=5) { tft.drawFastHLine(0, y, tft.width(), color1); } for (int16_t x=0; x < tft.width(); x+=5) { tft.drawFastVLine(x, 0, tft.height(), color2); } }

void testdrawrects(uint16_t color) { tft.fillScreen(ST7735_BLACK); for (int16_t x=0; x < tft.width(); x+=6) { tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color); } }

void testfillrects(uint16_t color1, uint16_t color2) { tft.fillScreen(ST7735_BLACK); for (int16_t x=tft.width()-1; x > 6; x-=6) { tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1); tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2); } }

void testfillcircles(uint8_t radius, uint16_t color) { for (int16_t x=radius; x < tft.width(); x+=radius_2) { for (int16_t y=radius; y < tft.height(); y+=radius_2) { tft.fillCircle(x, y, radius, color); } } }

void testdrawcircles(uint8_t radius, uint16_t color) { for (int16_t x=0; x < tft.width()+radius; x+=radius_2) { for (int16_t y=0; y < tft.height()+radius; y+=radius_2) { tft.drawCircle(x, y, radius, color); } } }

void testtriangles() { tft.fillScreen(ST7735_BLACK); int color = 0xF800; int t; int w = 63; int x = 159; int y = 0; int z = 127; for(t = 0 ; t <= 15; t+=1) { tft.drawTriangle(w, y, y, x, z, x, color); x-=4; y+=4; z-=4; color+=100; } }

void testroundrects() { tft.fillScreen(ST7735_BLACK); int color = 100; int i; int t; for(t = 0 ; t <= 4; t+=1) { int x = 0; int y = 0; int w = 127; int h = 159; for(i = 0 ; i <= 24; i+=1) { tft.drawRoundRect(x, y, w, h, 5, color); x+=2; y+=3; w-=4; h-=6; color+=1100; } color+=100; } }

void tftPrintTest() { tft.setTextWrap(false); tft.fillScreen(ST7735_BLACK); tft.setCursor(0, 30); tft.setTextColor(ST7735_RED); tft.setTextSize(1); tft.println("Hello World!"); tft.setTextColor(ST7735_YELLOW); tft.setTextSize(2); tft.println("Hello World!"); tft.setTextColor(ST7735_GREEN); tft.setTextSize(3); tft.println("Hello World!"); tft.setTextColor(ST7735_BLUE); tft.setTextSize(4); tft.print(1234.567); delay(1500); tft.setCursor(0, 0); tft.fillScreen(ST7735_BLACK); tft.setTextColor(ST7735_WHITE); tft.setTextSize(0); tft.println("Hello World!"); tft.setTextSize(1); tft.setTextColor(ST7735_GREEN); tft.print(p, 6); tft.println(" Want pi?"); tft.println(" "); tft.print(8675309, HEX); // print 8,675,309 out in HEX! tft.println(" Print HEX!"); tft.println(" "); tft.setTextColor(ST7735_WHITE); tft.println("Sketch has been"); tft.println("running for: "); tft.setTextColor(ST7735_MAGENTA); tft.print(millis() / 1000); tft.setTextColor(ST7735_WHITE); tft.print(" seconds."); }

void mediabuttons() { // play tft.fillScreen(ST7735_BLACK); tft.fillRoundRect(25, 10, 78, 60, 8, ST7735_WHITE); tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_RED); delay(500); // pause tft.fillRoundRect(25, 90, 78, 60, 8, ST7735_WHITE); tft.fillRoundRect(39, 98, 20, 45, 5, ST7735_GREEN); tft.fillRoundRect(69, 98, 20, 45, 5, ST7735_GREEN); delay(500); // play color tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_BLUE); delay(50); // pause color tft.fillRoundRect(39, 98, 20, 45, 5, ST7735_RED); tft.fillRoundRect(69, 98, 20, 45, 5, ST7735_RED); // play color tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_GREEN); }

-------end of pde ------------

robertkendrick commented 9 years ago

I just noticed that github screwed up the copy and paste slightly The pde I sent you has these 3 lines just under the defines:

include // Core graphics library

include // Hardware-specific library

include

they should be:

include // Core graphics library

include // Hardware-specific library

include

Don't know what happend there !!!!!!!

robertkendrick commented 9 years ago

Wow, it refuses anything in angular brackets. Must think it is HTML

So replace the lines with :

include "bk_GFX.h" // Core graphics library

include "Adafruit_ST7735.h" // Hardware-specific library

include "SPI.h"

redafenj commented 9 years ago

Hi Robert,

Thanks for your quick reply.

I tried your pde files with correct headers, but unfortunatly it does not compile.

So I patch it. There was a reference to radius2 not defined and also a tft constructor not valid. error: no matching function for call to 'Adafruit_ST7735::Adafruit_ST7735(int, int, int, SPIFrequency)

So I used Adafruit_ST7735(cs, dc, rst)

But still notthing displayed on the display...

I tried both GREEN and REDTAB and BLACK is not defined

Regards Reda

2015-04-05 20:32 GMT+02:00 robertkendrick notifications@github.com:

Wow, it refuses anything in angular brackets. Must think it is HTML

So replace the lines with :

include "bk_GFX.h" // Core graphics library

include "Adafruit_ST7735.h" // Hardware-specific library

include "SPI.h"

— Reply to this email directly or view it on GitHub https://github.com/robertkendrick/STM32M3_ST7735_Driver/issues/2#issuecomment-89829813 .

robertkendrick commented 9 years ago

Send me your email address and I will send you an archive with the tested pde, ST7735 and GFX libs.

redafenj commented 9 years ago

Hi Robert,

My email address is reda.fenjiro@gmail.com

Thanks a lot

Regards Reda

2015-04-07 1:42 GMT+02:00 robertkendrick notifications@github.com:

Send me your email address and I will send you an archive with the tested pde, ST7735 and GFX libs.

— Reply to this email directly or view it on GitHub https://github.com/robertkendrick/STM32M3_ST7735_Driver/issues/2#issuecomment-90286098 .