TA的每日心情 | 慵懒 2024-7-12 21:42 |
---|
签到天数: 229 天 连续签到: 1 天 [LV.7]常住居民III
|
本帖最后由 az158 于 2022-9-25 16:46 编辑
前不久拿到了DFRobot家的DFR0669显示屏,今天做一个简单的试用。
板子做工针不戳,黑板加沉金很有质感(排针是我焊的,屏幕本身提供了排针跟排线两种连接方式,可以按需选择)。
拿到板卡先找资料,去了一趟DFRobot官网,发现他家资料是做的真不错,描述很清晰,而且资料也很全,不过,怎么全是针对Arduino的啊,对我太不友好了(手上一块Arduino都没有),不过提供的资料很全,就写一下在STM32下的驱动吧。
掏出我的STM32WB55的小板卡一通乱写,突然发现能用模拟SPI跑,但是用硬件SPI不行。试着对硬件SPI降频,好了。然后优化了一下,效果如下,刷屏感很重。
换个角度拍点图(能看到触摸屏跟屏幕配合不是很好,上面没遮住,下面多遮了,不过无伤大雅),可视角度还不错。
看了看手册,这屏的驱动芯片是ILI9488,这玩意SPI模式下跑不快,一般这颗驱动芯片的屏都是走并口驱动。试了试SPI最多也就能跑到20MHz,这可比ST7789低多了。不过ST7789最大支持的分辨率320x240,这块屏是480x320,没法用。
总体试用下来还是很满意的,资料很全,屏幕可视角度也不错,屏幕细腻度也挺好,最大的问题就是这分辨率用SPI驱,而且频率上不去,效果不太满意。但是想想,这个产品本身就是面对Arduino用户开发的,对于他们来说这块屏提供了更多的选择,能提供更好的效果,在开发的时候多用局部刷新,整体效果还是能做到不错的。
最后附上屏幕的初始化程序:
- #define SCLK_H() HAL_GPIO_WritePin(SCLK_GPIO_Port, SCLK_Pin, GPIO_PIN_SET);
- #define SCLK_L() HAL_GPIO_WritePin(SCLK_GPIO_Port, SCLK_Pin, GPIO_PIN_RESET);
- #define MOSI_H() HAL_GPIO_WritePin(MOSI_GPIO_Port, MOSI_Pin, GPIO_PIN_SET);
- #define MOSI_L() HAL_GPIO_WritePin(MOSI_GPIO_Port, MOSI_Pin, GPIO_PIN_RESET);
- #define CS_H() HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET);
- #define CS_L() HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET);
- #define RES_H() HAL_GPIO_WritePin(RES_GPIO_Port, RES_Pin, GPIO_PIN_SET);
- #define RES_L() HAL_GPIO_WritePin(RES_GPIO_Port, RES_Pin, GPIO_PIN_RESET);
- #define DC_H() HAL_GPIO_WritePin(DC_GPIO_Port, DC_Pin, GPIO_PIN_SET);
- #define DC_L() HAL_GPIO_WritePin(DC_GPIO_Port, DC_Pin, GPIO_PIN_RESET);
- uint8_t SPI1_ReadWriteByte(uint8_t TxData)
- {
- uint8_t Rxdata;
- HAL_SPI_TransmitReceive(&hspi1,&TxData,&Rxdata,1, 1000);
- return Rxdata; //返回收到的数据
- }
- void LCD_ILI9488_CMD(unsigned char val)
- {
- unsigned char count = 0;
- DC_L();
- CS_L();
- SPI1_ReadWriteByte(val);
- // for(count = 0 ; count < 8 ; count++)
- // {
- // SCLK_L();
- // if((val&0x80)==0x80)
- // {
- // MOSI_H();
- // }
- // else
- // {
- // MOSI_L();
- // }
- // SCLK_H();
- // val=val<<1;
- // }
- CS_H();
- }
- void LCD_ILI9488_INDEX(unsigned char val)
- {
- unsigned char count = 0;
- DC_H();
- CS_L();
- SPI1_ReadWriteByte(val);
- // for(count = 0 ; count < 8 ; count++)
- // {
- // SCLK_L();
- // if((val&0x80)==0x80)
- // {
- // MOSI_H();
- // }
- // else
- // {
- // MOSI_L();
- // }
- // SCLK_H();
- // val=val<<1;
- // }
- CS_H();
- }
- void LCD_Init(void)
- {
- RES_H();
- HAL_Delay(1);
- RES_L();
- HAL_Delay(10);
- RES_H();
- HAL_Delay(120);
- LCD_ILI9488_CMD(0XF7);
- LCD_ILI9488_INDEX(0xA9);
- LCD_ILI9488_INDEX(0x51);
- LCD_ILI9488_INDEX(0x2C);
- LCD_ILI9488_INDEX(0x82);
-
- LCD_ILI9488_CMD(0xC0);
- LCD_ILI9488_INDEX(0x11);
- LCD_ILI9488_INDEX(0x09);
-
- LCD_ILI9488_CMD(0xC1);
- LCD_ILI9488_INDEX(0x41);
-
- LCD_ILI9488_CMD(0xC5);
- LCD_ILI9488_INDEX(0x00);
- LCD_ILI9488_INDEX(0x0A);
- LCD_ILI9488_INDEX(0x80);
-
- LCD_ILI9488_CMD(0xB1); //Frame rate 60HZ
- LCD_ILI9488_INDEX(0xB0);
- LCD_ILI9488_INDEX(0x11);
-
- LCD_ILI9488_CMD(0xB4);
- LCD_ILI9488_INDEX(0x02);
-
- LCD_ILI9488_CMD(0xB6); //RGB/MCU Interface Control
- LCD_ILI9488_INDEX(0x02);
- LCD_ILI9488_INDEX(0x22);
-
- LCD_ILI9488_CMD(0xB7);
- LCD_ILI9488_INDEX(0xc6);
- LCD_ILI9488_CMD(0XBE);
- LCD_ILI9488_INDEX(0x00);
- LCD_ILI9488_INDEX(0x04);
-
- LCD_ILI9488_CMD(0xE9);
- LCD_ILI9488_INDEX(0x00);
-
- LCD_ILI9488_CMD(0x36);
- LCD_ILI9488_INDEX(0x08);
- LCD_ILI9488_CMD(0x3A); //Interface Mode Control
- LCD_ILI9488_INDEX(0x66);
-
- LCD_ILI9488_CMD(0xE0);
- LCD_ILI9488_INDEX(0x00);
- LCD_ILI9488_INDEX(0x07);
- LCD_ILI9488_INDEX(0x10);
- LCD_ILI9488_INDEX(0x09);
- LCD_ILI9488_INDEX(0x17);
- LCD_ILI9488_INDEX(0x0b);
- LCD_ILI9488_INDEX(0x41);
- LCD_ILI9488_INDEX(0x89);
- LCD_ILI9488_INDEX(0x4b);
- LCD_ILI9488_INDEX(0x0a);
- LCD_ILI9488_INDEX(0x0c);
- LCD_ILI9488_INDEX(0x0e);
- LCD_ILI9488_INDEX(0x18);
- LCD_ILI9488_INDEX(0x1b);
- LCD_ILI9488_INDEX(0x0f);
-
- LCD_ILI9488_CMD(0xE1);
- LCD_ILI9488_INDEX(0x00);
- LCD_ILI9488_INDEX(0x17);
- LCD_ILI9488_INDEX(0x1a);
- LCD_ILI9488_INDEX(0x04);
- LCD_ILI9488_INDEX(0x0e);
- LCD_ILI9488_INDEX(0x06);
- LCD_ILI9488_INDEX(0x2f);
- LCD_ILI9488_INDEX(0x45);
- LCD_ILI9488_INDEX(0x43);
- LCD_ILI9488_INDEX(0x02);
- LCD_ILI9488_INDEX(0x0a);
- LCD_ILI9488_INDEX(0x09);
- LCD_ILI9488_INDEX(0x32);
- LCD_ILI9488_INDEX(0x36);
- LCD_ILI9488_INDEX(0x0f);
-
- LCD_ILI9488_CMD(0x11);
- HAL_Delay(120);
- LCD_ILI9488_CMD(0x20);
- LCD_ILI9488_CMD(0x29);
- }
复制代码
|
|