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.集合 ...
随机推荐
- ELK_Elastic Search和kibana版本对应关系
https://www.elastic.co/downloads/past-releases/kibana-5-0-0 https://www.elastic.co/downloads/past-re ...
- 一道算法题-从1到n整数中1出现的次数
1. 题目描述 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,1一共出现了5次. 2. 题目来源 第一次看到是在 ...
- Eclipse版本推荐(tomcat运行项目:web、maven)
1.区别 Eclipse根据特性和jdk版本,从Eclipse官网可看到,分为:Neon/Oxygen/Mars/Luna/Kepler/Juno/Indigo/Helios...等等. Eclips ...
- Redis入门实例(Redis+Sprint+maven创建工程)
一.>创建一个maven工程应用和相关配置:Redis_study,创建工程应用过程略 1.>配置pom.xml:文件内容如下 <project xmlns="http:/ ...
- Linux下XAMPP的部署实战
上传源码文件 rz -be 下载xampp安装包wget http://sourceforge.net/projects/xampp/files/XAMPP%20Linux/5.5.28/xampp- ...
- 针对ie的css hack
/* IE9 , IE10 ,IE11 */ @media screen and (min-width:0\0) { /* IE9 , IE10 ,IE11 rule sets go here * ...
- 阅读MySQL文档第21章摘抄
触发程序是与表相关的数据库对象. mysql> CREATE TABLE account (acct_num INT, amount DECIMAL(10,2)); Query OK, 0 ro ...
- Junit单元测试多线程的问题
今天下午很快完成了一个接口的监控功能,然后屁颠屁颠地用Junit开始单元测试.然后我就开始陷入崩溃的边缘... 监控结束后需要将监控结果以邮件的形式发送给运营的小伙伴维护,前面测试还是很顺利,到了开多 ...
- Kali-linux识别活跃的主机
尝试渗透测试之前,必须先识别在这个目标网络内活跃的主机.在一个目标网络内,最简单的方法将是执行ping命令.当然,它可能被一个主机拒绝,也可能被接收.本节将介绍使用Nmap工具识别活跃的主机. 网络映 ...
- 从零一起学Spring Boot之LayIM项目长成记(一) 初见 Spring Boot
项目背景 之前写过LayIM的.NET版后端实现,后来又写过一版Java的.当时用的是servlet,websocket和jdbc.虽然时间过去很久了,但是仍有些同学在关注.偶然间我听说了Spring ...