原文地址:http://www.cnblogs.com/NickQ/p/8857213.html

环境:keil5.20  STM32F407ZGT6  LCD(320*240)  STemwin:STemWin_Library_V1.1.2   电阻式触摸屏

准备:

STemWIn在裸机上的移植,需要准备STemwin空工程,Touch驱动。

开始移植:

第一步:先将Touch添加进工程,并测试和校准Touch.

第二步:新建Touch配置文件,如下

宏 TOUCH_AD_TOP TOUCH_AD_BOTTOM TOUCH_AD_LEFT TOUCH_AD_RIGHT是实测值,(测试方法参考正点原子的STemwin移植视频)
NICK_GUI_RESTOUCH_SET()函数将有LCD_X_Config()调用,初始化Touch参数。
 #include "GUI.h"
#include "Nick_touch.h" //Touch驱动
#include "Nick_lcd.h" //LCD驱动 ////与触摸屏有关定义,根据实际情况填写
#define TOUCH_AD_TOP 215 //按下触摸屏的顶部,写下 Y 轴模拟输入值。
#define TOUCH_AD_BOTTOM 3782 //按下触摸屏的底部,写下 Y 轴模拟输入值。
#define TOUCH_AD_LEFT 305 //按下触摸屏的左侧,写下 X 轴模拟输入值。
#define TOUCH_AD_RIGHT 3845 //按下触摸屏的右侧,写下 X 轴模拟输入值。 void GUI_TOUCH_X_ActivateX(void)
{
}
void GUI_TOUCH_X_ActivateY(void)
{
} int GUI_TOUCH_X_MeasureX(void)
{
return TP_Read_XOY(0XD0); //CMD_RDX=0XD0 读取X坐标
} int GUI_TOUCH_X_MeasureY(void)
{
return TP_Read_XOY(0X90); //CMD_RDX=0XD0 读取Y坐标
} void NICK_GUI_RESTOUCH_SET(void)
{
GUI_TOUCH_Calibrate(GUI_COORD_X,,lcddev.width,TOUCH_AD_LEFT,TOUCH_AD_RIGHT);
GUI_TOUCH_Calibrate(GUI_COORD_Y,,lcddev.height,TOUCH_AD_TOP,TOUCH_AD_BOTTOM);
}

第三步 :修改LCDConf_FlexColor_Template.c中LCD_X_Config,调用NICK_GUI_RESTOUCH_SET(),配置touch参数

 void NICK_GUI_RESTOUCH_SET(void);
void LCD_X_Config(void) { //2018/04/15-18:48:24 By Nick
// Physical display size
XSIZE_PHYS = lcddev.width;// To be adapted to x-screen size
YSIZE_PHYS = lcddev.height; // To be adapted to y-screen size
VXSIZE_PHYS = XSIZE_PHYS;
VYSIZE_PHYS = YSIZE_PHYS; GUI_DEVICE_CreateAndLink(&GUIDRV_Template_API,GUICC_M565,,);
LCD_SetSizeEx(,XSIZE_PHYS,YSIZE_PHYS);
LCD_SetVSizeEx(,VXSIZE_PHYS,VYSIZE_PHYS); NICK_GUI_RESTOUCH_SET();
}

第四步:编写Nick_stemwin_timer.c,使能定时器,为STEMWIN设置的心跳

 #include "stm32f4xx_conf.h"
#include "GUI.h"
#include "Nick_lcd.h"
#include "Nick_touch.h" extern volatile GUI_TIMER_TIME OS_TimeMS; //通用定时器3中断初始化
//arr:自动重装值。
//psc:时钟预分频数
//定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.
//Ft=定时器工作频率,单位:Mhz
//这里使用的是定时器3!
void TIM3_STemwin_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); ///使能TIM3时钟 TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //定时器分频
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInitStructure.TIM_Period=arr; //自动重装载值
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure); TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //允许定时器3更新中断
TIM_Cmd(TIM3,ENABLE); //使能定时器3 NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //定时器3中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; //抢占优先级1
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure); } //定时器3中断服务函数
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中断
{
OS_TimeMS ++;
if(OS_TimeMS% == ) GUI_TOUCH_Exec();
}
TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中断标志位
}

第五步:向工程文件夹中加入Demo测试文件

解压STemWin_Library_V1.1.2.rar ,打开STemWin_Library_V1.1.2\Project\文件夹.任意一个工程目录,以STM324xG-EVAL为例

不使用操作系统,所以选择Standalone

将Demo目录复制到工程目录中,并添加所有C文件到工程,并应用头文件路径。

打开GUIDEMO.C,将 #include "bsp.h"  修改为开发板对应的BSP头文件,如Nick用的是F407ZG,此处修改为#include "stm32f4xx_conf.h"

第六步:编写测试main.c

 #include "stm32f4xx_conf.h"
#include "GUI.h"
#include "GUI.h"
#include "Nick_lcd.h"
#include "Nick_touch.h" #include "GUIDEMO.h" void TIM3_STemwin_Init(u16 arr,u16 psc);
void TIM4_STemwin_Init(u16 arr,u16 psc); int main(void)
{
lcd_init(); //LCD初始化
TP_Init(); //Touch初始化
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_CRC,ENABLE);//使能CRC时钟,否则STemWin不能使用
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
TIM3_STemwin_Init(,); //1ms GUI_Init(); GUI_SetColor(GUI_RED);
GUI_SetBkColor(GUI_BLUE);
GUI_SetFont(&GUI_Font24_ASCII);
GUI_Clear();
GUI_DispStringAt("Hello World",,); GUI_Clear();
GUIDEMO_Main();
}

测试结果:

注:运行过程中可能会死机,原因是堆栈空间或分配给STemwin的内存达不到完整运行STemwin例程的要求,而出现死机。

解决如下:

1、加大堆栈大小。如下图。打开启动文件,如果发现黄色钥匙标记,表示只读文件,则需要修改启动文件属性。然后在修改.

Nick在此修改Stack_Size     为0x00000800    Heap_Size        0x00000400

即将下图默认大小扩大一倍。

2、加大内存空间给STemwin,修改GUIConf.c文件,修改为图式大小即可,测试成功。

3、将测试功能减少,修改#include "GUIDEMO.h"的配置宏,如下(包括但不限于此),将括号里修改为0,即关闭该功能测试。

STM32F407+STemwin学习笔记之STemwin移植补充Touch的更多相关文章

  1. STM32F407+STemwin学习笔记之STemwin移植

    原文链接:http://www.cnblogs.com/NickQ/p/8748011.html 环境:keil5.20  STM32F407ZGT6  LCD(320*240)  STemwin:S ...

  2. LwIP学习笔记——STM32 ENC28J60移植与入门

    0.前言     去年(2013年)的整理了LwIP相关代码,并在STM32上"裸奔"成功.一直没有时间深入整理,在这里借博文整理总结.LwIP的移植过程细节很多,博文也不可能一一 ...

  3. Docker学习笔记第一章:补充

    只记得学习后面的命令,忘记整理一些概念性的东西了,只能做个补充了=.= Docker虽然也是一种虚拟技术,但是不同于虚拟机的概念.Docker是一种以容器为主的技术,容器运行不需要模拟层(emulat ...

  4. AM335x(TQ335x)学习笔记——u-boot-2014.10移植

    根据最近移植u-boot-2014.10至TQ335x,基于这样的假设am335x evm移植.不是很多地方需要改变. 因为TI的am335x evm开发了使用eeprom船上保存配置信息.它使用不同 ...

  5. AM335x(TQ335x)学习笔记——USB驱动移植

    对于AM335x来讲,TI维护的USB驱动已经非常完善了,本文称之为移植,实际上仅仅是配置内核选项使能USB HOST/OTG功能.废话少说,直接动手开启AM335x的USB驱动配置项. Step1. ...

  6. AM335x(TQ335x)学习笔记——LCD驱动移植

    TI的LCD控制器驱动是非常完善的,共通的地方已经由驱动封装好了,与按键一样,我们可以通过DTS配置完成LCD的显示.下面,我们来讨论下使用DTS方式配置内核完成LCD驱动的思路. (1)初步分析 由 ...

  7. Java学习笔记35(sql补充)

    在上一篇里,写了数据库的增删该查,没有写完,这里补充 CREATE DATABASE Zs_Base; USE Zs_Base; # 创建表 CREATE TABLE PRODUCT( ID INT ...

  8. android菜鸟学习笔记11----Intent的两点补充

    关于Intent的两点补充: 1.隐式Intent启动组件,会有一个Intent解析的过程,若找不到能够处理该Intent的组件,程序就会异常终止.一个合理的做法是,在使用Intent实例启动组件如: ...

  9. PYTHON 100days学习笔记008-1:数据结构补充

    目录 Day008_01:数据结构补充 1.列表list 1.1 将列表当作堆栈使用 1.2 将列表当作队列使用 1.3 列表推导式 1.4 嵌套列表解析 1.5 del语句 2.元组和序列 3.集合 ...

随机推荐

  1. easyui的解析器Parser

    平时使用easyui做框架开发时,都知道easyui的模块组件能通过属性方法或js方法来渲染,本质上是通过parser解析器来处理实现的,因为多数情况下都是自动触发完成整个页面的解析,所以没有感觉到它 ...

  2. mongodb 3.4 TAR包启动多个实例

    1:解压压缩文件 tar .tgz mkdir /home/maxiangqian/ mv mongodb /home/maxiangqian/ 2:加入环境变量 export PATH/bin:$P ...

  3. SAP Cloud for Customer Sales Order Requested Date的业务含义和实现

    我们在创建Sales order销售订单时,需要指定一个RequestedDate: 这个字段绑定到了BO字段:CustomerQuote.RequestedFulfillmentPeriod.Tim ...

  4. 阅读《C陷阱与缺陷》的知识增量

    版权声明:本文为Focustc原创文章.转载请注明作者及出处. https://blog.csdn.net/caozhankui/article/details/35925939 看完<C陷阱与 ...

  5. 2019.1.3 Mac安装免费版StarUml3.0.2 &&&Xmind思维导图 &&Google浏览器***版

    下载StarUml http://staruml.io/ 好像需要FQ 附赠一个 链接:https://pan.baidu.com/s/1_pa9LwopowhOTum5g89zZQ 密码:fxtc ...

  6. ASP.NET Web API编程——构建api帮助文档

    1 概要 创建ASP.NET Web Api 时模板自带Help Pages框架. 2 问题 1)使用VS创建Web Api项目时,模板将Help Pages框架自动集成到其中,使得Web Api项目 ...

  7. 敏捷开发系列之旅 第五站(不一样的RUP统一软件开发过程)

    概述   RUP,统一软件开发过程,是一个面向对象且基于网络的程序开发方法论.根据Rational的说法,RUP就好像一个在线的指导者,他可以为所有方面和层次的程序开发提供指导方针.模板以及事例支持. ...

  8. 【题解】洛谷P2023 [AHOI2009] 维护序列(线段树)

    洛谷P2023:https://www.luogu.org/problemnew/show/P2023 思路 需要2个Lazy-Tag 一个表示加的 一个表示乘的 需要先计算乘法 再计算加法 来自你谷 ...

  9. OC对象里面包含的结构体类型的属性,不能对该结构体属性的成员单个进行修改

    OC对象里面包含的结构体类型的属性,不能对该结构体属性的成员单个进行修改,需要对OC对象的结构体属性整体赋值. 关于网上很多博客写着“结构体类型里面的某个属性如果想要修改是不允许单个修改的” 之解释: ...

  10. Visual Studio Installer打包安装项目VS2015

    使用VS2015的Visual Studio Installer打包安装项目,虽然整体操作很简单,但还是有几个特殊的点需要记一下,故写下此博客方便以后查阅 第一步,创建安装项目 如下: 里面最左侧的框 ...