Has anyone got ST7735 based LCDs working under STM32duino such as this one 1.8 inch 1.8″ TFT LCD Display module ST7735S 128×160 51/AVR/STM32/ARM 8/16 bit?

https://github.com/PaulStoffregen/Adafr … t_ST7735.h
that has teensy support, so places you may need to probably change are already marked:-)
have a look at ILI9341_STM32 (builtin) for some typedefs switching as well
and of course
https://github.com/adafruit/Adafruit-ST7735-Library/
i’ve currently got the constructors and the spi setup wrong in my dedicated stm32 port of PCA8544:-(
is anything defined to help with variants? i.e. 1, 2 or 3 spi setups; modify constructors and / or add an explicit select function?
later i think with default settings in begin()?
hth
stephen
I have been working on my STM32 Smart Watch project and I am satisfied with ST7735S, 1.44′ LCD with 128×128 resolution. I examined Adafruit’s libraries, as well as Henning Karlsen’s UTFT files (They are both very generous contributors about LCD stuff). I also encountered with other works with ST7735 and ILI9340 which were helpful to establish successful SPI communication with LCD.
My board is STM32F103C8, one of the most common one. For now, I want to share the most important parts you may need if it helps. I am planning to create a GitHub rep. for all code. I gladly help you for any question.
You need those in setup:
csport = portOutputRegister(digitalPinToPort(TFT_CS));
cspinmask = digitalPinToBitMask(TFT_CS);
dcport = portOutputRegister(digitalPinToPort(TFT_RS));
dcpinmask = digitalPinToBitMask(TFT_RS);
SPI.begin();
SPI.setDataMode(SPI_MODE0);
SPI.setBitOrder(MSBFIRST);
SPI.setClockDivider(SPI_CLOCK_DIV2);
My LCD finally arrived from China I took the Adafruit ST7735 library, and adapted it for the STM32. You can find it here: https://github.com/KenjutsuGH/Adafruit-ST7735-Library
I only tested hardware SPI with the LCD connected as follows:
SCK --> SCK1 --> PA5
SDA --> MOSI1 --> PA7
A0 --> PA3
RESET --> PA4
CS --> PA2
To test for any speed improvements, I modified graphicstest.ino to do very simple timing on calling the test functions. Some results:
With HW SPI and no DMA:
Hello! ST7735 TFT Test
Initialized
48
Benchmark Time (microseconds)
Draw text 101392
Print Test 1640352
Line Draw Test 891722
Fast Line Draw Test 68545
Draw Rects Test 62890
Test Fill Rects 349202
Test Fill circles 77795
Test Draw Circles 74407
Test Round Rec 196256
Test Triangles 154353
Test Media Buttons 1146629
done

- Improvement.jpg (107.51 KiB) Viewed 8718 times

My particular display needs initialized using the INITR_144GREENTAB constant, which in Adafruit_ST7735.cpp sets colstart = 2 and rowstart = 3. I discovered however, that these offset values were being ignored, causing 0,0 to be off the top left corner of the display, and leaving several rows and colums of random pixels along the right side and bottom.
Digging a little deeper, I discovered that in Adafruit_ST7735.cpp’s setAddrWindow() function, the colstart and rowstart values weren’t being applied to the SPI section of the code:
void Adafruit_ST7735::setAddrWindow(uint8_t x0, uint8_t y0, uint8_t x1,
uint8_t y1) {
if (hwSPI) {
#if defined (__STM32F1__)
writecommand(ST7735_CASET);
*rsport |= rspinmask;
*csport &= ~cspinmask;
SPI.setDataSize (SPI_CR1_DFF);
//SPI.write(x0); //Original
SPI.write(x0+colstart); //Revised code including colstart offset
//SPI.write(x1); //Original
SPI.write(x1+colstart); //Revised code including colstart offset
writecommand(ST7735_RASET);
*rsport |= rspinmask;
*csport &= ~cspinmask;
//SPI.write(y0); //Original
SPI.write(y0+rowstart); //Revised code including rowstart offset
//SPI.write(y1); //Original
SPI.write(y1+rowstart); //Revised code including rowstart offset
SPI.setDataSize(0);
writecommand(ST7735_RAMWR);
#endif
} else {
writecommand(ST7735_CASET); // Column addr set
writedata(0x00);
writedata(x0+colstart); // XSTART
writedata(0x00);
writedata(x1+colstart); // XEND
writecommand(ST7735_RASET); // Row addr set
writedata(0x00);
writedata(y0+rowstart); // YSTART
writedata(0x00);
writedata(y1+rowstart); // YEND
writecommand(ST7735_RAMWR); // write to RAM
} // end else
}

I will test and update later today.

https://github.com/KenjutsuGH/Adafruit-ST7735-Library
and installed via Arduino IDE’s ‘install library .zip’.
I tried to compile ‘graphicstest’ but there are errors. Here’s the error message. Any ideas ?
Arduino: 1.6.9 (Windows 7), Board: "Generic STM32F103C series, STM32F103C8 (20k RAM. 64k Flash), STLink"
"C:\Users\mika\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1/bin/arm-none-eabi-ar" rcs "C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\core\core.a" "C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\core\stm32f1\wirish_debug.cpp.o"
"C:\Users\mika\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1/bin/arm-none-eabi-ar" rcs "C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\core\core.a" "C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\core\stm32f1\wirish_digital_f1.cpp.o"
"C:\Users\mika\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1/bin/arm-none-eabi-g++" -Os -Wl,--gc-sections -mcpu=cortex-m3 "-TC:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\variants\generic_stm32f103c/ld/jtag_c8.ld" "-Wl,-Map,C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp/graphicstest.ino.map" "-LC:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\variants\generic_stm32f103c/ld" -o "C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp/graphicstest.ino.elf" "-LC:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp" -lm -lgcc -mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--unresolved-symbols=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group "C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\sketch\graphicstest.ino.cpp.o" "C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\glcdfont.c.o" "C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o" "C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit-ST7735-Library-master\Adafruit_ST7735.cpp.o" "C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Font16.c.o" "C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Font32.c.o" "C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Font64.c.o" "C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Font7s.c.o" "C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\glcdfont.c.o" "C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o" "C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\SPI\SPI.cpp.o" "C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\core\wirish\start.S.o" "C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\core\wirish\start_c.c.o" "C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\core\wirish\syscalls.c.o" "C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\core\board.cpp.o" "C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\core\wirish\boards.cpp.o" "C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\core\wirish\boards_setup.cpp.o" "C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp/core\core.a" -Wl,--end-group
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::invertDisplay(bool)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:185: multiple definition of `Adafruit_GFX::drawLine(short, short, short, short, unsigned short)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:172: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::drawRoundRect(short, short, short, short, short, unsigned short)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:227: multiple definition of `Adafruit_GFX::drawRect(short, short, short, short, unsigned short)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:213: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::drawUnicode(unsigned short, short, short, short)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:235: multiple definition of `Adafruit_GFX::drawFastVLine(short, short, short, unsigned short)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:221: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::drawFastHLine(short, short, short, unsigned short)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:241: multiple definition of `Adafruit_GFX::drawFastHLine(short, short, short, unsigned short)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:227: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::fillRect(short, short, short, short, unsigned short)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:247: multiple definition of `Adafruit_GFX::fillRect(short, short, short, short, unsigned short)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:233: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::fillScreen(unsigned short)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:254: multiple definition of `Adafruit_GFX::fillScreen(unsigned short)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:240: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::invertDisplay(bool)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:498: multiple definition of `Adafruit_GFX::invertDisplay(bool)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:818: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::Adafruit_GFX(short, short)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:62: multiple definition of `Adafruit_GFX::Adafruit_GFX(short, short)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:48: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::Adafruit_GFX(short, short)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:62: multiple definition of `Adafruit_GFX::Adafruit_GFX(short, short)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:48: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::drawCircle(short, short, short, unsigned short)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:76: multiple definition of `Adafruit_GFX::drawCircle(short, short, short, unsigned short)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:64: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::drawCircleHelper(short, short, short, unsigned char, unsigned short)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:110: multiple definition of `Adafruit_GFX::drawCircleHelper(short, short, short, unsigned char, unsigned short)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:98: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::fillCircleHelper(short, short, short, unsigned char, short, unsigned short)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:153: multiple definition of `Adafruit_GFX::fillCircleHelper(short, short, short, unsigned char, short, unsigned short)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:141: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::fillCircle(short, short, short, unsigned short)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:146: multiple definition of `Adafruit_GFX::fillCircle(short, short, short, unsigned short)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:134: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::drawRoundRect(short, short, short, short, short, unsigned short)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:260: multiple definition of `Adafruit_GFX::drawRoundRect(short, short, short, short, short, unsigned short)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:246: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::fillRoundRect(short, short, short, short, short, unsigned short)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:275: multiple definition of `Adafruit_GFX::fillRoundRect(short, short, short, short, short, unsigned short)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:261: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::drawTriangle(short, short, short, short, short, short, unsigned short)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:287: multiple definition of `Adafruit_GFX::drawTriangle(short, short, short, short, short, short, unsigned short)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:272: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::fillTriangle(short, short, short, short, short, short, unsigned short)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:296: multiple definition of `Adafruit_GFX::fillTriangle(short, short, short, short, short, short, unsigned short)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:280: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::drawBitmap(short, short, unsigned char const*, short, short, unsigned short)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:373: multiple definition of `Adafruit_GFX::drawBitmap(short, short, unsigned char const*, short, short, unsigned short)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:357: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::drawChar(short, short, unsigned char, unsigned short, unsigned short, unsigned char)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:411: multiple definition of `Adafruit_GFX::drawChar(short, short, unsigned char, unsigned short, unsigned short, unsigned char)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:464: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::write(unsigned char)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:387: multiple definition of `Adafruit_GFX::write(unsigned char)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:408: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::setCursor(short, short)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:446: multiple definition of `Adafruit_GFX::setCursor(short, short)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:554: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::setTextSize(unsigned char)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:451: multiple definition of `Adafruit_GFX::setTextSize(unsigned char)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:567: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::setTextColor(unsigned short)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:457: multiple definition of `Adafruit_GFX::setTextColor(unsigned short)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:573: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::setTextColor(unsigned short, unsigned short)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:461: multiple definition of `Adafruit_GFX::setTextColor(unsigned short, unsigned short)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:577: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::setTextWrap(bool)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:466: multiple definition of `Adafruit_GFX::setTextWrap(bool)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:582: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o: In function `Adafruit_GFX::setRotation(unsigned char)':
C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS/Adafruit_GFX_AS.cpp:474: multiple definition of `Adafruit_GFX::setRotation(unsigned char)'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library/Adafruit_GFX.cpp:590: first defined here
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_AS\Adafruit_GFX_AS.cpp.o:(.rodata._ZTV12Adafruit_GFX+0x0): multiple definition of `vtable for Adafruit_GFX'
C:\Users\mika\AppData\Local\Temp\build5684cb2874fc56fde03f9ed7fa1bbd00.tmp\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp.o:(.rodata._ZTV12Adafruit_GFX+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
Using library Adafruit_GFX_Library at version 1.1 in folder: C:\Users\mika\Documents\Arduino\libraries\Adafruit_GFX_Library
Using library Adafruit-ST7735-Library-master at version 1.0.4 in folder: C:\Users\mika\Documents\Arduino\libraries\Adafruit-ST7735-Library-master
Using library Adafruit_GFX_AS in folder: C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Adafruit_GFX_AS (legacy)
Using library SPI at version 1.0 in folder: C:\Users\mika\Documents\Arduino\hardware\Arduino_STM32\STM32F1\libraries\SPI
exit status 1
Error compiling for board Generic STM32F103C series.
Move away the oldest one (keep it as backup), close/restart IDE and try to compile again.
Move away the oldest one (keep it as backup), close/restart IDE and try to compile again.
Should be like that:
......
#if defined (__STM32F1__)
setAddrWindow(1, 1, _width, _height);
*rsport |= rspinmask;
*csport &= ~cspinmask;
SPI.setDataSize (SPI_CR1_DFF); // Set spi 16bit mode
lineBuffer[0] = color;
if ((_width*_height) <= 65535) {
SPI.dmaSend(lineBuffer, (_width*_height), 0);
}
else {
SPI.dmaSend(lineBuffer, (65535), 0);
SPI.dmaSend(lineBuffer, ((_width*_height) - 65535), 0);
}
SPI.setDataSize (0);
#endif
....
Back in October of 2015, I ported the AdaFruit ST7735 library to STM32duino. I got it working with my display, and never updated the library again.
Recently, I saw several posts on the forum of members trying to get their ST7735 LCDs working under STM32duino. Some referenced my port which did not work for them. Unfortunately, I could not assist, since my only ST7735 display was missing. I got some time today to search for it, and luckily I found it.
The first thing I did was to test it with my ported library. I used both Arduino 1.8.5 and PlatformIO/Atom 1.28.1. I connected the LCD as follows for software SPI, or “Option 2” as AdaFruit refers to it in their example:
LCD pin BP pin
3 – CS PB11
4 – RESET PB10
5 – A0(D/C) PB1
6 – SDA(MOSI) PA1
7 – SCK PA0