查看: 95|回复: 1

[GD32F450方案分享] GD32F450移植emwin

[复制链接]

2

主题

0

好友

81

积分

童生

Rank: 2

该用户从未签到

发表于 2017-6-15 21:07:30 |显示全部楼层
本帖最后由 sumengqi 于 2017-6-20 00:56 编辑

老早就收到开发板,无奈最近一直很忙,终于抽出时间发帖,分享一下我移植emwin的过程。
①:调屏,要emwin首先要把TFT液晶屏调通,我用的是spi接口的显示器,分辨率320*240.屏幕调试很简单,商家给的驱屏程序移植过来改一下接口就能用。
  1. 底层驱动:
  2. void LCD_WR_DATA8( char da ) /* 发送数据-8位参数 */
  3. {
  4.         while ( RESET == spi_i2s_flag_get( SPI0, SPI_FLAG_TBE ) );
  5.         LCD_DC_H;
  6.         SPI_DATA( SPI0 ) = (uint32_t) da;
  7. }


  8. void LCD_WR_DATA( int da )
  9. {
  10.         while ( RESET == spi_i2s_flag_get( SPI0, SPI_FLAG_TBE ) );
  11.         LCD_DC_H;
  12.         SPI_DATA( SPI0 ) = (uint32_t) (da >> 8);
  13.         while ( RESET == spi_i2s_flag_get( SPI0, SPI_FLAG_TBE ) );
  14.         SPI_DATA( SPI0 ) = (uint32_t) da;
  15. }


  16. void LCD_WR_REG( char da )
  17. {
  18.         while ( RESET == spi_i2s_flag_get( SPI0, SPI_FLAG_TBE ) );
  19.         LCD_DC_L;
  20.         SPI_DATA( SPI0 ) = (uint32_t) da;
  21. }


  22. void LCD_WR_REG_DATA( int reg, int da )
  23. {
  24.         LCD_WR_REG( reg );
  25.         LCD_WR_DATA( da );
  26. }
复制代码
屏幕测试:显示"Hello World",附加垂直滚动效果
视频:

代码很简单:
  1. while(1)
  2.         {
  3.                 LCD_ShowString(0,i++,"Hello World!");
  4.                 delay_ms(10);
  5.         }
复制代码
屏幕正常点亮之后就要进行第二步,添加emwin到工程。添加的文件不多,如下图所示:

emwin库文件

emwin库文件

添加库文件之后,要配置emwin与屏幕驱动的接口。代码如下:
  1. static void _SetPixelIndex(GUI_DEVICE * pDevice, int x, int y, int PixelIndex) {
  2.     //
  3.     // Convert logical into physical coordinates (Dep. on LCDConf.h)
  4.     //
  5.     #if (LCD_MIRROR_X == 1) || (LCD_MIRROR_Y == 1) || (LCD_SWAP_XY == 1)
  6.       int xPhys, yPhys;

  7.       xPhys = LOG2PHYS_X(x, y);
  8.       yPhys = LOG2PHYS_Y(x, y);
  9.     #else
  10.       #define xPhys x
  11.       #define yPhys y
  12.     #endif
  13.     GUI_USE_PARA(pDevice);
  14.     GUI_USE_PARA(x);
  15.     GUI_USE_PARA(y);
  16.     GUI_USE_PARA(PixelIndex);
  17.     {
  18.                         POINT_COLOR = PixelIndex;
  19.                         LCD_DrawPoint(x,y);
  20.     }
  21.     #if (LCD_MIRROR_X == 0) && (LCD_MIRROR_Y == 0) && (LCD_SWAP_XY == 0)
  22.       #undef xPhys
  23.       #undef yPhys
  24.     #endif
  25. }
复制代码
添加读点和写点函数emwin就能正常工作,但是我这个屏幕商家没提供读点函数,自己也不想捣鼓了,添加写点函数就能满足emwin大部分操作,我就只添加了LCD_DrawPoint(x,y);。
下一步还得进行emwin的相关配置,比如屏幕分辨率,色彩,显存大小等。
  1. #define XSIZE_PHYS  240 // To be adapted to x-screen size
  2. #define YSIZE_PHYS  320 // To be adapted to y-screen size
  3. void LCD_X_Config(void) {
  4.   GUI_DEVICE * pDevice;
  5. //  CONFIG_FLEXCOLOR Config = {0};
  6. //  GUI_PORT_API PortAPI = {0};
  7.   //
  8.   // Set display driver and color conversion
  9.   //
  10.   pDevice = GUI_DEVICE_CreateAndLink(&GUIDRV_Template_API, GUICC_M565, 0, 0);
  11.   //
  12.   // Display driver configuration, required for Lin-driver
  13.   //
  14.   LCD_SetSizeEx (0, XSIZE_PHYS , YSIZE_PHYS);
  15.   LCD_SetVSizeEx(0, VXSIZE_PHYS, VYSIZE_PHYS);
  16.   //
  17.   // Orientation
  18.   //
  19. }
复制代码
我给了64KB的内存空间供emwin使用。
  1. #define GUI_NUMBYTES  64*1024
  2. #define GUI_BLOCKSIZE 0X80  //块大小
复制代码
现在可以执行emwin初始化以及它自带的Demo了。跑起来看看效果:
  1. int main()
  2. {        
  3.         Lcd_Init();
  4.         delay_ms(10);
  5.         GUI_Init();
  6.         GUI_Clear();
  7.         GUIDEMO_Main();
  8. }
复制代码

demo

demo


demo

demo

这个当时没有拍视频,demo的样子大家都知道。

好了,到此为止GD32F450移植emwin就完成了,欢迎大家拍砖。

分享我的预期成果:基于GD32F450以及ESP8266的网络信息发布屏
回复

使用道具 举报

2

主题

0

好友

81

积分

童生

Rank: 2

该用户从未签到

发表于 2017-6-20 00:56:30 |显示全部楼层
这论坛好冷清,发帖都没人回。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /4 下一条

手机版|爱板网 |网站地图  

GMT+8, 2017-6-28 08:21 , Processed in 0.137335 second(s), 12 queries , Memcache On.

苏公网安备 32059002001056号

Powered by Discuz!

回顶部