Stm32+STemWin+LCD

本文分享了作者使用STM32F4Discovery开发板,移植STemWin并搭配4.6寸触摸屏的过程。主要内容包括LCD驱动、STemWin移植、触摸屏驱动等问题的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Stm32+STemWin+LCD


手里有块STM32F4Discovery的板子,最近拿出来玩玩,移植了STemWin配上4.6寸触摸屏,效果还是不错的。

简介

    STemWin、emWin& ucGui都差不多,可以当作一个东西,STemWin是ST官方的,使用stm32当然用这个。具体LCD驱动及emWin移植网络资源很多,这里不贴了,只记录使用过程中遇到的问题及解决办法。

效果图:

(1)用GUIBuilder生成界面
用GUIBuilder生成界面

(2)表盘界面参考Demo的automotive,但是Demo直接用了bitmap画表盘,这样只能两个一样而且无法修改,这里使用画弧形的方法画出来
表盘界面

QA

(1)LCD驱动移植问题

Ans:这个LCD是4.6寸480*272分辨率的,使用控制IC为ILI9486,使用stm32f407的FSMC接口控制。开始初始化后打开背光一片白屏,和别人给的初始化代码比较都是一样的,百思不得其解;后来仔细看了stm32f407的datasheet才发现,stm32f407的GPIO都是通过选择器连接到复用的模块,所以必须要连接到FSMC模块才能输出信号..

/*GPIO Alternate functions configuration function*/
    void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF)

这里写图片描述

(2)STemWin移植

Ans:emWin的移植比较简单,包含STemWin522_CM4_Keil.lib库(据说STemWin使用了FPU所以还要加入DSP库arm_cortexM4lf_math.lib),然后自己添加LCD驱动,自带的LCD驱动所有绘图都用打点的方式,效率太低,屏幕方向、大小的改变也很麻烦。而用自己写的驱动,可以指定要写入的窗口直接用Memory Write (2Ch) command一起写入,很是方便;另外、驱动层也可以指定屏幕方向、分辨率变化,总之对于emWin看来这个LCD就是从(0,0)到(480,272)大小的屏幕,没有坐标翻转偏移的问题。
(1)驱动移植可以参考emWin的文档(GUIDRV_Template - Template for a new driver)这一节介绍了如何实现自己的驱动,完成画点画矩形的函数即可(_SetPixelIndex等),或者参考链接http://www.ba0sh1.com/write-a-display-driver-for-emwin/
(2) 屏幕方向在驱动实现,比较方便,Memory Access Control (36h)和Display Function Control (B6h)寄存器控制,而且可以在运行中动态修改

(3)触摸屏驱动触点会跳问题

Ans:常规的驱动都是取几次数据排序去掉最大和最小值,然后做平均,但是这样很容易出现触摸点跳动的问题,这里的做法是取两次平均的值,当两次值的差小于5的时候才有效。另外一个问题是emWin需要定时调用GUI_TOUCH_Exec()更新触摸值,我把他放在了systick的中断处理函数里,但是本来好好的systick突然就不动了,后来查看code发现是因为delay是用systick实现的,而在触摸驱动又用了systick这样就死循环了,改为for循环做delay。

static void Delay(__IO uint32_t Count)
{
  for(; Count != 0; Count--);
}

(4)emWin在模拟器调试

Ans:emWin可以在PC上通过模拟器调试,调好了之后放到stm32就可以直接运行,这里的问题是调试的时候跑到断点模拟器的界面就出不来了,这个问题就要用到emWin的另外一个工具emWinView,调试之前打开emWinView在断点的时候可以通过它观察输出。
emWinView

DSP和标准外设库: 资源编号 : STSW-STM32065 资源名称 : STM32F4 DSP and standard peripherals library 文件名 : stm32_f105-07_f2_f4_usb-host-device_lib.zip 下载地址 : http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF257901# USB库: 资源编号 : STSW-STM32046 资源名称 : STM32F105/7, STM32F2 and STM32F4 USB on-the-go Host and device library (UM1021) 文件名 : stm32_f105-07_f2_f4_usb-host-device_lib.zip 下载地址 : http://www.st.com/web/en/catalog/tools/PF257882 ETH以太网库: 资源编号 : STSW-STM32046 资源名称 : LwIP TCP/IP stack demonstration for STM32F4x7 microcontrollers (AN3966) 文件名 : stsw-stm32070.zip 下载地址 : http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF257906 【CMSIS】 Cortex微控制器软件接口程序(Cortex Microcontroller Software Interface Standard (CMSIS). ) 版本: V4.2 发布日期: 31. July 2014 【STM32F4xx_StdPeriph_Driver】 STM32F40x系列CPU标准外设驱动程序 版本: V1.5.0 发布日期: 06-March-2015 【STM32_USB_OTG_Driver】 STM32F105/7xx, STM32F2xx and STM32F4xx USB Device Library 版本: V2.1.0 发布日期: 2012-03-19 【STM32_USB_Device_Library】 STM32F105/7xx, STM32F2xx and STM32F4xx USB Device Library 版本: V1.1.0 发布日期: 2012-03-05 【STM32_USB_HOST_Library】 STM32F105/7xx, STM32F2xx and STM32F4xx USB Host Library 版本: V2.1.0 发布日期: 2012-03-19 【STM32F4x7_ETH_Driver】 STM32F4x7 Eth Library 版本: V1.1.0 发布日期: 31-July-2013 ********************************************************************************************************* * * 版 本 : V1.0 * 说 明 : 本实验主要实现FreeRTOS+STemWin+FatFS+USB Host综合 * 实验目的: * 1. 学习FreeRTOS+STemWin+FatFS+USB Host综合 * 2. 这里的USB Host主要实现U盘相关处理,支持U盘热插拔。 * 用户可以根据需要在usb_usr.c文件中的插入检测函数: * USBH_USR_Configuration_DescAvailable或者函数USBH_USR_Init函数加入插入标志 * 拔出检测函数: * USBH_USR_DeviceDisconnected * 实验内容: * 1. 按下按键K1可以通过串口打印任务执行情况(波特率115200,数据位8,奇偶校验位无,停止位1) * ================================================= * 任务名 任务状态 优先级 剩余栈 任务序号 * vTaskUserIF R 2 272 2 * vTaskGUI R 1 657 1 * IDLE R 0 113 6 * vTaskMsgPro B 4 1957 4 * vTaskLED B 3 483 3 * vTaskStart B 5 489 5 * * * 任务名 运行计数 使用率 * vTaskUserIF 5583 1% * vTaskGUI 10782 2% * IDLE 355589 91% * vTaskLED 0 <1% * vTaskMsgPro 16770 4% * vTaskStart 17 <1% * 串口软件建议使用SecureCRT(V6光盘里面有此软件)查看打印信息。 * 各个任务实现的功能如下: * vTaskGUI 任务: emWin任务 * vTaskTaskUserIF 任务: 接口消息处理 * vTaskLED 任务: LED闪烁 * vTaskMsgPro 任务: U盘中文件处理和浏览 * vTaskStart 任务: 启动任务,也就是最高优先级任务,这里实现按键扫描和触摸检测 * 2. 任务运行状态的定义如下,跟上面串口打印字母B, R, D, S对应: * #define tskBLOCKED_CHAR ( 'B' ) 阻塞 * #define tskREADY_CHAR ( 'R' ) 就绪 * #define tskDELETED_CHAR ( 'D' ) 删除 * #define tskSUSPENDED_CHAR ( 'S' ) 挂起 * 3. 本实验的USB Host主要是对U盘的操作,通过电脑端的串口软件SecureCRT软件, * 给板子发送相关命令实现操作,具体实现在demo_fatfs文件里面。 * printf("请选择操作命令:\r\n"); * printf("1 - 显示根目录下的文件列表\r\n"); * printf("2 - 创建一个新文件armfly.txt\r\n"); * printf("3 - 读armfly.txt文件的内容\r\n"); * printf("4 - 创建目录\r\n"); * printf("5 - 删除文件和目录\r\n"); * printf("6 - 读写文件速度测试\r\n"); * printf("7 - 挂载U盘\r\n"); * printf("8 - 卸载U盘\r\n"); * 注意事项: * 1. 本实验推荐使用串口软件SecureCRT,要不串口打印效果不整齐。此软件在 * V5开发板光盘里面有。 * 2. 务必将编辑器的缩进参数和TAB设置为4来阅读本文件,要不代码显示不整齐。 * * 修改记录 : * 版本号 日期 作者 说明 * V1.0 2016-03-15 Eric2013 1. ST固件库到V1.5.0版本 * 2. BSP驱动包V1.2 * 3. FreeRTOS版本V8.2.3 * 4. STemWin版本V5.28 * 5. FatFS版本V0.11a * * Copyright (C), 2016-2020, 安富莱电子 www.armfly.com * *********************************************************************************************************
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值