Mercurial > public > ostc4
view Discovery/Src/display.c @ 873:e373e90a48db Evo_2_23
merge new screen stuff
author | heinrichsweikamp |
---|---|
date | Wed, 14 Aug 2024 16:44:46 +0200 |
parents | f7318457df4d |
children | 6b06143cbfea |
line wrap: on
line source
#include "stm32f4xx_hal.h" /* for HAL_Delay() */ #include "ostc.h" #include "display.h" #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) { 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(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; } else { // re-reset the screen to be sure the 0x71 command did nothing 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(25); } /* RGB signals should be now for 2 frames or more (datasheet) */ } static void send(uint8_t *pData, uint16_t inputlength) { HAL_GPIO_WritePin(DISPLAY_CSB_GPIO_PORT,DISPLAY_CSB_PIN,GPIO_PIN_RESET); // chip select if(HAL_SPI_Transmit(&hspiDisplay,(uint8_t*)pData, inputlength, 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 } 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) { uint16_t outputlength; uint8_t readbit = 0x80;//0b1000000; uint8_t writebit = 0x40;//0b0100000; uint16_t i,j,k; outputlength = ((inputlength+7)/8)*9; for(i=0;i<outputlength;i++) pOutput[i] = 0; k = 0; for(i=0;i<inputlength;i++) { if(i != 0) { pOutput[k] |= writebit; // 9. bit writebit = writebit >> 1; if(writebit == 0) { writebit = 0x80; k++; } } for(j=0;j<8;j++) { if((pInput[i] & readbit) != 0) { pOutput[k] |= writebit; } readbit = readbit >> 1; if(readbit == 0) readbit = 0x80; writebit = writebit >> 1; if(writebit == 0) { writebit = 0x80; k++; } } } return outputlength; } 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; for(i=0;i<32;i++) aTxBuffer[i] = 0; for(i=0;i<36;i++) bTxBuffer[i] = 0; 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] = TFT_SET_POWER; aTxBuffer[1] = 0x81; aTxBuffer[2] = 0x24; aTxBuffer[3] = 0x04; aTxBuffer[4] = 0x02; aTxBuffer[5] = 0x02; aTxBuffer[6] = 0x03; aTxBuffer[7] = 0x10; aTxBuffer[8] = 0x10; aTxBuffer[9] = 0x34; aTxBuffer[10] = 0x3C; aTxBuffer[11] = 0x3F; aTxBuffer[12] = 0x3F; length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,13); send((uint8_t*)bTxBuffer, length); 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] = TFT_DISPLAY_INVERSION_OFF; length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,1); send((uint8_t*)bTxBuffer, length); 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] = 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] = TFT_SET_POWER; aTxBuffer[1] = 0x78; aTxBuffer[2] = 0x24; aTxBuffer[3] = 0x04, aTxBuffer[4] = 0x02; aTxBuffer[5] = 0x02; aTxBuffer[6] = 0x03; aTxBuffer[7] = 0x10; aTxBuffer[8] = 0x10; aTxBuffer[9] = 0x34; aTxBuffer[10] = 0x3C; aTxBuffer[11] = 0x3F; aTxBuffer[12] = 0x3F; length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,13); send((uint8_t*)bTxBuffer, length); 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] = TFT_SET_DISPLAY_WAVEFORM; aTxBuffer[1] = 0x00; aTxBuffer[2] = 0x08; aTxBuffer[3] = 0x56; aTxBuffer[4] = 0x07; aTxBuffer[5] = 0x01; aTxBuffer[6] = 0x01; aTxBuffer[7] = 0x4D; aTxBuffer[8] = 0x01; aTxBuffer[9] = 0x42; length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,10); send((uint8_t*)bTxBuffer, length); aTxBuffer[0] = TFT_SET_PANEL; aTxBuffer[1] = 0x0B; length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,2); send((uint8_t*)bTxBuffer, length); aTxBuffer[0] = TFT_SET_GAMMA_CURVE_RELATED; aTxBuffer[1] = 0x01; aTxBuffer[2] = 0x48; aTxBuffer[3] = 0x4D; aTxBuffer[4] = 0x4E; aTxBuffer[5] = 0x58; aTxBuffer[6] = 0xF6; aTxBuffer[7] = 0x0B; aTxBuffer[8] = 0x4E; aTxBuffer[9] = 0x12; aTxBuffer[10] = 0xD5; aTxBuffer[11] = 0x15; aTxBuffer[12] = 0x95; aTxBuffer[13] = 0x55; aTxBuffer[14] = 0x8E; aTxBuffer[15] = 0x11; aTxBuffer[16] = 0x01; aTxBuffer[17] = 0x48; aTxBuffer[18] = 0x4D; aTxBuffer[19] = 0x55; aTxBuffer[20] = 0x5F; aTxBuffer[21] = 0xFD; aTxBuffer[22] = 0x0A; aTxBuffer[23] = 0x4E; aTxBuffer[24] = 0x51; aTxBuffer[25] = 0xD3; aTxBuffer[26] = 0x17; aTxBuffer[27] = 0x95; aTxBuffer[28] = 0x96; aTxBuffer[29] = 0x4E; aTxBuffer[30] = 0x11; length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,31); send((uint8_t*)bTxBuffer, length); HAL_Delay(5+1); 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) { } }