STM32F407+STemwin学习笔记之STemwin移植补充Touch
原文地址: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的更多相关文章
- STM32F407+STemwin学习笔记之STemwin移植
原文链接:http://www.cnblogs.com/NickQ/p/8748011.html 环境:keil5.20 STM32F407ZGT6 LCD(320*240) STemwin:S ...
- LwIP学习笔记——STM32 ENC28J60移植与入门
0.前言 去年(2013年)的整理了LwIP相关代码,并在STM32上"裸奔"成功.一直没有时间深入整理,在这里借博文整理总结.LwIP的移植过程细节很多,博文也不可能一一 ...
- Docker学习笔记第一章:补充
只记得学习后面的命令,忘记整理一些概念性的东西了,只能做个补充了=.= Docker虽然也是一种虚拟技术,但是不同于虚拟机的概念.Docker是一种以容器为主的技术,容器运行不需要模拟层(emulat ...
- AM335x(TQ335x)学习笔记——u-boot-2014.10移植
根据最近移植u-boot-2014.10至TQ335x,基于这样的假设am335x evm移植.不是很多地方需要改变. 因为TI的am335x evm开发了使用eeprom船上保存配置信息.它使用不同 ...
- AM335x(TQ335x)学习笔记——USB驱动移植
对于AM335x来讲,TI维护的USB驱动已经非常完善了,本文称之为移植,实际上仅仅是配置内核选项使能USB HOST/OTG功能.废话少说,直接动手开启AM335x的USB驱动配置项. Step1. ...
- AM335x(TQ335x)学习笔记——LCD驱动移植
TI的LCD控制器驱动是非常完善的,共通的地方已经由驱动封装好了,与按键一样,我们可以通过DTS配置完成LCD的显示.下面,我们来讨论下使用DTS方式配置内核完成LCD驱动的思路. (1)初步分析 由 ...
- Java学习笔记35(sql补充)
在上一篇里,写了数据库的增删该查,没有写完,这里补充 CREATE DATABASE Zs_Base; USE Zs_Base; # 创建表 CREATE TABLE PRODUCT( ID INT ...
- android菜鸟学习笔记11----Intent的两点补充
关于Intent的两点补充: 1.隐式Intent启动组件,会有一个Intent解析的过程,若找不到能够处理该Intent的组件,程序就会异常终止.一个合理的做法是,在使用Intent实例启动组件如: ...
- PYTHON 100days学习笔记008-1:数据结构补充
目录 Day008_01:数据结构补充 1.列表list 1.1 将列表当作堆栈使用 1.2 将列表当作队列使用 1.3 列表推导式 1.4 嵌套列表解析 1.5 del语句 2.元组和序列 3.集合 ...
随机推荐
- tcp.cc
ns2-tcp-tcp.cc /* -*- Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */ /* * Copyri ...
- Newtonsoft.Json code
序列化 Product product = new Product(); product.ExpiryDate = new DateTime(2008, 12, 28); JsonSerializer ...
- ajax 请求 服务器 响应内容过长 返回500错误的解决方法
在web.config试试加上 <system.web.extensions> <scripting> <webServices> <jsonSerializ ...
- 在Ubuntu16.04.4上安装docker
在Ubuntu16.04.4上安装docker 一.环境准备 首先我们需要一台Ubuntu16.04 虚拟机或者真机,其次,我们对其进行环境配置. 1.1.移除已经安装过的dock ...
- 第一周 day1 Python学习笔记
为什么要学习Python? Python擅长的领域 1. python2.x中不支持中文编码,默认编码格式为ASCII码,而python3.x中支持Unicode编码,支持中文,变量名可以为中文,如: ...
- SAP S/4HANA使用ABAP获得生产订单的状态
在S/4HANA里,我们如何根据一个销售订单的行项目,查看对应的生产订单状态? 双击行项目: 点击Schedule line: 这里就能看到生产订单的ID和状态了. 其中订单的状态存储在表vsaufk ...
- 弃坑pexpect,入坑paramiko
上文书说到,ssh库pexpect的使用,简直就是个“月亮公主”——满眼全是坑.勉强把程序写好了,跑起来的时候发现了一个新坑,让我不可抗拒的把它弃掉了——经常莫名其妙的连不上服务器!开线程连接14台服 ...
- Yii的事件和行为的区别和应用
关于 Yii 的事件和行为的描述,可参考 http://www.yiiframework.com/doc/api/1.1/CComponent 事件 事件模型就是设计模式中的“观察者模式”:当对象的状 ...
- [19/04/02-星期二] IO技术_字符流分类总结(含字符转换流InputStreamReader/ OutputStreamWriter,实现字节转字符)
一.概念 ------->1.BufferedReader/BufferedWriter [参考19.03.31文章] *Reader/Writer-------->2.InputStre ...
- 在Windows 7和10上显示上次登录帐户信息
组策略: 计算机配置->管理模板->Windows组件->Windows登录选项 现在注销并重新登录以查看会发生什么. 在进入桌面之前,用户必须确认该消息 注册表: 打开: &quo ...