emwin移植1「建议收藏」

emwin移植1「建议收藏」声明:本文是转载的  原文地址:https://blog.csdn.net/wangyijieonline/article/details/76795084 之所以转载,就试为了做一个笔记而已,也为方便后来人,对原作者表示感谢 然后有了一个正常显示的demo还不够,还必须要准备好这么几个函数,后面要用到。 1,LCD_DrawPoint(x,y,PixelIndex);//画点…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

声明:本文是转载的  

原文地址:https://blog.csdn.net/wangyijieonline/article/details/76795084 

之所以转载,就试为了做一个笔记而已,也为方便后来人,对原作者表示感谢

 

然后有了一个正常显示的demo还不够,还必须要准备好这么几个函数,后面要用到。 
1,LCD_DrawPoint(x,y,PixelIndex); //画点函数,注意有三个参数 
2,LCD_ReadPoint(x,y);//读点的颜色,两个参数 
3,LCD_Fill(x0,y0,x1,y1,LCD_COLORINDEX);//清屏函数,不能用自带的,太慢了

其实这几个函数应该很好准备,如果你的LCD已经正常显示了,那么说明LCD_DrawPoint和LCD_Fill最起码已经可用,或者修改一下可用,readpoint需要着重的准备下。

正题开始了,理论上来说,移植STemwin应该是有两种方法,第一种是完全不用STemwin的接口,使用我们自己的,这就是上面准备的几个函数的用途,第二种方法是直接填充STemwin的画点等相关函数,当然这两种方法也可以同时移植但是最后用哪种方法是怎么选择呢,答案就是LCDConf_FlexColor_Template.c 中的LCD_X_Config函数中的GUI_DEVICE_CreateAndLink接口。 
如果设置为

GUI_DEVICE_CreateAndLink(&GUIDRV_Template_API, GUICC_M565, 0, 0);
1
则使用的是我们自己的接口 
如果是

 GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_M565, 0, 0);
1
则使用默认的填充接口。 
注意了这个地方有个注意的点,就是GUICC_M565 和 GUICC_565 ,这两兄弟看起来很像,其实他们所表示的颜色是完全反相的。

我们先来说第一种移植方法(使用自己的接口): 
第一步:新建一个LCD_Conf.h文件,空文件即可,里面不需要有内容 
第二步:打开LCDConf_FlexColor_Template.c 屏蔽掉LCD_X_Config函数前面的四个函数,对了,这四个函数就是第二种方法需要填充的,这里先把话说清楚为什么不要了。而 LCD_X_Config函数也要屏蔽一些东西,如下

void LCD_X_Config(void) {

    //
  // Set display driver and color conversion
  //
  GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_M565, 0, 0);
  //
  // Display driver configuration, required for Lin-driver
  //
  LCD_SetSizeEx (0, XSIZE_PHYS , YSIZE_PHYS);
  LCD_SetVSizeEx(0, VXSIZE_PHYS, VYSIZE_PHYS);
  //
  // Orientation
  //
//  Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_Y;
//  GUIDRV_FlexColor_Config(pDevice, &Config);
//  //
//  // Set controller and operation mode
//  //
//  PortAPI.pfWrite16_A0  = LcdWriteReg;
//  PortAPI.pfWrite16_A1  = LcdWriteData;
//  PortAPI.pfWriteM16_A1 = LcdWriteDataMultiple;
//  PortAPI.pfReadM16_A1  = LcdReadDataMultiple;
//  GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66708, GUIDRV_FLEXCOLOR_M16C0B16);
}

屏蔽掉的是引用的函数,只留下三行。

下面还有个函数 LCD_X_DisplayDriver ,这个函数的作用,如官方所说

  这是显示驱动的回调函数。显示驱动在多个任务中要调用该函数。将一个命令和一个指向某个数据结构的指针传给回调程序。该命令告诉回调函数需要做什么。如果命令需要参数,则通过数据指针pData 传送。
1
我们用这个函数来做初始化的工作,在return 0前面写上你的LCDTFT_Init(),注意最好不要把你的函数写成LCDTFT_Init() ,因为STemwin自带了一个lcd.c lcd.h 预防冲突。

第二步,打开GUIDRV_Template.c 找到_SetPixelIndex 函数,在注释下面加上我们的打点函数

GUI_USE_PARA(PixelIndex);
 {

      //
      // Write into hardware … Adapt to your system
      //
            LCD_DrawPoint(x,y,PixelIndex);
}

再往下看_GetPixelIndex ,在注释下面加上读点函数

GUI_USE_PARA(y);
{

  //
  // Write into hardware … Adapt to your system
  //
  PixelIndex = LCD_ReadPoint(x,y);
  PixelIndex = 0;
}

再往下看_FillRect 函数,把else部分改成LCD_Fill,不然清屏太慢了

else {

//    for (; y0 <= y1; y0++) {

//      for (x = x0; x <= x1; x++) {

//        _SetPixelIndex(pDevice, x, y0, PixelIndex);
//      }
//    }
    LCD_Fill(x0,y0,x1,y1,LCD_COLORINDEX);
  }

到此为止,第三步也结束了,也没有很难对不对。

更正:经实测发现这个清屏函数改了以后虽然刷屏速度上来了,但是会出现显示花屏的情况,所以说这个函数大家根据自己的情况修改。

第四步:打开 GUIConf.c 文件,找到GUI_NUMBYTES ,改成

#define GUI_NUMBYTES  1024 *40
1
这个是定义的Emwin所占的内存空间,如果太大的话,就会出现 
Error: L6406E: No space in execution regions with .ANY selector matching lcd.o(.data). 
类似的错误。

第六步:打开stm32f4xx_it.c 找到SysTick_Handler 改为如下

extern __IO int32_t OS_TimeMS;

void SysTick_Handler(void)
{

    OS_TimeMS++;
    if(OS_TimeMS%100 == 0)
    {

        LED1 = !LED1;//加个LED指示一下
    }
}

到这里移植就算是完成了,剩下的就是,写个mian函数测试一下了

#include “Global.h”
#include “lcd.h”
#include “WM.h”
#include “GUI.h”
#include “led.h”
#include “usart.h”
#include “delay.h”
#include “lcd9341.h”

int main(void)
{

    LED_Init();
    USART1_init();

    SysTick_Config(SystemCoreClock / 1000);//要加上这句话,开启Systick中断

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_CRC, ENABLE); //要加上这句话,打开CRC时钟
    WM_SetCreateFlags(WM_CF_MEMDEV);//要加上这句话,允许存储器
    GUI_Init();//要加上这句话,Init
    GUI_Clear();
    GUI_DispStringAt(“Hello World!”,30,120);

    while(1);
}

原文:https://blog.csdn.net/wangyijieonline/article/details/76795084 
 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181833.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月15日 上午8:36
下一篇 2022年10月15日 上午8:46


相关推荐

  • CefSharp之二–如何看懂demo中的例子,以及按照例子进行开发「建议收藏」

    CefSharp之二–如何看懂demo中的例子,以及按照例子进行开发「建议收藏」CefSharp是做什么用的?请看前一篇文章:怎么用c#编写浏览器或者执行javascript代码?之后就是如何开发了。这个CefSharp最坑的是,还早不到文档,只能看着官方给的例子开发。项目地址那么就可以看到,带有example的都是例子。我给大家举2个例子。1.事件添加:我想让我的程序出了网页上的js代码,再额外的执行我自己写的js,怎么办呢?InitializeCom

    2026年1月23日
    7
  • 实例分割总结 Instance Segmentation Summary[通俗易懂]

    实例分割总结 Instance Segmentation Summary[通俗易懂]实例分割:机器自动从图像中用目标检测方法框出不同实例,再用语义分割方法在不同实例区域内进行逐像素标记借一个浅显的说法:语义分割不区分属于相同类别的不同实例。例如,当图像中有多只猫时,语义分割会将两只猫整体的所有像素预测为“猫”这个类别。与此不同的是,实例分割需要区分出哪些像素属于第一只猫、哪些像素属于第二只猫基本思路目标检测+语义分割。SDS-&gt;HyperColumns-&gt…

    2022年8月23日
    8
  • LoadRunner压力测试:测试报告结果分析

    LoadRunner压力测试:测试报告结果分析我们以测试场景“登录-退出”为例,对测试报告的结果进行分析说明。一、测试说明功能登录退出测试目的进行用户登录,评估服务器增长能力场景说明打开登录首页,用户名登录;进入登录后首页页面,点击退出登录事务说明用户登录动态数据说明登录用户名/登

    2022年7月18日
    25
  • sourceinsight4.0序列号_source insight 4

    sourceinsight4.0序列号_source insight 4先关闭Souceinsight。打开C:\ProgramData\SourceInsight\4.0\si4.lic将Date和Expiration都加一年(比今年多一年即可),保存。重新打开Souceinsight,会提示重新输入用户名和邮箱,继续试用30days。

    2022年10月3日
    5
  • Python websocket_php需要编译吗

    Python websocket_php需要编译吗这里很坑爹………地址换了….网上到处都是旧的github地址….更郁闷的是旧地址的代码在centos等各个linux都能编译通过,但是到了mac就郁闷了,各种报错…..坑爹来的然后很多人说hs没在维护了,那是因为他们看到的是旧的git代码地址….囧…..搞死我了,我还真以为他不更新了,看到git项目,3年没更新了,心都凉了……各种找错误各种…

    2022年8月24日
    7
  • 助臂_有所臂助

    助臂_有所臂助第十章助臂  一个好汉三个帮,程序员同样如此。  我怀着异样的心情去了天龙。也许是ANGEL的出现感染了我,给我感觉到了压迫,我比往常更努力的投入到工作中去,我必须尽快完成眼前这个工程,然后全心投入到智能杀毒软件的研究中去。  思考再三后,我还是把DENNIS信里的内容告诉了李珏和赵思聪,他两当场就被震住了。  “真的可能写出智能化的病毒吗?”赵思聪不可思议的问道。  我点了点头,无奈的说道:

    2022年8月31日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号