2015-08-28 01:57 AM
Hi STM32 Users,
I would like to request your help in the following problem. I am using STM32F427VG and HX8357D with FMC controller in 16 bit mode RGB565. I successfully integrated the STemWin library with STM32Cube_FW_F4_V1.7.0. RED and BLUE color were swapped but after using GUICC_M565 it is solved. in LCDConf_FlexColor_Template.c at function void LCD_X_Config(void)...pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_M565, 0, 0);...GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66709, GUIDRV_FLEXCOLOR_M16C0B16);...The problem is with the anti-aliased circles (maybe other polygons are involved too). The colors which are used by the library is not correct. Look at the picture: there are Red green and blue circles on red green and blue rectangles. I think the red circle on red background shouldn't be seen. Attached the picturehttps://goo.gl/photos/cq1wQaMWtXFFPwEo9Any help would be appreciatedThank you in advance,Dave #stemwin #stm32f4 #hx8367d2015-08-31 08:34 AM
Hi molnar.david,
Try to use 24-bits resolution with RGB888,
normally you will get a better resolution,
since every color will be coded on 8 bits.
-Shahrzad-
2015-09-01 05:00 AM
Dear shahrzad,
Thank you for your answer.I think 24 bit resolution would slow down a lot of processes and unmanagable by flexdriver with HX8357D (color format problems).However I found a solution:Convert data at dataRead function to correct fromat for stemwin:/********************************************************************** LcdReadDataMultiple** Function description:* Reads multiple values from a display register.*/static void LcdReadDataMultiple(U16 * pData, int NumItems) { hx8357_setCSX(1); *pData++ = hx8357_readData(); // dummy read NumItems--; while (NumItems--) { uint16_t redgreen = hx8357_readData(); // highbyte red in 8 bit format, lowbyte green in 8 bit format uint16_t bluered = hx8357_readData(); // highbyte blue in 8 bit format, lowbyte red in 8 bit format // 24 bit format color uint8_t red = (redgreen >> 8) & 0xFF; uint8_t green = redgreen & 0xFF; uint8_t blue = bluered >> 8; uint16_t value= (uint16_t) (((uint16_t)(red >> 3) << 11) | ((green >> 2) << 5) | (blue >> 3)); *pData++ = value; } hx8357_setCSX(0);} to read only once from display use: GUIDRV_FlexColor_SetReadFunc66709_B16(pDevice,GUIDRV_FLEXCOLOR_IF_TYPE_II);Best regards,Dave