请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

移植STemWin5.32 基于STM32F103VCT6+5.0寸TFT+FSMC  

[复制链接]
springyyy 发布时间:2018-4-4 16:12
本帖最后由 springyyy 于 2018-4-9 11:23 编辑
6 C; U% H% K/ d. n* P, D2 q, M7 v, G: W: |1 o  \
      最近老板想用彩屏做一款新产品,于是T宝上买了一块屏让我学学捣鼓一下。网上看到人家移植emWin也想试一下,结果还不错,成功了。其实我还移植了UCGUI,嘿嘿。不过这里只说移植StemWin。
微信图片_20180404141332.jpg
1 E$ y. u$ N. y8 q
      平台:T宝上买的5寸TFT屏和评估板工程文件和StemWin以及emWin5.42中文手册的链接(StemWin_V1.2.0是我从官网下的):
      链接:https://pan.baidu.com/s/1LyI6shZBq5iybDtv4m5noA密码:q0an
新建位图图像.png " ]& O0 J" A9 d0 [; I
      先上图:不知为何红圈处的字有点模糊,可能是分辨率问题。
1.jpg
微信图片_20180404153611.jpg
微信图片_20180404153607.jpg
微信图片_20180404153603.jpg
微信图片_20180404153559.jpg
微信图片_20180404153555.jpg
微信图片_20180404153548.jpg
微信图片_20180404153540.jpg
开始移植:
      因为是买的5寸的液晶屏和评估板所以液晶驱动不用自己写了。直接复制一个就好。注意:不论是自己写的驱动还是哪里来的驱动,一定要保证能驱动你的屏。这里我的文件是ILI9806.c和ILI9806.h。不可以用LCD.c和LCD.h命名,不然会重复(StemWin532中有LCD.c和LCD.h这2个文件)。
      接下来我们开始把STemWin5.32加入工程项目中。在STemWin_Library_V1.2.0\Libraries下找到一个名为“STemWinLibrary532”的文件夹:
新建位图图像 (2).png
把这个文件夹复制到我们的工程目录下,然后在工程项目组中为其新建一个分组,并添加路径和包含头文件。如下:
新建位图图像 (3).png
% m5 a! E; C1 S! X
新建位图图像 (4).png
新建位图图像 (5).png
      相信以上步骤大家都没问题的。完成以上步骤后,接下来就可以修改程序了。
2 ?& x! c" m; b" ]  r$ G
1 |% J+ v7 v# _( z( {4 f% ]

STemWin移植教程.pdf

下载

1.59 MB, 下载次数: 373

评分

参与人数 1 ST金币 +1 收起 理由
JackGewind + 1 SYS.h 头文件 "usart.h""delay

查看全部评分

收藏 6 评论23 发布时间:2018-4-4 16:12

举报

23个回答
springyyy 回答时间:2018-4-4 16:12:23
本帖最后由 springyyy 于 2018-4-9 11:21 编辑
, b! t9 K: ]+ @; c# t1 a# q" n# g- o- |# _8 F1 U$ Y8 P
1.打开“GUIConf.C”,并找到这样一个宏:+ i0 Q; n5 N! [. W; t3 ]
                  ”#define GUI_NUMBYTES  0x200000”
; |/ C4 B& ?5 `$ n      把“0x200000”改为“1024*40”(这个宏定义服务于在函数中向系统申请一个静态空间 aMemory ,接着调用 emWin的库函数GUI_ALLOC_AssignMemory 把该空间分配给 emWin。还有“1024*50”并不是定值,我们也可以改成“1024*40”或其它,视情况而定,但一般建议设置成小于“1024*50”)。然后在“GUIConf.C”中就没有需要修改的了。
1 A1 q" P1 Z( Q' L5 r      如果想修改字体大小,找到void GUI_X_Config(void)函数,并修改最后一句GUI_SetDefaultFont(GUI_FONT_8X16); 里的入口参数即可。
$ O- p. |7 k; K6 [) G1 q2.打开“LCDConf_FlexColor_Template.c”。% b' z( \+ E0 Z  k
      在这个 .C 文件中我们先把TFT液晶驱动的头文件添加进来(如我的是#include “ILI9806.h”)。接下来我们会看到里面有这样的四个函数void LcdWriteReg(U16 Data)、voidLcdWriteData(U16 Data)、void LcdWriteDataMultiple(U16 * pData, int NumItems)、voidLcdReadDataMultiple(U16 * pData, int NumItems)  然后像下面那样分别添加一句语句(红色为我添加的):
" E, ^8 W" E' W4 J# R
static void LcdWriteReg(U16 Data) : E1 R7 I3 L& Y0 [( u
{" N, H" n  k. `. {, j* T8 u) d8 Q7 j
  // ... TBD by user
: f. K$ G1 h- i2 X9 o* b  l6 ]        *(__IO u16 *) (Bank1_LCD_C)=Data;4 x$ R( L. b# c) |/ T
}
2 t  P6 F1 I1 r/ V2 V: l( K
: X: ~; I+ {" x/ ]" Z6 P& ^& Gstatic void LcdWriteData(U16 Data)
2 c. V, m8 Y6 Z) V# u0 c( Z{
5 r9 [( |1 {% Y$ c/ r  // ... TBD by user
3 ]) v/ a3 y/ d1 K7 t8 n       *(__IO u16 *) (Bank1_LCD_D)=Data;
0 J( T; n3 E' j}
) S9 E6 t+ W4 {( X  C
, R; b3 C* l! o: E6 b( nstatic void LcdWriteDataMultiple(U16 * pData, int NumItems)
' F% v1 l) ?0 B{5 P) M6 V8 O' k8 h- E8 ^, T
  while (NumItems--)
( X) c( b3 d- v# f        {
% [; X8 e6 U3 S5 B! S: b4 W1 Y  e    // ... TBD by user
0 C% ?6 Z9 F7 G+ e8 b                *(__IO u16 *) (Bank1_LCD_D)=* pData++;
' M7 o. i0 f/ r% g5 ]! G- l  }
6 z( u1 D9 \3 t$ u}4 c0 P. b& O) E2 y/ e
% T4 c! v( E9 L
static void LcdReadDataMultiple(U16 * pData, int NumItems)
% {) k! X" E9 R' ]{3 J4 u4 H3 k1 j3 d& d) t6 b* q7 [
  while (NumItems--) ' Y3 u$ U$ C  P$ S: }* e, _
        {3 \. W3 i7 e4 T
    // ... TBD by user
/ k- q1 ~: }5 k. p% c, |                * pData++=*(__IO u16 *) (Bank1_LCD_D);3 ^# g4 O1 y" b/ b
  }" H+ V! `, L( @: S8 \4 U6 F" T
}3 L) G8 N) y$ ?: e6 N  B) ?1 w5 y0 i
      注意:Bank1_LCD_C ,Bank1_LCD_D在我的ILI9806.h中已经定义了,它们是写LCD,命令寄存器的地址和写数据的地址。, M" o0 ~' b5 D: m
               #define Bank1_LCD_D    ((u32)0x60020000)         //Disp Data ADDR
% ~; i0 d- F- S' |6 w               #define Bank1_LCD_C    ((u32)0x60000000)         //Disp Reg ADDR/ Y' f# }# j- O5 v$ @9 k
      然后再找到void LCD_X_Config(void)这个函数。注意红圈处。
2 X  L; [2 Z/ J- [. l/ u0 c
新建位图图像 (6).png 4 w1 U7 Z7 q0 c, j8 F8 j

, ?9 J8 m' d# B9 d8 G$ L      pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_M565, 0, 0);  //GUICC_M565/GUICC_565用于红蓝翻转,默认GUICC_565,如果你用GUICC_565发现红蓝是反的就修改成GUICC_M565。
  D! z' [* M! B7 R      Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_Y; //这里是进行屏幕显示方向设置,如果这一句注释掉的话,那么你原来初始化TFT的时候屏的什么方向就是什么方向。PS:如果屏幕显示出现显示反转或者镜像情况,可通过GUI_MIRROR_X、GUI_MIRROR_Y以及GUI_SWAP_XY 等不同组合进行调整。" j+ K% j& x2 |, O
      GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66709, GUIDRV_FLEXCOLOR_M16C0B16); //这里我们需要修改的是GUIDRV_FLEXCOLOR_F66708这个参数。这个参数的修改要根据你的TFT屏所使用的驱动芯片,我的TFT使用的驱动芯片是“ILI9806”,所以是GUIDRV_FLEXCOLOR_F66709(实际上在手册中找不到ILI9806,所以我是用适合ILIxxxx的一个个试出来的)。如果是其它型号的驱动芯片则需要查询emWin5.42的用户手册然后进行修改。
) C7 D, b, x+ P: n4 f+ b) f
新建位图图像 (7).png
6 x9 j2 s4 n5 d! o( F; ?3 d1 f1 W
: z- i  V& ^- N1 h8 C: l+ ~9 s
      注意:如果选错了,屏会什么都不显示,黑屏。很多人移植不成功都是在这一步没做好。如果里面没有你用的驱动芯片,可以先不修改,等最后修改完成编译没错误后,下载到板子上,看是否能显示,不显示的话就试一试其他的(一定要保证其他地方没问题)。9 C' \# D- M0 k; ], C' I3 D
      接下来找到函数int LCD_X_DisplayDriver(unsigned LayerIndex,unsigned Cmd, void * pData)。在这里我们仅需在case LCD_X_INITCONTROLLER: 项中加入我们TFT液晶的初始化函数即可。
新建位图图像 (8).png
* _$ B6 A! @1 a0 K

* U2 ?7 h9 i* G/ i4 B3. GUI心跳。emWin在运行过程中有时会调用延时之类的函数,为了实现精确定时,我们还需要为emWin开一路定时器,这里我们选用StsTick。也即需要我们在mian()函数中加入SysTick_Config(SystemCoreClock /1000);来初始化SysTick定时器,而在“stm32f10x_it.c”文件中,我们需要进行这样的修改:: \- E3 }+ k, M0 e

+ p8 @& B! u2 C; c# ^0 h( wextern __IO int32_t    OS_TimeMS;. Y3 V6 d# e+ y4 {% b& l9 t, J( {
void SysTick_Handler(void)
0 x5 q& E4 ~0 w{
6 W, n0 J: }& U! B        //SysTick_ISR();   //原来的
8 _2 e! c7 k) [, z: X8 v" p( f4 G        OS_TimeMS ++;  //添加的
) Q9 I$ a! y. h" i/ }6 i: E}
5 j: _" Q( L( ^7 }% {      这些工作完成后我们再回到main()中,在main()中我们需要添RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC,ENABLE);函数,注意如果不添加将无法使用emWin.然后进行GUI初始化,记得先包含“GUI.h”。如我的程序是这样子的:0 M  k: k8 a% i
新建位图图像 (9).png
+ e0 ~6 @$ \( R: H. ?; o7 s

' a- d3 V( D7 h) ?, r& Y$ w1 q- ~+ ~* [; }
      InitBoard()是我其他的函数,请忽略。GUIDEMO_Main()是用于添加官方Demo例程的。下面会说明。" T; P8 L3 j  {, b5 q
      程序编译通过之后下载到板子上,移植成功的话会显示如下。# N8 S& _' W6 J  S# ^* J# U
微信图片_20180404150418.jpg 7 j9 }, j, V& b6 o3 X
! j4 V) G2 r- d/ T' K
      接下来就是添加官方的Demo程序:8 a- p8 n2 Q0 Y! A5 b) b+ M% }) W7 @
      将STemWin_Library_V1.2.0\Project\STM3210E-EVAL\Standalone中的Demo文件夹拷贝到工程中来,这里面我的MCU是STM32F103VCT6的,不带操作系统的,所以我这里选择了STM3210E-EVAL\Standalone这个路径下的,至于带操作系统的,自己选择即可哈。如果你的MCU不是103系列的请往下看。STemWin_Library_V1.2.0\Project\STM3210C-EVAL\Standalone文件夹下有一个readme.txt文本,里面有说明适用于那个系列的。
+ D- S) X1 t3 I6 h7 B8 S* h+ Z4 m+ ^
新建位图图像 (10).png
+ [) H" C* h7 m" j3 ]; `# x- H
新建位图图像 (11).png
新建位图图像 (12).png
8 ]& |3 T) ^# D& k  f
      在main函数文件中添加#include "GUIDEMO.h"头文件,接着在函数中增加SysTick_Config(SystemCoreClock / 1000);这个函数,我是利用这个SysTick定时器来做GUI的心跳的(前面已经说明),至于用定时器的方式的,请另行修改;接着增加demo的演示GUIDEMO_Main();这个函数。2 S. H/ K- X; N7 P
      在guidemo.h文件中找到下图这个家伙,这里是demo的开关哦,我这里打开了9个。如图。注意有些打开后占用空间较大可能会超出报错。# D  Q  D# [+ ~( T  a# p
2018-04-04_153016.png 4 T$ g% H9 X3 J% E6 s5 j& r
7 n" ?& R5 G) h0 C' C6 R; C
      到此移植完毕。/ u/ x7 |8 a7 l6 {6 z

评分

参与人数 1ST金币 +10 收起 理由
zero99 + 10

查看全部评分

JackGewind 回答时间:2019-8-19 21:31:31
#include "usart.h"         1 _) T7 a+ g% T% v3 i6 q
#include "delay.h"
9 w' s7 B2 ~+ x" i- }) {9 `, _#include "sys.h" - b8 E: v, n: r
这三个头文件都没, 怎么成功的?
zero99 回答时间:2018-4-17 14:47:21
感谢分享,请汇总到4月技术原创2 d+ _9 C7 s/ b& M, X
https://www.stmcu.org.cn/module/forum/thread-615497-1-1.html
springyyy 回答时间:2018-4-8 09:28:01
本帖最后由 springyyy 于 2018-4-8 11:42 编辑 * `3 ^7 H9 G/ F8 @; S% P) ?
' R* d9 \7 g& t  D1 `0 T
清明节放假回来了,等有空我把图片整一下
springyyy 回答时间:2018-4-9 11:24:13
终于把排版弄好了。自己顶一下。
springyyy 回答时间:2018-4-10 17:44:03
扎心了,没有人看
怪叔叔 回答时间:2018-4-26 23:55:50
这么好的帖子,没人顶 真是可惜,楼主我顶你
newphj 回答时间:2018-4-27 09:26:43
正好用得上
$ [, X9 V! h; r) o* }9 r
krguang 回答时间:2018-4-28 13:15:03
缘分啊,咱们买的是一个屏
springyyy 回答时间:2018-4-28 13:45:29
krguang 发表于 2018-4-28 13:15
$ A- z2 |; f8 h' |1 }# A9 o缘分啊,咱们买的是一个屏

. l/ p. X- p/ r: O+ G) H5 Z全淘宝好像就他家的便宜
缘分的天空6077 回答时间:2018-10-22 13:47:59
springyyy 发表于 2018-4-28 13:45
" I/ i3 D  U. U" j2 w全淘宝好像就他家的便宜
$ h  i+ |' i; ]& _" [! b
是的哈哈哈
pwt 回答时间:2018-12-3 17:14:56

+ v- ^: A" P+ J7 [, l
wdliming-222461 回答时间:2019-1-4 23:07:09
谢谢分享~~~~
bedouins 回答时间:2019-6-28 16:45:31
资料不错,赞一个
jinniuxing 回答时间:2019-7-17 00:15:39
谢谢,分享的资料
12下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版