原文地址: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. 如何让LoadRunner实现多个场景运行?

    如何让LoadRunner实现多个场景运行? 发布时间: 2013-11-29 10:59    作者: stevenlee    来源: 51Testing软件测试网博客 字体:  小  中  大  ...

  2. javascript 随机数 生成 n-m

    例子:生成800-1500的随机整数,包含800但不包含1500 代码如下: 1500-800 = 700 Math.random()*700 var num = Math.random()*700 ...

  3. Mysql学习---全国省市区以及邮编数据库

    更多下载

  4. Hadoop学习---CentOS中hadoop伪分布式集群安装

    注意:此次搭建是在ssh无密码配置.jdk环境已经配置好的情况下进行的 可以参考: Hadoop完全分布式安装教程 CentOS环境下搭建hadoop伪分布式集群 1.更改主机名 执行命令:vi  / ...

  5. JS 和 Jq 获取客户端各种屏幕宽度和高度

    //javascript 网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHeight 网页可见区域宽: documen ...

  6. Spring-aop实现切面的四种方式(1)

    Spring实现AOP的4种方式 先了解AOP的相关术语:1.通知(Advice):通知定义了切面是什么以及何时使用.描述了切面要完成的工作和何时需要执行这个工作.2.连接点(Joinpoint):程 ...

  7. SpringMVC 如何定义类型转换器

    举例说明, 将一个字符串转换成的 User 类型. 例如将字符串 1-zcd-1234-zcd@163.com-1999/12/12  转换成User 类型. 一.实体类 public class U ...

  8. maven工程src/main/java目录无法创建问题

    在项目上右键选择properties,然后点击Javabuild path,在Librarys下,编辑JRE System Library,选择 workspace default jre 即可

  9. swift菜鸟入门视频教程-02-基本运算符

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/mengxiangyue/article/details/32435435 本人自己录制的swift菜 ...

  10. BZOJ2337:[HNOI2011]XOR和路径(高斯消元)

    Description 给定一个无向连通图,其节点编号为 1 到 N,其边的权值为非负整数.试求出一条从 1 号节点到 N 号节点的路径,使得该路径上经过的边的权值的“XOR 和”最大.该路径可以重复 ...