Browse Source

Экран работает нормально по SPI. Переношу код в oled_common.

unknown 1 month ago
parent
commit
a7ab4eef0f

+ 2 - 1
desk/libs/thirdparty/oled_ssd1327/GFX_SSD1327.c

@@ -10,7 +10,8 @@
 #include "main.h"
 #include "GFX_SSD1327.h"
 
-#include "OLED_SSD1327.h"
+#include "oled_common.h"
+#include "oled_config.h"
 
 #if USING_LINES == 1
 #include <stdlib.h> // for abs() function

+ 1 - 1
desk/libs/thirdparty/oled_ssd1327/GFX_SSD1327.h

@@ -25,7 +25,7 @@
 #define AVR_USING 0
 #define STM32_USING 1
 
-#define GFX_DrawPixel(x,y,color) SSD1327_DrawPixel(x,y,color)
+#define GFX_DrawPixel(x,y,color) oled_draw_pixel(x,y,color)
 #define WIDTH SSD1327_LCDWIDTH
 #define HEIGHT SSD1327_LCDHEIGHT
 #define PIXEL_BLACK	BLACK

+ 0 - 386
desk/libs/thirdparty/oled_ssd1327/OLED_SSD1327.c

@@ -1,386 +0,0 @@
-/*
- * OLED_SSD1327.c
- *
- *  The MIT License.
- *  Created on: 16.07.2020
- *      Author: Mateusz Salamon
- *      www.msalamon.pl
- *      mateusz@msalamon.pl
- */
-
-#include "main.h"
-#include "OLED_SSD1327.h"
-#include "string.h"
-#include "oled_common.h"   
-
-#ifdef SSD1327_I2C_CONTROL
-I2C_HandleTypeDef *ssd1337_i2c;
-#endif
-#ifdef SSD1327_SPI_CONTROL
-SPI_HandleTypeDef *ssd1337_spi;
-#endif
-#define SSD1327_BUFFERSIZE	(SSD1327_LCDHEIGHT * SSD1327_LCDWIDTH / 2)
-uint8_t buffer[SSD1327_BUFFERSIZE];
-
-void SSD1327_Command(uint8_t com)
-{
-    //oled_command(com);
-#if 0  
-#ifdef SSD1327_I2C_CONTROL
-	// I2C
-	HAL_I2C_Mem_Write(ssd1337_i2c, SSD1327_I2C_ADDRESS, 0x00, 1, &com, sizeof(com), 100);
-#endif
-#ifdef SSD1327_SPI_CONTROL
-	//SPI
-	HAL_GPIO_WritePin(SSD1327_DC_GPIO_Port, SSD1327_DC_Pin, GPIO_PIN_RESET);
-#ifndef SPI_CS_HARDWARE_CONTROL
-	HAL_GPIO_WritePin(SSD1327_CS_GPIO_Port, SSD1327_CS_Pin, GPIO_PIN_RESET);
-#endif
-	HAL_SPI_Transmit(ssd1337_spi, &com, 1, 10);
-#ifndef SPI_CS_HARDWARE_CONTROL
-	HAL_GPIO_WritePin(SSD1327_CS_GPIO_Port, SSD1327_CS_Pin, GPIO_PIN_SET);
-#endif
-#endif
-#endif    
-}
-
-void SSD1327_Data(uint8_t dat)
-{
-    //oled_data(dat);
-#if 0  
-#ifdef SSD1327_I2C_CONTROL
-	// I2C
-	HAL_I2C_Mem_Write(ssd1337_i2c, SSD1327_I2C_ADDRESS, 0x40, 1, &dat, sizeof(dat), 100);
-#endif
-#ifdef SSD1327_SPI_CONTROL
-	// SPI
-	HAL_GPIO_WritePin(SSD1327_DC_GPIO_Port, SSD1327_DC_Pin, GPIO_PIN_SET);
-#ifndef SPI_CS_HARDWARE_CONTROL
-	HAL_GPIO_WritePin(SSD1327_CS_GPIO_Port, SSD1327_CS_Pin, GPIO_PIN_RESET);
-#endif
-	HAL_SPI_Transmit(ssd1337_spi, &dat, 1, 10);
-#ifndef SPI_CS_HARDWARE_CONTROL
-	HAL_GPIO_WritePin(SSD1327_CS_GPIO_Port, SSD1327_CS_Pin, GPIO_PIN_SET);
-#endif
-#endif
-#endif    
-}
-
-#if defined(SSD1327_SPI_CONTROL) || defined(SSD1327_RESET_USE)
-void SSD1327_Reset(void)
-{
-    //oled_reset();
-#if 0  
-	HAL_GPIO_WritePin(SSD1327_RESET_GPIO_Port, SSD1327_RESET_Pin, GPIO_PIN_RESET);
-	HAL_Delay(5);
-	HAL_GPIO_WritePin(SSD1327_RESET_GPIO_Port, SSD1327_RESET_Pin, GPIO_PIN_SET);
-#endif    
-}
-#endif
-
-//
-// Configuration functions
-//
-void SSD1327_InvertColors(uint8_t Invert)
-{
-	//SSD1327_Command(Invert ? SSD1327_INVERTDISPLAY : SSD1327_NORMALDISPLAY);
-}
-
-void SSD1327_RotateDisplay(uint8_t Rotate)
-{
-#if 0  
-	if(Rotate > 1) Rotate = 1;
-
-	SSD1327_Command(0xA0 | (0x01 & Rotate));  // Set Segment Re-Map Default
-							// 0xA0 (0x00) => column Address 0 mapped to 127
-                			// 0xA1 (0x01) => Column Address 127 mapped to 0
-
-	SSD1327_Command(0xC0 | (0x08 & (Rotate<<3)));  // Set COM Output Scan Direction
-							// 0xC0	(0x00) => normal mode (RESET) Scan from COM0 to COM[N-1];Where N is the Multiplex ratio.
-							// 0xC8	(0xC8) => remapped mode. Scan from COM[N-1] to COM0;;Where N is the Multiplex ratio.
-#endif    
-}
-
-void SSD1327_DisplayON(uint8_t On)
-{
-	//SSD1327_Command(On ? SSD1327_DISPLAYON : SSD1327_DISPLAYOFF);
-}
-
-void SSD1327_SetContrast(uint8_t Contrast)
-{
-#if 0  
-	SSD1327_Command(SSD1327_SETCONTRASTCURRENT);	// Set Contrast Control
-	SSD1327_Command(Contrast);
-#endif
-}
-
-#if GRAPHIC_ACCELERATION_COMMANDS == 1
-//
-// Graphic Acceleration Command
-//
-void SSD1327_StartScrollRight(uint8_t StartPage, uint8_t EndPage, uint8_t Speed)
-{
-#if 0  
-	SSD1327_Command(SSD1327_RIGHT_HORIZONTAL_SCROLL);
-	SSD1327_Command(0x00);
-	SSD1327_Command(StartPage);
-	SSD1327_Command(Speed);
-	SSD1327_Command(EndPage);
-	SSD1327_Command(SSD1327_ACTIVATE_SCROLL);
-#endif
-}
-
-void SSD1327_StartScrollLeft(uint8_t StartPage, uint8_t EndPage, uint8_t Speed)
-{
-#if 0  
-	SSD1327_Command(SSD1327_LEFT_HORIZONTAL_SCROLL);
-	SSD1327_Command(0x00);
-	SSD1327_Command(StartPage);
-	SSD1327_Command(Speed);
-	SSD1327_Command(EndPage);
-	SSD1327_Command(SSD1327_ACTIVATE_SCROLL);
-#endif
-}
-
-void SSD1327_StopScroll(void)
-{
-	//SSD1327_Command(SSD1327_DEACTIVATE_SCROLL);
-}
-#endif
-
-//
-// Initialization
-//
-void SSD1327_Init(void)
-{
-#if 0
-    SSD1327_Command(SSD1327_DISPLAYOFF);  // Display Off
-    
-    SSD1327_Command(SSD1327_SETCOLUMNADDRESS);
-	SSD1327_Command(0x00);
-    SSD1327_Command(0x7F);
-
-	SSD1327_Command(SSD1327_SETROWADDRESS);
-	SSD1327_Command(0x00);
-	SSD1327_Command(0x7F);
-    
-    SSD1327_SetContrast(0x7F);
-    
-    SSD1327_Command(SSD1327_SEGREMAP);
-	SSD1327_Command(0x51);
-    
-    SSD1327_Command(SSD1327_SETDISPLAYSTARTLINE);
-	SSD1327_Command(0x00);
-    
-    SSD1327_Command(SSD1327_SETDISPLAYOFFSET);
-    SSD1327_Command(0x0);
-    
-    SSD1327_Command(SSD1327_DISPLAYALLON_RESUME);  // Entire Display ON
-    SSD1327_Command(SSD1327_SETMULTIPLEX);
-	SSD1327_Command(0x7F);
-    
-    SSD1327_Command(SSD1327_SETPHASELENGTH);
-	SSD1327_Command(0xF1);  // !
-    
-    SSD1327_Command(SSD1327_SETFRONTCLOCKDIVIDER_OSCILLATORFREQUENCY);
-	SSD1327_Command(0x00);
-    
-    SSD1327_Command(SSD1327_FUNCTIONSELECTIONA); // !
-	SSD1327_Command(0x01); // !
-    
-    SSD1327_Command(SSD1327_SETSECONDPRECHARGEPERTIOD);
-	SSD1327_Command(0x0F); // !
-    
-    SSD1327_Command(SSD1327_SETSETVCOMVOLTAGE);
-	SSD1327_Command(0x0F); // !
-    
-    SSD1327_Command(SSD1327_SETPRECHARGEVOLTAGE);
-	SSD1327_Command(0x08); // !
-    
-    SSD1327_Command(SSD1327_FUNCTIONSELECTIONB);
-	SSD1327_Command(0x62);
-    
-    SSD1327_Command(SSD1327_SETCOMMANDLOCK); // !
-	SSD1327_Command(0x12);  // !
-    
-    SSD1327_DisplayON(1);
-    
-#endif
-      
-#if 0
-	SSD1327_Command(SSD1327_DISPLAYOFF);  // Display Off
-
-	SSD1327_Command(SSD1327_SETMULTIPLEX);
-	SSD1327_Command(0x7F);
-
-	SSD1327_Command(SSD1327_SETDISPLAYSTARTLINE);
-	SSD1327_Command(0x00);
-
-	SSD1327_Command(SSD1327_SETDISPLAYOFFSET);
-    SSD1327_Command(0x0);
-
-	SSD1327_Command(SSD1327_SEGREMAP);
-	SSD1327_Command(0x51);
-
-	//SSD1327_SetContrast(0x7F);
-    SSD1327_SetContrast(0xFF);
-
-	SSD1327_Command(SSD1327_SETPHASELENGTH);
-	SSD1327_Command(0x22);
-
-	SSD1327_Command(SSD1327_SETFRONTCLOCKDIVIDER_OSCILLATORFREQUENCY);
-	SSD1327_Command(0x50);
-
-	SSD1327_Command(SSD1327_SELECTDEFAULTLINEARGRAYSCALETABLE);
-
-	SSD1327_Command(SSD1327_SETPRECHARGEVOLTAGE);
-	SSD1327_Command(0x10);
-
-	SSD1327_Command(SSD1327_SETSETVCOMVOLTAGE);
-	SSD1327_Command(0x05);
-
-	SSD1327_Command(SSD1327_SETSECONDPRECHARGEPERTIOD);
-	SSD1327_Command(0x0a);
-
-	SSD1327_Command(SSD1327_FUNCTIONSELECTIONB);
-	SSD1327_Command(0x62);
-
-	SSD1327_Command(SSD1327_SETCOLUMNADDRESS);
-	SSD1327_Command(0x00);
-	//SSD1327_Command(0x3F);
-    SSD1327_Command(0x7F);
-
-	SSD1327_Command(SSD1327_SETROWADDRESS);
-	SSD1327_Command(0x00);
-	SSD1327_Command(0x7F);
-
-	SSD1327_Command(SSD1327_NORMALDISPLAY);  // Set Normal Display
-
-	SSD1327_Command(SSD1327_DISPLAYALLON_RESUME);  // Entire Display ON
-
-#if GRAPHIC_ACCELERATION_COMMANDS == 1
-	SSD1327_StopScroll();
-#endif
-
-	SSD1327_DisplayON(1);
-#endif    
-}
-
-#ifdef SSD1327_I2C_CONTROL
-void SSD1327_I2cInit(I2C_HandleTypeDef *i2c)
-{
-	ssd1337_i2c = i2c;
-
-	SSD1327_Init();
-}
-#endif
-
-#ifdef SSD1327_SPI_CONTROL
-void SSD1327_SpiInit(SPI_HandleTypeDef *spi)
-{
-	ssd1337_spi = spi;
-
-#if defined(SSD1327_RESET_USE)
-	SSD1327_Reset();
-#endif
-	SSD1327_Init();
-}
-#endif
-
-//
-// Draw pixel in the buffer
-//
-void SSD1327_DrawPixel(int16_t x, int16_t y, uint8_t Color)
-{
-	 if ((x < 0) || (x >= SSD1327_LCDWIDTH) || (y < 0) || (y >= SSD1327_LCDHEIGHT))
-		 return;
-
-	 uint8_t SelectedCell = buffer[x/2 + y*(SSD1327_LCDWIDTH/2)];
-
-	 if(x % 2)
-	 {
-		 SelectedCell &= ~(0x0F);
-		 SelectedCell |= (0x0F & Color);
-	 }
-	 else
-	 {
-		 SelectedCell &= ~(0xF0);
-		 SelectedCell |= (0xF0 & (Color<<4));
-	 }
-
-	 buffer[x/2 + y*(SSD1327_LCDWIDTH/2)] = SelectedCell;
-}
-
-//
-// Clear the buffer
-//
-void SSD1327_Clear(uint8_t Color)
-{
-	if(Color > WHITE) Color = WHITE;
-
-	memset(buffer, (Color << 4 | Color), SSD1327_BUFFERSIZE);
-}
-
-//
-// Send buffer to OLDE GCRAM
-//
-void SSD1327_Display(void)
-{
-    //oled_display();
-}
-
-//
-// Display Bitmap directly on screen
-//
-void SSD1327_Bitmap(uint8_t *bitmap)
-{
-    //oled_bitmap(bitmap);
-    
-#if 0  
-	SSD1327_Command(0x22);
-	SSD1327_Command(0x00);
-	SSD1327_Command(0x07);
-#ifdef SSD1327_I2C_CONTROL
-#ifdef SSD1327_I2C_DMA_ENABLE
-	if(ssd1337_i2c->hdmatx->State == HAL_DMA_STATE_READY)
-	{
-		HAL_I2C_Mem_Write_DMA(ssd1337_i2c, SSD1327_I2C_ADDRESS, 0x40, 1, bitmap, (SSD1327_LCDHEIGHT * SSD1327_LCDWIDTH / 8));
-	}
-#else
-	HAL_I2C_Mem_Write(ssd1337_i2c, SSD1327_I2C_ADDRESS, 0x40, 1, bitmap, (SSD1327_LCDHEIGHT * SSD1327_LCDWIDTH / 8), 100);
-#endif
-#endif
-#ifdef SSD1327_SPI_CONTROL
-#ifdef SSD1327_SPI_DMA_ENABLE
-	HAL_GPIO_WritePin(SSD1327_DC_GPIO_Port, SSD1327_DC_Pin, GPIO_PIN_SET);
-#ifndef SPI_CS_HARDWARE_CONTROL
-	HAL_GPIO_WritePin(SSD1327_CS_GPIO_Port, SSD1327_CS_Pin, GPIO_PIN_RESET);
-#endif
-	if(ssd1337_spi->hdmatx->State == HAL_DMA_STATE_READY)
-	{
-		HAL_SPI_Transmit_DMA(ssd1337_spi, bitmap, (SSD1327_LCDHEIGHT * SSD1327_LCDWIDTH / 8));
-	}
-#else
-	HAL_GPIO_WritePin(SSD1327_DC_GPIO_Port, SSD1327_DC_Pin, GPIO_PIN_SET);
-#ifndef SPI_CS_HARDWARE_CONTROL
-	HAL_GPIO_WritePin(SSD1327_CS_GPIO_Port, SSD1327_CS_Pin, GPIO_PIN_RESET);
-#endif
-	HAL_SPI_Transmit(ssd1337_spi, bitmap, (SSD1327_LCDHEIGHT * SSD1327_LCDWIDTH / 8), 100);
-#ifndef SPI_CS_HARDWARE_CONTROL
-	HAL_GPIO_WritePin(SSD1327_CS_GPIO_Port, SSD1327_CS_Pin, GPIO_PIN_SET);
-#endif
-#endif
-#endif
-#endif    
-}
-
-#if defined(SSD1327_SPI_CONTROL) && !defined(SSD1327_SPI_DMA_ENABLE) && !defined(SPI_CS_HARDWARE_CONTROL)
-void SSD1327_DmaEndCallback(SPI_HandleTypeDef *hspi)
-{
-	if(hspi == ssd1337_spi)
-	{
-		HAL_GPIO_WritePin(SSD1327_CS_GPIO_Port, SSD1327_CS_Pin, GPIO_PIN_SET);
-	}
-}
-#endif
-

+ 0 - 168
desk/libs/thirdparty/oled_ssd1327/OLED_SSD1327.h

@@ -1,168 +0,0 @@
-/*
- * OLED_SSD1327.h
- *
- *  The MIT License.
- *  Created on: 16.07.2020
- *      Author: Mateusz Salamon
- *      www.msalamon.pl
- *      mateusz@msalamon.pl
- */
-
-#ifndef OLED_SSD1327_H_
-#define OLED_SSD1327_H_
-
-#include "stm32g4xx_hal.h"   
-   
-/*
- *
- *    SETTINGS
- *
- *    Please set only one interface. It won't work with both one time.
- *
- */
-#define SSD1327_SPI_CONTROL
-//#define SSD1327_I2C_CONTROL
-
-#ifdef SSD1327_I2C_CONTROL
-//#define SSD1327_I2C_DMA_ENABLE
-#define SSD1327_I2C_ADDRESS   (0x3D << 1)
-#endif
-#ifdef SSD1327_SPI_CONTROL
-#define SSD1327_RESET_USE
-#define SSD1327_SPI_DMA_ENABLE
-#define SPI_CS_HARDWARE_CONTROL
-#endif
-
-//
-// Resolution
-//
-#define SSD1327_LCDWIDTH                  128
-#define SSD1327_LCDHEIGHT                 128 //96
-
-/*
- * 		Please set what functionality you want to use.
- * 		Some functions need other functionalities. It should works automatically.
- *
- * 		1 - will be compiled
- * 		0 - won't be compiled
- */
-#define GRAPHIC_ACCELERATION_COMMANDS 0
-
-/****************************************************************/
-
-//
-// Commands
-//
-/*
- Эта трёхбайтовая команда определяет начальный и конечный адреса столбцов 
-в ОЗУ данных отображения. Эта
-команда также устанавливает указатель адреса столбца на начальный адрес столбца.
- Этот указатель используется для определения
-текущего адреса столбца для чтения/записи в ОЗУ данных графического отображения. 
- Если режим горизонтального увеличения адреса включён командой A0h, после 
-завершения чтения/записи данных одного столбца он автоматически увеличивается до
-адреса следующего столбца. Всякий раз, когда указатель адреса столбца завершает 
-доступ к адресу конечного столбца, он сбрасывается обратно на адрес начального 
-столбца, а адрес строки увеличивается до следующей строки.
-*/
-#define SSD1327_SETCOLUMNADDRESS	0x15
-
-
-#define SSD1327_SETROWADDRESS		0x75
-#define SSD1327_SETCONTRASTCURRENT 	0x81
-#define SSD1327_NOP					0x84
-#define SSD1327_SEGREMAP			0xA0
-#define SSD1327_SETDISPLAYSTARTLINE	0xA1
-#define SSD1327_SETDISPLAYOFFSET	0xA2
-#define SSD1327_DISPLAYALLON_RESUME 0xA4
-#define SSD1327_DISPLAYALLON 		0xA5
-#define SSD1327_NORMALDISPLAY 		0xA6
-#define SSD1327_INVERTDISPLAY 		0xA7
-#define SSD1327_SETMULTIPLEX		0xA8
-#define SSD1327_FUNCTIONSELECTIONA	0xAB
-#define SSD1327_DISPLAYOFF			0xAE
-#define SSD1327_DISPLAYON			0xAF
-#define SSD1327_SETPHASELENGTH		0xB1
-#define SSD1327_SETFRONTCLOCKDIVIDER_OSCILLATORFREQUENCY 0xB3
-#define SSD1327_SETGPIO				0xB5
-#define SSD1327_SETSECONDPRECHARGEPERTIOD	0xB6
-#define SSD1327_SETGRAYSCALETABLE	0xB8
-#define SSD1327_SELECTDEFAULTLINEARGRAYSCALETABLE	0xB9
-#define SSD1327_SETPRECHARGEVOLTAGE	0xBC
-#define SSD1327_SETSETVCOMVOLTAGE	0xBE
-#define SSD1327_FUNCTIONSELECTIONB	0xD5
-#define SSD1327_SETCOMMANDLOCK		0xFD
-
-//
-// Scrolling #defines
-//
-#define SSD1327_ACTIVATE_SCROLL			0x2F
-#define SSD1327_DEACTIVATE_SCROLL		0x2E
-#define SSD1327_RIGHT_HORIZONTAL_SCROLL	0x26
-#define SSD1327_LEFT_HORIZONTAL_SCROLL	0x27
-
-//
-// Colors
-//
-#define BLACK 0
-// Grays between
-#define WHITE 15
-
-//
-// Scrolling enums
-//
-typedef enum
-{
-	SCROLL_EVERY_5_FRAMES,
-	SCROLL_EVERY_64_FRAMES,
-	SCROLL_EVERY_128_FRAMES,
-	SCROLL_EVERY_256_FRAMES,
-	SCROLL_EVERY_3_FRAMES,
-	SCROLL_EVERY_4_FRAMES,
-	SCROLL_EVERY_25_FRAMES,
-	SCROLL_EVERY_2_FRAMES,
-} scroll_horizontal_speed;
-//
-// Functions
-//
-#ifdef SSD1327_I2C_CONTROL
-void SSD1327_I2cInit(I2C_HandleTypeDef *i2c);
-#endif
-
-#if defined(SSD1327_SPI_CONTROL)
-void SSD1327_SpiInit(SPI_HandleTypeDef *spi);
-#endif
-
-#if defined(SSD1327_SPI_CONTROL) && !defined(SSD1327_SPI_DMA_ENABLE)
-void SSD1327_DmaEndCallback(SPI_HandleTypeDef *hspi);
-#endif
-
-//
-// Configuration
-//
-void SSD1327_DisplayON(uint8_t On);
-void SSD1327_InvertColors(uint8_t Invert);
-void SSD1327_RotateDisplay(uint8_t Rotate);
-void SSD1327_SetContrast(uint8_t Contrast);
-
-//
-// Drawing
-//
-void SSD1327_DrawPixel(int16_t x, int16_t y, uint8_t Color);
-void SSD1327_Clear(uint8_t Color);
-void SSD1327_Display(void);
-void SSD1327_Bitmap(uint8_t *bitmap);
-
-#if GRAPHIC_ACCELERATION_COMMANDS == 1
-//
-// Graphic Acceleration Commands
-//
-void SSD1327_StartScrollRight(uint8_t StartPage, uint8_t EndPage, scroll_horizontal_speed Speed);
-void SSD1327_StartScrollLeft(uint8_t StartPage, uint8_t EndPage, scroll_horizontal_speed Speed);
-void SSD1327_StopScroll(void);
-#endif
-
-void SSD1327_Command(uint8_t com);
-void SSD1327_Data(uint8_t dat);
-
-#endif /* OLED_SSD1327_H_ */

+ 0 - 2
desk/libs/thirdparty/oled_ssd1327/i2c.c

@@ -1,2 +0,0 @@
-#include "i2c.h"
-

+ 0 - 58
desk/libs/thirdparty/oled_ssd1327/i2c.h

@@ -1,58 +0,0 @@
-/**
-  ******************************************************************************
-  * File Name          : I2C.h
-  * Description        : This file provides code for the configuration
-  *                      of the I2C instances.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
-  * All rights reserved.</center></h2>
-  *
-  * This software component is licensed by ST under BSD 3-Clause license,
-  * the "License"; You may not use this file except in compliance with the
-  * License. You may obtain a copy of the License at:
-  *                        opensource.org/licenses/BSD-3-Clause
-  *
-  ******************************************************************************
-  */
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __i2c_H
-#define __i2c_H
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "main.h"
-
-/* USER CODE BEGIN Includes */
-
-/* USER CODE END Includes */
-
-extern I2C_HandleTypeDef hi2c1;
-
-/* USER CODE BEGIN Private defines */
-
-/* USER CODE END Private defines */
-
-void MX_I2C1_Init(void);
-
-/* USER CODE BEGIN Prototypes */
-
-/* USER CODE END Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-#endif /*__ i2c_H */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

+ 6 - 7
desk/libs/thirdparty/oled_ssd1327_new/SSD1327.cpp

@@ -3,12 +3,11 @@
 #include "font16x32.h"
 #include "SSD1327.h"
 #include "cmsis_os.h"
+#include "oled_common.h"
 #include <stdint.h>
 #include <stdio.h>
 
-extern "C" {
-#include "OLED_SSD1327.h"
-}
+extern uint8_t oled_buf[];
 
 #define bitRead(value, bit) (((value) >> (bit)) & 0x01)
 #define bitSet(value, bit) ((value) |= (1UL << (bit)))
@@ -20,23 +19,23 @@ extern "C" {
 
 #define abs(x) ((x)>0?(x):-(x))
 
-extern uint8_t buffer[];
+//extern uint8_t buffer[];
 //#define frameBuffer buffer[];
 
 //SSD1327 ssd1327(0, 0, 0);
 
 SSD1327::SSD1327(int cs, int dc, int rst) {
-    frameBuffer = buffer;
+    frameBuffer = oled_buf;
 }
 
 //
 void SSD1327::writeCmd(uint8_t reg){//Writes a command byte to the driver
-    SSD1327_Command(reg);
+    oled_command(reg);
 }
 
 //
 void SSD1327::writeData(uint8_t data){//Writes 1 byte to the display's memory
-	SSD1327_Data(data);
+	oled_data(data);
 }
 
 //

+ 6 - 6
desk/modules/menu/menu_items.cpp

@@ -7,11 +7,11 @@
 #include "settings.h"
 #include "uart_bridge.h"
 #include "oled_common.h"
+#include "oled_config.h"
 #include <string.h>
 #include <stdio.h>
 
 extern "C" {
-#include "OLED_SSD1327.h"
 #include "GFX_SSD1327.h"
 #include "fonts.h"
 }
@@ -169,7 +169,7 @@ static void screen_draw_main(uint8_t sel)
     get_total(&total);
     move = get_move();
     
-    SSD1327_Clear(BLACK);
+    oled_clear(BLACK);
     
     // Основнаая рамка
     GFX_DrawRectangle(1, 1, 126, 125, 15);
@@ -198,7 +198,7 @@ static void screen_draw_main(uint8_t sel)
         sprintf(screen_str_buf, "M: stop");
     GFX_DrawString(8, 80, (char*)screen_str_buf, 15, 0);
         
-    SSD1327_Display();
+    oled_display();
 }
 
 // Отрисовка экрана настроек
@@ -206,7 +206,7 @@ static void screen_draw_settings(uint8_t sel)
 {
     bool select;
     
-    SSD1327_Clear(BLACK);
+    oled_clear(BLACK);
     
     // Рамка
     GFX_DrawRoundRectangle(1, 1, 126, 125, 3, 15);
@@ -249,7 +249,7 @@ static void screen_draw_settings(uint8_t sel)
     if (select)
         oled_draw_string_frame(3);
     
-    SSD1327_Display();
+    oled_display();
     
     select = sel == MCELL_SAVE ? true : false;
     memset(screen_str_buf, 0, SCREEN_BUF_LEN);
@@ -262,7 +262,7 @@ static void screen_draw_settings(uint8_t sel)
     if (select)
         oled_draw_string_frame(4);
     
-    SSD1327_Display();
+    oled_display();
 }
 #endif
 // -------------------------------------------------------------------------- //

+ 71 - 15
desk/modules/ssd_1327/oled_common.cpp

@@ -11,7 +11,6 @@
 #include <string.h>
 
 extern "C" {
-#include "OLED_SSD1327.h"
 #include "GFX_SSD1327.h"
 }
   
@@ -35,14 +34,16 @@ void init_oled(void)
 #if defined(I2C_BRIDGE)
     i2c_bridge_init();
     i2c_bridge = i2c_get_bridge();
-    SSD1327_I2cInit(i2c_bridge);
+    //SSD1327_I2cInit(i2c_bridge);
     
 #elif defined(SPI_BRIDGE)
     spi_bridge_init();
     spi_bridge = spi_get_bridge();
-    SSD1327_SpiInit(spi_bridge);
+    //SSD1327_SpiInit(spi_bridge);
 #endif
     
+    oled_init();
+    
     oled_clear(BLACK);
     
     
@@ -74,7 +75,6 @@ void init_oled(void)
     //GFX_Image(15, 0, (uint8_t*)logo_grayscale, 96, 96);
             
     oled_display();
-
 }
 
 //
@@ -94,14 +94,9 @@ void init_gpio_oled(void)
     // GPIOA_6 - DC
     GPIO_InitStruct.Pin = OLED_DC_PIN;
     HAL_GPIO_Init(OLED_DC_PORT, &GPIO_InitStruct);
-    
-    // GPIOA_7 - CS
-    GPIO_InitStruct.Pin = OLED_CS_PIN;
-    HAL_GPIO_Init(OLED_CS_PORT, &GPIO_InitStruct);
         
     HAL_GPIO_WritePin(OLED_RST_PORT, OLED_RST_PIN, GPIO_PIN_RESET);
     HAL_GPIO_WritePin(OLED_DC_PORT, OLED_DC_PIN, GPIO_PIN_RESET);
-    HAL_GPIO_WritePin(OLED_CS_PORT, OLED_CS_PIN, GPIO_PIN_RESET);
 }
 
 //
@@ -254,8 +249,62 @@ void oled_stop_scroll(void)
 	oled_command(SSD1327_DEACTIVATE_SCROLL);
 }
 
+//
 void oled_init(void)
 {
+    oled_command(0xae);//--turn off oled panel
+
+    oled_command(0x15);    //   set column address
+    oled_command(0x00);    //  start column   0
+    oled_command(0x7f);    //  end column   127
+
+    oled_command(0x75);    //   set row address
+    oled_command(0x00);    //  start row   0
+    oled_command(0x7f);    //  end row   127
+
+    oled_command(0x81);  // set contrast control
+    oled_command(0x80);
+
+    oled_command(0xa0);    // gment remap
+    oled_command(0x51);   //51
+
+    oled_command(0xa1);  // start line
+    oled_command(0x00);
+
+    oled_command(0xa2);  // display offset
+    oled_command(0x00);
+
+    oled_command(0xa4);    // rmal display
+    oled_command(0xa8);    // set multiplex ratio
+    oled_command(0x7f);
+
+    oled_command(0xb1);  // set phase leghth
+    oled_command(0xf1);
+
+    oled_command(0xb3);  // set dclk
+    oled_command(0x00);  //80Hz:0xc1 90Hz:0xe1   100Hz:0x00   110Hz:0x30 120Hz:0x50   130Hz:0x70     01
+
+    oled_command(0xab);  //
+    oled_command(0x01);  //
+
+    oled_command(0xb6);  // set phase leghth
+    oled_command(0x0f);
+
+    oled_command(0xbe);
+    oled_command(0x0f);
+
+    oled_command(0xbc);
+    oled_command(0x08);
+
+    oled_command(0xd5);
+    oled_command(0x62);
+
+    oled_command(0xfd);
+    oled_command(0x12);
+  
+    oled_display_on(1);
+    
+#if 0  
     oled_command(SSD1327_DISPLAYOFF);  // Display Off
     
     oled_command(SSD1327_SETCOLUMNADDRESS);
@@ -306,15 +355,16 @@ void oled_init(void)
 	oled_command(0x12);  // !
     
     oled_display_on(1);
+#endif    
 }
 
 //
 void oled_draw_pixel(int16_t x, int16_t y, uint8_t color)
 {
-	 if ((x < 0) || (x >= SSD1327_LCDWIDTH) || (y < 0) || (y >= SSD1327_LCDHEIGHT))
+	 if ((x < 0) || (x >= OLED_WIDTH) || (y < 0) || (y >= OLED_HEIGHT))
 		 return;
 
-	 uint8_t SelectedCell = oled_buf[x/2 + y*(SSD1327_LCDWIDTH/2)];
+	 uint8_t SelectedCell = oled_buf[x/2 + y*(OLED_WIDTH/2)];
 
 	 if(x % 2)
 	 {
@@ -327,17 +377,23 @@ void oled_draw_pixel(int16_t x, int16_t y, uint8_t color)
 		 SelectedCell |= (0xF0 & (color<<4));
 	 }
 
-	 oled_buf[x/2 + y*(SSD1327_LCDWIDTH/2)] = SelectedCell;
+	 oled_buf[x/2 + y*(OLED_WIDTH/2)] = SelectedCell;
 }
 
 //
 void oled_clear(uint8_t color)
 {
-    if(color > WHITE) color = WHITE;
+    if (color > WHITE) color = WHITE;
 	memset(oled_buf, (color << 4 | color), OLED_BUF_SIZE);
 }
 
-
+//
+void oled_dma_end_callback(SPI_HandleTypeDef *hspi)
+{
+	if (hspi == spi_bridge) {
+		OLED_CS_1;
+	}
+}
 
 
 
@@ -418,5 +474,5 @@ void test_oled(void)
     GFX_SetFontSize(3);
     GFX_DrawString(4, 60, (char*)"BbAa12345", 15, 0);
 
-    SSD1327_Display();
+    oled_display();
 }

+ 10 - 0
desk/modules/ssd_1327/oled_common.h

@@ -1,6 +1,9 @@
 #ifndef __OLED_COMMON_H
 #define __OLED_COMMON_H
 
+#ifdef __cplusplus
+ extern "C" {
+#endif
 
 //
 void init_oled(void);
@@ -47,6 +50,9 @@ void oled_start_scroll_left(uint8_t start_page, uint8_t end_page, uint8_t speed)
 //
 void oled_stop_scroll(void);
 
+//
+void oled_init(void);
+
 //
 void oled_draw_pixel(int16_t x, int16_t y, uint8_t color);
 
@@ -64,4 +70,8 @@ void oled_draw_rec(int x_start, int y_start, int x_end, int y_end, uint8_t color
 //
 void test_oled(void);
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif // __OLED_COMMON_H

+ 58 - 10
desk/modules/ssd_1327/oled_config.h

@@ -14,17 +14,14 @@
 #define OLED_DC_PIN     GPIO_PIN_6
 #define OLED_DC_PORT    GPIOA
 
-#define OLED_CS_PIN     GPIO_PIN_7
-#define OLED_CS_PORT    GPIOA
-
 #define OLED_RST_0      HAL_GPIO_WritePin(OLED_RST_PORT, OLED_RST_PIN, GPIO_PIN_RESET)
 #define OLED_RST_1      HAL_GPIO_WritePin(OLED_RST_PORT, OLED_RST_PIN, GPIO_PIN_SET)
 
 #define OLED_DC_0       HAL_GPIO_WritePin(OLED_DC_PORT, OLED_DC_PIN, GPIO_PIN_RESET)
 #define OLED_DC_1       HAL_GPIO_WritePin(OLED_DC_PORT, OLED_DC_PIN, GPIO_PIN_SET)
 
-#define OLED_CS_0       HAL_GPIO_WritePin(OLED_CS_PORT, OLED_CS_PIN, GPIO_PIN_RESET)
-#define OLED_CS_1       HAL_GPIO_WritePin(OLED_CS_PORT, OLED_CS_PIN, GPIO_PIN_SET)
+#define OLED_CS_0       HAL_GPIO_WritePin(OLED_SPI_CS_PORT, OLED_SPI_CS_PIN, GPIO_PIN_RESET)
+#define OLED_CS_1       HAL_GPIO_WritePin(OLED_SPI_CS_PORT, OLED_SPI_CS_PIN, GPIO_PIN_SET)
 
 // SPI settings
 #define OLED_SPI_SCK_PORT   GPIOB
@@ -44,11 +41,62 @@
 
 
 // OLED settings
-#define OLED_I2C_ADDR       0x7A
-
-#define OLED_HEIGHT         128
-#define OLED_WIDTH          128
-#define OLED_BUF_SIZE       8192    // OLED_HEIGHT * OLED_WIDTH / 2
+#define OLED_I2C_ADDR               0x7A
+
+#define OLED_HEIGHT                 128
+#define OLED_WIDTH                  128
+#define OLED_BUF_SIZE               8192    // OLED_HEIGHT * OLED_WIDTH / 2
+
+#define SSD1327_SETCOLUMNADDRESS	0x15
+#define SSD1327_SETROWADDRESS		0x75
+#define SSD1327_SETCONTRASTCURRENT 	0x81
+#define SSD1327_NOP					0x84
+#define SSD1327_SEGREMAP			0xA0
+#define SSD1327_SETDISPLAYSTARTLINE	0xA1
+#define SSD1327_SETDISPLAYOFFSET	0xA2
+#define SSD1327_DISPLAYALLON_RESUME 0xA4
+#define SSD1327_DISPLAYALLON 		0xA5
+#define SSD1327_NORMALDISPLAY 		0xA6
+#define SSD1327_INVERTDISPLAY 		0xA7
+#define SSD1327_SETMULTIPLEX		0xA8
+#define SSD1327_FUNCTIONSELECTIONA	0xAB
+#define SSD1327_DISPLAYOFF			0xAE
+#define SSD1327_DISPLAYON			0xAF
+#define SSD1327_SETPHASELENGTH		0xB1
+#define SSD1327_SETFRONTCLOCKDIVIDER_OSCILLATORFREQUENCY    0xB3
+#define SSD1327_SETGPIO				0xB5
+#define SSD1327_SETSECONDPRECHARGEPERTIOD	                0xB6
+#define SSD1327_SETGRAYSCALETABLE	0xB8
+#define SSD1327_SELECTDEFAULTLINEARGRAYSCALETABLE           0xB9
+#define SSD1327_SETPRECHARGEVOLTAGE	0xBC
+#define SSD1327_SETSETVCOMVOLTAGE	0xBE
+#define SSD1327_FUNCTIONSELECTIONB	0xD5
+#define SSD1327_SETCOMMANDLOCK		0xFD
+
+//
+// Scrolling #defines
+//
+#define SSD1327_ACTIVATE_SCROLL			0x2F
+#define SSD1327_DEACTIVATE_SCROLL		0x2E
+#define SSD1327_RIGHT_HORIZONTAL_SCROLL	0x26
+#define SSD1327_LEFT_HORIZONTAL_SCROLL	0x27
+
+// Colors
+#define BLACK       0
+#define WHITE       15
+
+// Scrolling enums
+typedef enum
+{
+	SCROLL_EVERY_5_FRAMES,
+	SCROLL_EVERY_64_FRAMES,
+	SCROLL_EVERY_128_FRAMES,
+	SCROLL_EVERY_256_FRAMES,
+	SCROLL_EVERY_3_FRAMES,
+	SCROLL_EVERY_4_FRAMES,
+	SCROLL_EVERY_25_FRAMES,
+	SCROLL_EVERY_2_FRAMES,
+} scroll_horizontal_speed;
 
 
 #endif // __OLED_CONFIG_H

+ 2 - 0
desk/modules/ssd_1327/spi_bridge.cpp

@@ -37,6 +37,7 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
     if (hspi->Instance == SPI2)
     {
         __HAL_RCC_SPI2_CLK_ENABLE();
+        __HAL_RCC_GPIOA_CLK_ENABLE();
         __HAL_RCC_GPIOB_CLK_ENABLE();
 
         // SPI SCK
@@ -82,5 +83,6 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef* spiHandle)
         HAL_GPIO_DeInit(OLED_SPI_SCK_PORT, OLED_SPI_SCK_PIN);
         HAL_GPIO_DeInit(OLED_SPI_MISO_PORT, OLED_SPI_MISO_PIN);
         HAL_GPIO_DeInit(OLED_SPI_MOSI_PORT, OLED_SPI_MOSI_PIN);
+        HAL_GPIO_DeInit(OLED_SPI_CS_PORT, OLED_SPI_CS_PIN);
     }
 }

+ 0 - 1
desk/user/main.cpp

@@ -1,6 +1,5 @@
 #include "stm32g4xx_hal.h"
 #include "cmsis_os.h"
-#include "i2c.h"
 #include "terminal_user.h"
 #include "terminal_usartbridge.h"
 #include "control.h"

BIN
output/desk.bin


+ 0 - 3
project/ewarm/desk/desk.ewp

@@ -2485,9 +2485,6 @@
                 <file>
                     <name>$PROJ_DIR$\..\..\..\desk\libs\thirdparty\oled_ssd1327\logo_grayscale.h</name>
                 </file>
-                <file>
-                    <name>$PROJ_DIR$\..\..\..\desk\libs\thirdparty\oled_ssd1327\OLED_SSD1327.c</name>
-                </file>
             </group>
             <group>
                 <name>oled_ssd1327_new</name>

+ 0 - 3
project/ewarm/desk/desk.ewt

@@ -3184,9 +3184,6 @@
                 <file>
                     <name>$PROJ_DIR$\..\..\..\desk\libs\thirdparty\oled_ssd1327\logo_grayscale.h</name>
                 </file>
-                <file>
-                    <name>$PROJ_DIR$\..\..\..\desk\libs\thirdparty\oled_ssd1327\OLED_SSD1327.c</name>
-                </file>
             </group>
             <group>
                 <name>oled_ssd1327_new</name>

File diff suppressed because it is too large
+ 0 - 0
project/ewarm/settings/tuber.wsdt


Some files were not shown because too many files changed in this diff