Mercurial > public > ostc4
changeset 871:f7318457df4d default
support for new screen
ToDo: Brightness settings
author | heinrichsweikamp |
---|---|
date | Tue, 13 Aug 2024 13:24:54 +0200 |
parents | 3a1c533f3840 |
children | e373e90a48db |
files | Discovery/Inc/ostc.h Discovery/Inc/ostc_discovery.h Discovery/Inc/ostc_hw1.h Discovery/Src/display.c Discovery/Src/gfx_engine.c |
diffstat | 5 files changed, 734 insertions(+), 308 deletions(-) [+] |
line wrap: on
line diff
--- a/Discovery/Inc/ostc.h Mon Jul 22 16:40:14 2024 +0200 +++ b/Discovery/Inc/ostc.h Tue Aug 13 13:24:54 2024 +0200 @@ -98,5 +98,6 @@ void MX_TestPin_High(void); void MX_TestPin_Low(void); +uint8_t hardwareDisplay; //< either OSTC4 LCD (=0) or new Screen (=1) #endif // OSTC_H
--- a/Discovery/Inc/ostc_discovery.h Mon Jul 22 16:40:14 2024 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,101 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -/// -*- coding: UTF-8 -*- -/// -/// \file Discovery/Inc/ostc_discovery.h -/// \brief Hardware specific configuration -/// \author heinrichs weikamp gmbh -/// \date 05-Dec-2014 -/// -/// $Id$ -/////////////////////////////////////////////////////////////////////////////// -/// \par Copyright (c) 2014-2018 Heinrichs Weikamp gmbh -/// -/// This program is free software: you can redistribute it and/or modify -/// it under the terms of the GNU General Public License as published by -/// the Free Software Foundation, either version 3 of the License, or -/// (at your option) any later version. -/// -/// This program is distributed in the hope that it will be useful, -/// but WITHOUT ANY WARRANTY; without even the implied warranty of -/// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -/// GNU General Public License for more details. -/// -/// You should have received a copy of the GNU General Public License -/// along with this program. If not, see <http://www.gnu.org/licenses/>. -////////////////////////////////////////////////////////////////////////////// - -#ifndef OSTC_DISCOVERY_H -#define OSTC_DISCOVERY_H - -#define DISPLAY_RESETB_PIN GPIO_PIN_6 -#define DISPLAY_RESETB_GPIO_PORT GPIOF -#define DISPLAY_RESETB_GPIO_ENABLE()__GPIOF_CLK_ENABLE() - -#define DISPLAY_CSB_PIN GPIO_PIN_8 -#define DISPLAY_CSB_GPIO_PORT GPIOC -#define DISPLAY_CSB_GPIO_ENABLE() __GPIOC_CLK_ENABLE() - -#define VSYNC_IRQ_PIN GPIO_PIN_4 -#define VSYNC_IRQ_GPIO_PORT GPIOD -#define VSYNC_IRQ_GPIO_ENABLE() __GPIOD_CLK_ENABLE() -#define VSYNC_IRQ_EXTI_IRQn EXTI4_IRQn - -#define BUTTON_ENTER_PIN GPIO_PIN_0 -#define BUTTON_ENTER_GPIO_PORT GPIOA -#define BUTTON_ENTER_GPIO_ENABLE() __GPIOA_CLK_ENABLE() -#define BUTTON_ENTER_EXTI_IRQn EXTI0_IRQn - -#define BUTTON_DOWN_PIN GPIO_PIN_1 -#define BUTTON_DOWN_GPIO_PORT GPIOA -#define BUTTON_DOWN_GPIO_ENABLE() __GPIOA_CLK_ENABLE() -#define BUTTON_DOWN_EXTI_IRQn EXTI1_IRQn - -#define BUTTON_NEXT_PIN GPIO_PIN_2 -#define BUTTON_NEXT_GPIO_PORT GPIOA -#define BUTTON_NEXT_GPIO_ENABLE() __GPIOA_CLK_ENABLE() -#define BUTTON_NEXT_EXTI_IRQn EXTI2_IRQn - -#define BUTTON_BACK_PIN GPIO_PIN_3 -#define BUTTON_BACK_GPIO_PORT GPIOC -#define BUTTON_BACK_GPIO_ENABLE() __GPIOC_CLK_ENABLE() -#define BUTTON_BACK_EXTI_IRQn EXTI3_IRQn - -#define EXTFLASH_CSB_PIN GPIO_PIN_1 -#define EXTFLASH_CSB_GPIO_PORT GPIOC -#define EXTFLASH_CSB_GPIO_ENABLE() __GPIOC_CLK_ENABLE() - -#define OSCILLOSCOPE_PIN GPIO_PIN_14 -#define OSCILLOSCOPE_GPIO_PORT GPIOG -#define OSCILLOSCOPE_GPIO_ENABLE() __GPIOG_CLK_ENABLE() - -#define OSCILLOSCOPE2_PIN GPIO_PIN_13 -#define OSCILLOSCOPE2_GPIO_PORT GPIOG -#define OSCILLOSCOPE2_GPIO_ENABLE() __GPIOG_CLK_ENABLE() - -#define USARTx USART1 -#define USARTx_CLK_ENABLE() __USART1_CLK_ENABLE(); -#define USARTx_FORCE_RESET() __USART1_FORCE_RESET() -#define USARTx_RELEASE_RESET() __USART1_RELEASE_RESET() - -#define USARTx_RX_AF GPIO_AF7_USART1 -#define USARTx_RX_PIN GPIO_PIN_10 -#define USARTx_RX_GPIO_PORT GPIOA -#define USARTx_RX_GPIO_CLK_ENABLE() __GPIOA_CLK_ENABLE() - -#define USARTx_TX_AF GPIO_AF7_USART1 -#define USARTx_TX_PIN GPIO_PIN_9 -#define USARTx_TX_GPIO_PORT GPIOA -#define USARTx_TX_GPIO_CLK_ENABLE() __GPIOA_CLK_ENABLE() -#define USARTx_IRQn USART1_IRQn -#define USARTx_IRQHandler USART1_IRQHandler - -#define TIMx TIM3 -#define TIMx_CLK_ENABLE __TIM3_CLK_ENABLE -#define TIMx_IRQn TIM3_IRQn -#define TIMx_IRQHandler TIM3_IRQHandler - -#define SMALLCPU_CSB_PIN GPIO_PIN_15 -#define SMALLCPU_CSB_GPIO_PORT GPIOA -#define SMALLCPU_CSB_GPIO_ENABLE() __GPIOA_CLK_ENABLE() - -#endif // OSTC_DISCOVERY_H
--- a/Discovery/Inc/ostc_hw1.h Mon Jul 22 16:40:14 2024 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,156 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -/// -*- coding: UTF-8 -*- -/// -/// \file Discovery/Inc/ostc_hw1.h -/// \brief -/// \author Heinrichs Weikamp -/// \date 2018 -/// -/// $Id$ -/////////////////////////////////////////////////////////////////////////////// -/// \par Copyright (c) 2014-2018 Heinrichs Weikamp gmbh -/// -/// This program is free software: you can redistribute it and/or modify -/// it under the terms of the GNU General Public License as published by -/// the Free Software Foundation, either version 3 of the License, or -/// (at your option) any later version. -/// -/// This program is distributed in the hope that it will be useful, -/// but WITHOUT ANY WARRANTY; without even the implied warranty of -/// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -/// GNU General Public License for more details. -/// -/// You should have received a copy of the GNU General Public License -/// along with this program. If not, see <http://www.gnu.org/licenses/>. -////////////////////////////////////////////////////////////////////////////// - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef OSTC_HW1_H -#define OSTC_HW1_H - -/* -#define DISPLAY_BACKLIGHT_PIN GPIO_PIN_7 -#define DISPLAY_BACKLIGHT_GPIO_PORT GPIOC -#define DISPLAY_BACKLIGHT_GPIO_ENABLE() __GPIOC_CLK_ENABLE() -*/ - -#define DISPLAY_RESETB_PIN GPIO_PIN_13 -#define DISPLAY_RESETB_GPIO_PORT GPIOC -#define DISPLAY_RESETB_GPIO_ENABLE() __GPIOC_CLK_ENABLE() - -#define DISPLAY_CSB_PIN GPIO_PIN_8 -#define DISPLAY_CSB_GPIO_PORT GPIOI -#define DISPLAY_CSB_GPIO_ENABLE() __GPIOI_CLK_ENABLE() - -#define VSYNC_IRQ_PIN GPIO_PIN_3 -#define VSYNC_IRQ_GPIO_PORT GPIOE -#define VSYNC_IRQ_GPIO_ENABLE() __GPIOE_CLK_ENABLE() -#define VSYNC_IRQ_EXTI_IRQn EXTI3_IRQn - -#define BUTTON_ENTER_PIN GPIO_PIN_4 -#define BUTTON_ENTER_GPIO_PORT GPIOH -#define BUTTON_ENTER_GPIO_ENABLE() __GPIOH_CLK_ENABLE() -#define BUTTON_ENTER_EXTI_IRQn EXTI4_IRQn - -#define BUTTON_DOWN_PIN GPIO_PIN_1 -#define BUTTON_DOWN_GPIO_PORT GPIOA -#define BUTTON_DOWN_GPIO_ENABLE() __GPIOA_CLK_ENABLE() -#define BUTTON_DOWN_EXTI_IRQn EXTI1_IRQn - -#define BUTTON_NEXT_PIN GPIO_PIN_2 -#define BUTTON_NEXT_GPIO_PORT GPIOA -#define BUTTON_NEXT_GPIO_ENABLE() __GPIOA_CLK_ENABLE() -#define BUTTON_NEXT_EXTI_IRQn EXTI2_IRQn - -#define BUTTON_BACK_PIN GPIO_PIN_0 -#define BUTTON_BACK_GPIO_PORT GPIOB -#define BUTTON_BACK_GPIO_ENABLE() __GPIOB_CLK_ENABLE() -#define BUTTON_BACK_EXTI_IRQn EXTI0_IRQn - -#define EXTFLASH_CSB_PIN GPIO_PIN_6 -#define EXTFLASH_CSB_GPIO_PORT GPIOF -#define EXTFLASH_CSB_GPIO_ENABLE() __GPIOF_CLK_ENABLE() - -#define OSCILLOSCOPE_PIN GPIO_PIN_3 -#define OSCILLOSCOPE_GPIO_PORT GPIOA -#define OSCILLOSCOPE_GPIO_ENABLE() __GPIOA_CLK_ENABLE() - -#define OSCILLOSCOPE2_PIN GPIO_PIN_11 -#define OSCILLOSCOPE2_GPIO_PORT GPIOB -#define OSCILLOSCOPE2_GPIO_ENABLE() __GPIOB_CLK_ENABLE() - -#define IR_HUD_ENABLE_PIN GPIO_PIN_7 -#define IR_HUD_ENABLE_GPIO_PORT GPIOD -#define IR_HUD_ENABLE_GPIO_ENABLE() __GPIOD_CLK_ENABLE() - -#define USARTx USART1 -#define USARTx_CLK_ENABLE() __USART1_CLK_ENABLE(); -#define USARTx_FORCE_RESET() __USART1_FORCE_RESET() -#define USARTx_RELEASE_RESET() __USART1_RELEASE_RESET() - -#define USARTx_RX_AF GPIO_AF7_USART1 -#define USARTx_RX_PIN GPIO_PIN_10 -#define USARTx_RX_GPIO_PORT GPIOA -#define USARTx_RX_GPIO_CLK_ENABLE() __GPIOA_CLK_ENABLE() - -#define USARTx_TX_AF GPIO_AF7_USART1 -#define USARTx_TX_PIN GPIO_PIN_9 -#define USARTx_TX_GPIO_PORT GPIOA -#define USARTx_TX_GPIO_CLK_ENABLE() __GPIOA_CLK_ENABLE() -#define USARTx_IRQn USART1_IRQn -#define USARTx_IRQHandler USART1_IRQHandler - -#define USART_PIEZO USART3 -#define USART_PIEZO_TX_AF GPIO_AF7_USART3 -#define USART_PIEZO_TX_PIN GPIO_PIN_10 -#define USART_PIEZO_TX_GPIO_PORT GPIOC -#define USART_PIEZO_TX_GPIO_CLK_ENABLE() __GPIOC_CLK_ENABLE() - -#define USART_PIEZO_RX_AF GPIO_AF7_USART3 -#define USART_PIEZO_RX_PIN GPIO_PIN_11 -#define USART_PIEZO_RX_GPIO_PORT GPIOC -#define USART_PIEZO_RX_GPIO_CLK_ENABLE() __GPIOC_CLK_ENABLE() - -#define USART_IR_HUD USART2 -#define USART_IR_HUD_CLK_ENABLE() __USART2_CLK_ENABLE(); -#define USART_IR_HUD_FORCE_RESET() __USART2_FORCE_RESET() -#define USART_IR_HUD_RELEASE_RESET() __USART2_RELEASE_RESET() -#define USART_IR_HUD_TX_AF GPIO_AF7_USART2 -#define USART_IR_HUD_TX_PIN GPIO_PIN_5 -#define USART_IR_HUD_TX_GPIO_PORT GPIOD -#define USART_IR_HUD_TX_GPIO_CLK_ENABLE() __GPIOD_CLK_ENABLE() - -#define USART_IR_HUD_RX_AF GPIO_AF7_USART2 -#define USART_IR_HUD_RX_PIN GPIO_PIN_6 -#define USART_IR_HUD_RX_GPIO_PORT GPIOD -#define USART_IR_HUD_RX_GPIO_CLK_ENABLE() __GPIOD_CLK_ENABLE() -#define USART_IR_HUD_IRQn USART2_IRQn -#define USART_IR_HUD_IRQHandler USART2_IRQHandler - -#define TIMx TIM4 -#define TIMx_CLK_ENABLE __TIM4_CLK_ENABLE -#define TIMx_IRQn TIM4_IRQn -#define TIMx_IRQHandler TIM4_IRQHandler - -#define TIM_BACKLIGHT TIM3 -#define TIM_BACKLIGHT_CLK_ENABLE __TIM3_CLK_ENABLE -#define TIM_BACKLIGHT_IRQn TIM3_IRQn -#define TIM_BACKLIGHT_IRQHandler TIM3_IRQHandler -#define TIM_BACKLIGHT_CHANNEL TIM_CHANNEL_2 -#define TIM_BACKLIGHT_PIN GPIO_PIN_7 -#define TIM_BACKLIGHT_GPIO_PORT GPIOC -#define TIM_BACKLIGHT_GPIO_ENABLE() __GPIOC_CLK_ENABLE() - -#define SMALLCPU_CSB_PIN GPIO_PIN_5 -#define SMALLCPU_CSB_GPIO_PORT GPIOC -#define SMALLCPU_CSB_GPIO_ENABLE() __GPIOC_CLK_ENABLE() - -#define SMALLCPU_BOOT0_PIN GPIO_PIN_9 -#define SMALLCPU_BOOT0_GPIO_PORT GPIOC -#define SMALLCPU_BOOT0_GPIO_ENABLE() __GPIOC_CLK_ENABLE() - -#define SMALLCPU_NRESET_PIN GPIO_PIN_8 -#define SMALLCPU_NRESET_GPIO_PORT GPIOC -#define SMALLCPU_NRESET_GPIO_ENABLE() __GPIOC_CLK_ENABLE() - -#endif OSTC_HW1_H
--- a/Discovery/Src/display.c Mon Jul 22 16:40:14 2024 +0200 +++ b/Discovery/Src/display.c Tue Aug 13 13:24:54 2024 +0200 @@ -3,32 +3,71 @@ #include "ostc.h" #include "display.h" -#define ENABLE_EXTENDED_COMMANDS 0xB9 -#define SET_POWER 0xB1 -#define SLEEP_OUT 0x11 -#define DISPLAY_INVERSION_OFF 0x20 -#define MEMORY_ACCESS_ONTROL 0x36 -#define INTERFACE_PIXEL_FORMAT 0x3A -#define SET_RGB_INTERFACE_RELATED 0xB3 -#define SET_DISPLAY_WAVEFORM 0xB4 -#define SET_PANEL 0xCC -#define SET_GAMMA_CURVE_RELATED 0xE0 -#define DISPLAY_ON 0x29 -#define DISPLAY_OFF 0x28 -#define SLEEP_IN 0x10 +#define TFT_ENABLE_EXTENDED_COMMANDS 0xB9 +#define TFT_SET_POWER 0xB1 +#define TFT_SLEEP_OUT 0x11 +#define TFT_DISPLAY_INVERSION_OFF 0x20 +#define TFT_MEMORY_ACCESS_ONTROL 0x36 +#define TFT_INTERFACE_PIXEL_FORMAT 0x3A +#define TFT_SET_RGB_INTERFACE_RELATED 0xB3 +#define TFT_SET_DISPLAY_WAVEFORM 0xB4 +#define TFT_SET_PANEL 0xCC +#define TFT_SET_GAMMA_CURVE_RELATED 0xE0 +#define TFT_DISPLAY_ON 0x29 +#define TFT_DISPLAY_OFF 0x28 +#define TFT_SLEEP_IN 0x10 +#define OLED_SCTE_SET_31h 0x31 // 0x0008 +#define OLED_WCWE_SET_32h 0x32 // 0x0014 +#define OLED_GATELESS1_30h 0x30 // 0x0002 +#define OLED_GATELESS2_27h 0x27 // 0x0000 +#define OLED_OSCILLATOR 0x11 // 0x00A1 +#define OLED_VBP_SET_12h 0x12 // 0x0008 +#define OLED_VFP_SET_13h 0x13 // 0x0008 +#define OLED_DISPLAY_CON_15h 0x15 // 0x0000 +#define OLED_COLOR_DEPTH_SET_16h 0x16 // 0x0000 +#define OLED_PENTILE_KEY_EFh 0xEF // 0x00D0 or 0x00E8 +#define OLED_PENTILE1_A0h 0xA0 // 0x0063 +#define OLED_PENTILE2_A1h 0xA1 // 0x00C0 +#define OLED_PENTILE3_A2h 0xA2 // 0x0032 +#define OLED_PENTILE4_A3h 0xA3 // 0x0002 +#define OLED_BRIGHTNESS_CTRL_39h 0x39 // 0044h +// gamma table 0x40 - 0x66 +#define OLED_BOOSTING_FREQ 0x17 // 0x0022 +#define OLED_AMP_SET_18h 0x18 // 0x0033 +#define OLED_GAMMA_AMP_19h 0x19 // 0x0003 +#define OLED_POWER_CONTROL2_1Ah 0x1A // 0x0001 +#define OLED_POWER_CONTROL2_1Bh 0x1B // +#define OLED_POWER_CONTROL2_1Ch 0x1C // +#define OLED_INTERNAL_LOGIC_VOLTAGE 0x22 // VCC*0,65 = 3,3V * 0,55 = 0x00A2 +#define OLED_POWER_SET 0x23 // VC1OUT = VCI X 0.98 (default) = 0x00 +#define OLED_POWER_SET2 0x24 // VREG2OUT = 5,4V, VREG1OUT = 4,2V =0x77 +#define OLED_DISPLAY_CONDITION_SET_26h 0x26 // 0x00A0 +#define OLED_STB_BY_OFF 0x1D // 00A0 + 300ms wait +#define OLED_DDISP_ON 0x14 // 0003 static void Display_Error_Handler(void); +static void display_power_on__2_of_2__post_RGB_display0(void); +static void display_power_on__2_of_2__post_RGB_display1(void); +static uint8_t receive_screen(); void display_power_on__1_of_2__pre_RGB(void) { - /* reset system */ + uint8_t aTxBuffer[3]; + /* reset system */ HAL_GPIO_WritePin(DISPLAY_CSB_GPIO_PORT,DISPLAY_CSB_PIN,GPIO_PIN_SET); // chip select HAL_GPIO_WritePin(DISPLAY_RESETB_GPIO_PORT,DISPLAY_RESETB_PIN,GPIO_PIN_RESET); HAL_Delay(10); HAL_GPIO_WritePin(DISPLAY_RESETB_GPIO_PORT,DISPLAY_RESETB_PIN,GPIO_PIN_SET); - HAL_Delay(10); + HAL_Delay(25); + // check for new screen + hardwareDisplay=0; // default is old screen + aTxBuffer[0] = 0x71; // Read internal register + if (receive_screen((uint8_t*)aTxBuffer) == 0x27) // chip Index (=0x27 for new screen) + { + hardwareDisplay=1; + } /* RGB signals should be now for 2 frames or more (datasheet) */ } @@ -47,6 +86,24 @@ HAL_GPIO_WritePin(DISPLAY_CSB_GPIO_PORT,DISPLAY_CSB_PIN,GPIO_PIN_SET); // chip select } +static uint8_t receive_screen(uint8_t *pData) +{ + uint8_t byte; + HAL_GPIO_WritePin(DISPLAY_CSB_GPIO_PORT,DISPLAY_CSB_PIN,GPIO_PIN_RESET); // chip select + if(HAL_SPI_Transmit(&hspiDisplay,(uint8_t*)pData, 1, 10000) != HAL_OK) + Display_Error_Handler(); + while (HAL_SPI_GetState(&hspiDisplay) != HAL_SPI_STATE_READY) + { + } + if(HAL_SPI_Receive(&hspiDisplay, &byte, 1, 10000) != HAL_OK) + Display_Error_Handler(); + while (HAL_SPI_GetState(&hspiDisplay) != HAL_SPI_STATE_READY) + { + } + HAL_GPIO_WritePin(DISPLAY_CSB_GPIO_PORT,DISPLAY_CSB_PIN,GPIO_PIN_SET); // chip select + return byte; +} + static uint16_t convert8to9to8(uint8_t *pInput, uint8_t *pOutput,uint16_t inputlength) { @@ -95,6 +152,19 @@ void display_power_on__2_of_2__post_RGB(void) { + if (hardwareDisplay == 1) + { + display_power_on__2_of_2__post_RGB_display1(); + } + else + { + display_power_on__2_of_2__post_RGB_display0(); + } +} + + void display_power_on__2_of_2__post_RGB_display0(void) +{ + uint8_t aTxBuffer[32]; uint8_t bTxBuffer[36]; uint16_t i,length; @@ -104,14 +174,14 @@ for(i=0;i<36;i++) bTxBuffer[i] = 0; - aTxBuffer[0] = ENABLE_EXTENDED_COMMANDS; + aTxBuffer[0] = TFT_ENABLE_EXTENDED_COMMANDS; aTxBuffer[1] = 0xFF; aTxBuffer[2] = 0x83; aTxBuffer[3] = 0x63; length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,4); send((uint8_t*)bTxBuffer, length); - aTxBuffer[0] = SET_POWER; + aTxBuffer[0] = TFT_SET_POWER; aTxBuffer[1] = 0x81; aTxBuffer[2] = 0x24; aTxBuffer[3] = 0x04; @@ -127,27 +197,27 @@ length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,13); send((uint8_t*)bTxBuffer, length); - aTxBuffer[0] = SLEEP_OUT; + aTxBuffer[0] = TFT_SLEEP_OUT; length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,1); send((uint8_t*)bTxBuffer, length); HAL_Delay(5+1); - aTxBuffer[0] = DISPLAY_INVERSION_OFF; + aTxBuffer[0] = TFT_DISPLAY_INVERSION_OFF; length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,1); send((uint8_t*)bTxBuffer, length); - aTxBuffer[0] = MEMORY_ACCESS_ONTROL; + aTxBuffer[0] = TFT_MEMORY_ACCESS_ONTROL; aTxBuffer[1] = 0x00; length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,2); send((uint8_t*)bTxBuffer, length); - aTxBuffer[0] = INTERFACE_PIXEL_FORMAT; + aTxBuffer[0] = TFT_INTERFACE_PIXEL_FORMAT; aTxBuffer[1] = 0x70; length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,2); send((uint8_t*)bTxBuffer, length); HAL_Delay(120+20); - aTxBuffer[0] = SET_POWER; + aTxBuffer[0] = TFT_SET_POWER; aTxBuffer[1] = 0x78; aTxBuffer[2] = 0x24; aTxBuffer[3] = 0x04, @@ -163,12 +233,12 @@ length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,13); send((uint8_t*)bTxBuffer, length); - aTxBuffer[0] = SET_RGB_INTERFACE_RELATED; + aTxBuffer[0] = TFT_SET_RGB_INTERFACE_RELATED; aTxBuffer[1] = 0x01; length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,2); send((uint8_t*)bTxBuffer, length); - aTxBuffer[0] = SET_DISPLAY_WAVEFORM; + aTxBuffer[0] = TFT_SET_DISPLAY_WAVEFORM; aTxBuffer[1] = 0x00; aTxBuffer[2] = 0x08; aTxBuffer[3] = 0x56; @@ -181,12 +251,12 @@ length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,10); send((uint8_t*)bTxBuffer, length); - aTxBuffer[0] = SET_PANEL; + aTxBuffer[0] = TFT_SET_PANEL; aTxBuffer[1] = 0x0B; length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,2); send((uint8_t*)bTxBuffer, length); - aTxBuffer[0] = SET_GAMMA_CURVE_RELATED; + aTxBuffer[0] = TFT_SET_GAMMA_CURVE_RELATED; aTxBuffer[1] = 0x01; aTxBuffer[2] = 0x48; aTxBuffer[3] = 0x4D; @@ -221,15 +291,544 @@ send((uint8_t*)bTxBuffer, length); HAL_Delay(5+1); - aTxBuffer[0] = DISPLAY_ON; + aTxBuffer[0] = TFT_DISPLAY_ON; length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,1); send((uint8_t*)bTxBuffer, length); } +void display_power_on__2_of_2__post_RGB_display1(void) +{ + uint8_t aTxBuffer[3]; + + aTxBuffer[0] = 0x71; // Read chip Index & revision number + aTxBuffer[1] = 0x00; // Dummy write - reads out 0x27 + aTxBuffer[1] = 0x00; // Dummy write - reads out 0x96 + send((uint8_t*)aTxBuffer, 3); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_OSCILLATOR; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0xA4; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_SCTE_SET_31h; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x08;//8 + send((uint8_t*)aTxBuffer, 2); + + //debug read + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_SCTE_SET_31h; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x73; // Read internal register + aTxBuffer[1] = 0x00; // Dummy write - reads out 0x08 (The just-set OLED_SCTE_SET value) + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_WCWE_SET_32h; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x14;//14 + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_GATELESS1_30h; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x02; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_GATELESS2_27h; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x01; + send((uint8_t*)aTxBuffer, 2); + + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_VBP_SET_12h; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x08; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_VFP_SET_13h; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x08; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_DISPLAY_CON_15h; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x01; //SS=0 + //aTxBuffer[1] = 0x11; //SS=1 + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_COLOR_DEPTH_SET_16h; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x00; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_PENTILE_KEY_EFh; // write-only register... + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0xD0; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0xE8; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_PENTILE1_A0h; // write-only register... + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x00; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x63; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_PENTILE2_A1h; // write-only register... + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x00; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0xC0; // SID1&SID0=00 +// aTxBuffer[1] = 0xC4; // SID1&SID0=01 CC C8 C4 C0 + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_PENTILE3_A2h; // write-only register... + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x00; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x32; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_PENTILE4_A3h; // write-only register... + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x00; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x02; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_BRIGHTNESS_CTRL_39h; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x44;//44 + send((uint8_t*)aTxBuffer, 2); + + // GAMMA L=250 + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x40; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x00; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x41; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x3F; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x42; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x2A; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x43; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x27; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x44; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x27; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x45; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x1F; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x46; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x44; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x50; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x00; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x51; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x00; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x52; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x17; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x53; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x24; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x54; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x26; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x55; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x1F; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x56; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x43; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x60; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x00; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x61; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x3F; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x62; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x2A; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x63; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x25; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x64; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x24; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x65; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x1B; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x66; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x5C; + send((uint8_t*)aTxBuffer, 2); + + /* + // GAMMA L=150 + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x40; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x00; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x41; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x3F; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x42; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x2D; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x43; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x29; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x44; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x28; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x45; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x23; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x46; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x37; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x50; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x00; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x51; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x00; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x52; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x0B; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x53; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x25; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x54; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x28; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x55; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x22; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x56; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x36; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x60; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x00; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x61; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x3F; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x62; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x2B; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x63; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x28; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x64; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x26; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x65; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x1F; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = 0x66; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x4A; + send((uint8_t*)aTxBuffer, 2); + */ + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_BOOSTING_FREQ; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x22; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_AMP_SET_18h; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x22; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_GAMMA_AMP_19h; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x02; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_POWER_CONTROL2_1Ah; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x00; + send((uint8_t*)aTxBuffer, 2); + + /* + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_POWER_CONTROL2_1Bh; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x4B; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_POWER_CONTROL2_1Ch; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x05; + send((uint8_t*)aTxBuffer, 2); + */ + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_INTERNAL_LOGIC_VOLTAGE; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0xA2; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_POWER_SET; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x00; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_POWER_SET2; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x77; + send((uint8_t*)aTxBuffer, 2); + + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_DISPLAY_CONDITION_SET_26h; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0xA0; + send((uint8_t*)aTxBuffer, 2); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_STB_BY_OFF; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0xA0; + send((uint8_t*)aTxBuffer, 2); + + HAL_Delay(250); + + aTxBuffer[0] = 0x70; + aTxBuffer[1] = OLED_DDISP_ON; + send((uint8_t*)aTxBuffer, 2); + aTxBuffer[0] = 0x72; + aTxBuffer[1] = 0x03; + send((uint8_t*)aTxBuffer, 2); + +} + static void Display_Error_Handler(void) { - while(1) + //while(1) { } }
--- a/Discovery/Src/gfx_engine.c Mon Jul 22 16:40:14 2024 +0200 +++ b/Discovery/Src/gfx_engine.c Tue Aug 13 13:24:54 2024 +0200 @@ -184,6 +184,9 @@ static uint32_t GFX_doubleBufferOne(void); static uint32_t GFX_doubleBufferTwo(void); +static void GFX_LTDC_Init_display0(void); +static void GFX_LTDC_Init_display1(void); + /* Exported functions --------------------------------------------------------*/ @@ -3322,35 +3325,48 @@ void GFX_LTDC_Init(void) { - /* - HSYNC=10 (9+1) - HBP=10 (19-10+1) - ActiveW=480 (499-10-10+1) - HFP=8 (507-480-10-10+1) - - VSYNC=2 (1+1) - VBP=2 (3-2+1) - ActiveH=800 (803-2-2+1) - VFP=2 (805-800-2-2+1) - */ - - /* Timing configuration */ + if (hardwareDisplay == 1) + { + GFX_LTDC_Init_display1(); + } + else + { + GFX_LTDC_Init_display0(); + } +} + +void GFX_LTDC_Init_display0(void) +{ + /* Timing configuration */ + +#define ActiveH 800 +#define ActiveW 480 + +#define Hsync 10 +#define HFP 8 +#define HBP 10 + +#define Vsync 2 +#define VFP 2 +#define VBP 2 + + /* Horizontal synchronization width = Hsync - 1 */ - LtdcHandle.Init.HorizontalSync = 9; + LtdcHandle.Init.HorizontalSync = Hsync - 1; /* Vertical synchronization height = Vsync - 1 */ - LtdcHandle.Init.VerticalSync = 1; + LtdcHandle.Init.VerticalSync = Vsync -1; /* Accumulated horizontal back porch = Hsync + HBP - 1 */ - LtdcHandle.Init.AccumulatedHBP = 19; + LtdcHandle.Init.AccumulatedHBP = Hsync + HBP - 1; /* Accumulated vertical back porch = Vsync + VBP - 1 */ - LtdcHandle.Init.AccumulatedVBP = 3; + LtdcHandle.Init.AccumulatedVBP = Vsync + VBP - 1; /* Accumulated active width = Hsync + HBP + Active Width - 1 */ - LtdcHandle.Init.AccumulatedActiveW = 499;//500;//499; + LtdcHandle.Init.AccumulatedActiveW = Hsync + HBP + ActiveW- 1; /* Accumulated active height = Vsync + VBP + Active Heigh - 1 */ - LtdcHandle.Init.AccumulatedActiveH = 803; + LtdcHandle.Init.AccumulatedActiveH = Vsync + VBP + ActiveH - 1; /* Total width = Hsync + HBP + Active Width + HFP - 1 */ - LtdcHandle.Init.TotalWidth = 507;//508;//507; + LtdcHandle.Init.TotalWidth = Hsync + HBP + ActiveW + HFP - 1; /* Total height = Vsync + VBP + Active Heigh + VFP - 1 */ - LtdcHandle.Init.TotalHeigh = 805; + LtdcHandle.Init.TotalHeigh = Vsync + VBP + ActiveH + VFP - 1; /* Configure R,G,B component values for LCD background color */ LtdcHandle.Init.Backcolor.Red= 0; @@ -3363,7 +3379,7 @@ /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 192/4 = 48 Mhz */ /* LTDC clock frequency = PLLLCDCLK / LTDC_PLLSAI_DIVR_8 = 48/4 = 6Mhz */ -/* done in main.c SystemClockConfig +/* done in base.c SystemClockConfig PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC; PeriphClkInitStruct.PLLSAI.PLLSAIN = 192; @@ -3380,7 +3396,74 @@ LtdcHandle.Instance = LTDC; /* Configure the LTDC */ - if(HAL_LTDC_Init(&LtdcHandle) != HAL_OK) // auch init der GPIO Pins + if(HAL_LTDC_Init(&LtdcHandle) != HAL_OK) // initialize GPIO Pins, too + { + /* Initialization Error */ + GFX_Error_Handler(); + } +} + + +void GFX_LTDC_Init_display1(void) +{ + /* Timing configuration */ +#define ActiveH_d1 800 +#define ActiveW_d1 480 + +#define Hsync_d1 2 +#define HFP_d1 8 +#define HBP_d1 8 + +#define Vsync_d1 2 +#define VFP_d1 4 // make sure this value * VSYNC is also set in display.c for OLED_VFP_SET +#define VBP_d1 4 // make sure this value * VSYNC is also set in display.c for OLED_VBP_SET + + /* Horizontal synchronization width = Hsync - 1 */ + LtdcHandle.Init.HorizontalSync = Hsync_d1 - 1; + /* Vertical synchronization height = Vsync - 1 */ + LtdcHandle.Init.VerticalSync = Vsync_d1 -1; + /* Accumulated horizontal back porch = Hsync + HBP - 1 */ + LtdcHandle.Init.AccumulatedHBP = Hsync_d1 + HBP_d1 - 1; + /* Accumulated vertical back porch = Vsync + VBP - 1 */ + LtdcHandle.Init.AccumulatedVBP = Vsync_d1 + VBP_d1 - 1; + /* Accumulated active width = Hsync + HBP + Active Width - 1 */ + LtdcHandle.Init.AccumulatedActiveW = Hsync_d1 + HBP_d1 + ActiveW_d1 - 1; + /* Accumulated active height = Vsync + VBP + Active Heigh - 1 */ + LtdcHandle.Init.AccumulatedActiveH = Vsync_d1 + VBP_d1 + ActiveH_d1 - 1; + /* Total width = Hsync + HBP + Active Width + HFP - 1 */ + LtdcHandle.Init.TotalWidth = Hsync_d1 + HBP_d1 + ActiveW_d1 + HFP_d1 - 1; + /* Total height = Vsync + VBP + Active Heigh + VFP - 1 */ + LtdcHandle.Init.TotalHeigh = Vsync_d1 + VBP_d1 + ActiveH_d1 + VFP_d1 - 1; + + /* Configure R,G,B component values for LCD background color */ + LtdcHandle.Init.Backcolor.Red= 0; + LtdcHandle.Init.Backcolor.Blue= 0; + LtdcHandle.Init.Backcolor.Green= 0; + + /* LCD clock configuration */ + /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */ + /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 192 Mhz */ + /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 192/4 = 48 Mhz */ + /* LTDC clock frequency = PLLLCDCLK / LTDC_PLLSAI_DIVR_8 = 48/4 = 6Mhz */ + +/* done in base.c SystemClockConfig + + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC; + PeriphClkInitStruct.PLLSAI.PLLSAIN = 192; + PeriphClkInitStruct.PLLSAI.PLLSAIR = 4; + PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_8; + HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); +*/ + /* Polarity */ + LtdcHandle.Init.HSPolarity = LTDC_HSPOLARITY_AL; + LtdcHandle.Init.VSPolarity = LTDC_VSPOLARITY_AL; + LtdcHandle.Init.DEPolarity = LTDC_DEPOLARITY_AL; + LtdcHandle.Init.PCPolarity = LTDC_PCPOLARITY_IIPC;//LTDC_PCPOLARITY_IPC; + + LtdcHandle.Instance = LTDC; + + /* Configure the LTDC */ + if(HAL_LTDC_Init(&LtdcHandle) != HAL_OK) // initialize GPIO Pins, too { /* Initialization Error */ GFX_Error_Handler();