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

STM32F407上移植emwin

[复制链接]
aimejia 发布时间:2018-5-24 14:37
环境:

主机:WIN8

开发环境:MDK5.13

emwin版本:STemWinLibrary522

mcu: stm32f407VGT6

开发板:安富莱STM32-X3

TFT型号:艾蓝2.8寸TFT,主控芯片:ILI9325

说明:

在STM32F407上移植emwin,驱动屏幕接口为FSMC

移植步骤:
1.MDK新建文件结构


1.png
2.GUIConf.c文件修改
    a)增加宏定义
  1. [cpp] view plain copy
  2. #define GUI_NUMBYTES  (1024 * 80)  
  3. #define GUI_BLOCKSIZE 0x80  
复制代码
    b)GUI_X_Config(void)函数中增加语句
  1. [cpp] view plain copy
  2. GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);  
  3. [cpp] view plain copy
复制代码
修改后:
  1. [cpp] view plain copy
  2. /*********************************************************************
  3. *
  4. *       GUI_X_Config
  5. *
  6. * Purpose:
  7. *   Called during the initialization process in order to set up the
  8. *   available memory for the GUI.
  9. */  
  10. void GUI_X_Config(void) {  
  11.   //  
  12.   // 32 bit aligned memory area  
  13.   //  
  14.   static U32 aMemory[GUI_NUMBYTES / 4];  
  15.   //  
  16.   // Assign memory to emWin  
  17.   //  
  18.   GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);  
  19.       
  20.     GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);  
  21.   //  
  22.   // Set default font  
  23.   //  
  24.   GUI_SetDefaultFont(GUI_FONT_6X8);  
  25. }  
复制代码
3.LCDConf_FlexColor_Template.c文件修改
    a)增加宏定义:
  1. [cpp] view plain copy
  2. #define LCD_REG_ADDRESS             BANK1_LCD_REG  
  3. #define LCD_DATA_ADDRESS            BANK1_LCD_RAM  
复制代码
  1. [cpp] view plain copy
  2. <span lang="zh-CN"><span style="font-family:SimHei;font-size:18px;">  
  3. </span></span>  
复制代码
这两个BANK宏定义在tft驱动文件中定义:
  1. [cpp] view plain copy
  2. <span style="font-family:SimHei;font-size:18px;">#define BANK1_BASE     ((uint32_t)(0x60000000 | 0x00000000))  
  3. #define BANK1_LCD_RAM   *(__IO uint16_t *)(BANK1_BASE +  (1 << (18 + 1))) /* FSMC 16位总线模式下,FSMC_A18口线对应物理地址A19 */  
  4. #define BANK1_LCD_REG   *(__IO uint16_t *)(BANK1_BASE)</span>  
复制代码
具体值和接线相关

    b)具体函数修改
  1. [cpp] view plain copy
  2. <span style="font-family:SimHei;font-size:18px;">/*********************************************************************
  3. *
  4. *       Local functions
  5. *
  6. **********************************************************************
  7. */  
  8. /********************************************************************
  9. *
  10. *       LcdWriteReg
  11. *
  12. * Function description:
  13. *   Sets display register
  14. */  
  15. static void LcdWriteReg(U16 Data) {  
  16.   // ... TBD by user  
  17.     LCD_REG_ADDRESS = Data;  
  18. }  
  19.   
  20. /********************************************************************
  21. *
  22. *       LcdWriteData
  23. *
  24. * Function description:
  25. *   Writes a value to a display register
  26. */  
  27. static void LcdWriteData(U16 Data) {  
  28.   // ... TBD by user  
  29.     LCD_DATA_ADDRESS=Data;  
  30. }  
  31.   
  32. /********************************************************************
  33. *
  34. *       LcdWriteDataMultiple
  35. *
  36. * Function description:
  37. *   Writes multiple values to a display register.
  38. */  
  39. static void LcdWriteDataMultiple(U16 * pData, int NumItems) {  
  40.   while (NumItems--) {  
  41.     // ... TBD by user  
  42.       LCD_DATA_ADDRESS=*pData++;  
  43.   }  
  44. }  
  45.   
  46. /********************************************************************
  47. *
  48. *       LcdReadDataMultiple
  49. *
  50. * Function description:
  51. *   Reads multiple values from a display register.
  52. */  
  53. static void LcdReadDataMultiple(U16 * pData, int NumItems) {  
  54.   while (NumItems--) {  
  55.     // ... TBD by user  
  56.       *pData++=LCD_DATA_ADDRESS;  
  57.   }  
  58. }  
  59.   
  60. /*********************************************************************
  61. *
  62. *       Public functions
  63. *
  64. **********************************************************************
  65. */  
  66. /*********************************************************************
  67. *
  68. *       LCD_X_Config
  69. *
  70. * Function description:
  71. *   Called during the initialization process in order to set up the
  72. *   display driver configuration.
  73. *
  74. */  
  75. void LCD_X_Config(void) {  
  76.   GUI_DEVICE * pDevice;  
  77.   CONFIG_FLEXCOLOR Config = {0};  
  78.   GUI_PORT_API PortAPI = {0};  
  79.   //  
  80.   // Set display driver and color conversion  
  81.   //  
  82.   pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_565, 0, 0);  
  83.   //  
  84.   // Display driver configuration, required for Lin-driver  
  85.   //  
  86.   LCD_SetSizeEx (0, XSIZE_PHYS , YSIZE_PHYS);  
  87.   LCD_SetVSizeEx(0, VXSIZE_PHYS, VYSIZE_PHYS);  
  88.   //  
  89.   // Orientation  
  90.   //  
  91.   //Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_Y;  
  92.   Config.FirstCOM = 0;  
  93.   Config.FirstSEG = 0;  
  94.   //Config.Orientation = GUI_MIRROR_X | GUI_MIRROR_Y;  
  95.   Config.NumDummyReads = 2;  
  96.   GUIDRV_FlexColor_Config(pDevice, &Config);  
  97.   //  
  98.   // Set controller and operation mode  
  99.   //  
  100.   PortAPI.pfWrite16_A0  = LcdWriteReg;  
  101.   PortAPI.pfWrite16_A1  = LcdWriteData;  
  102.   PortAPI.pfWriteM16_A1 = LcdWriteDataMultiple;  
  103.   PortAPI.pfReadM16_A1  = LcdReadDataMultiple;  
  104.   GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66708, GUIDRV_FLEXCOLOR_M16C0B16);  
  105.     //GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66709, GUIDRV_FLEXCOLOR_M16C0B16);  
  106. }</span>  
复制代码
其中:GUIDRV_FlexColor_SetFunc函数说明:

2.png

因为主控芯片为ILI9325,所以参数选择GUIDRV_FLEXCOLOR_F66708

4.GUI_X.c文件修改

      此文件控制的是GUI中的延时,可以用定时器配合实现,修改如下:
  1. [cpp] view plain copy
  2. <span style="font-family:SimHei;font-size:18px;">/*********************************************************************
  3. *
  4. *       Global data
  5. */  
  6. volatile GUI_TIMER_TIME OS_TimeMS;  
  7.   
  8. /*********************************************************************
  9. *
  10. *      Timing:
  11. *                 GUI_X_GetTime()
  12. *                 GUI_X_Delay(int)

  13.   Some timing dependent routines require a GetTime
  14.   and delay function. Default time unit (tick), normally is
  15.   1 ms.
  16. */  
  17.   
  18. extern __IO int32_t g_iRunTime;  
  19. GUI_TIMER_TIME GUI_X_GetTime(void) {   
  20.   //return OS_TimeMS;   
  21.     return g_iRunTime;  
  22. }  
  23.   
  24. void GUI_X_Delay(int ms) {   
  25. //  int tEnd = OS_TimeMS + ms;  
  26. //  while ((tEnd - OS_TimeMS) > 0);  
  27.       
  28.     int tEnd = g_iRunTime + ms;  
  29.     while ((tEnd - g_iRunTime) > 0);  
  30. }</span>  
复制代码
5.主函数实现:
  1. [cpp] view plain copy
  2. <span style="font-family:SimHei;font-size:18px;">int main(void)  
  3. {  
  4.     /*
  5.         ST固件库中的启动文件已经执行了 SystemInit() 函数,该函数在 system_stm32f4xx.c 文件,主要功能是
  6.     配置CPU系统的时钟,内部Flash访问时序,配置FSMC用于外部SRAM
  7.     */  
  8.   
  9.     bsp_Init();     /* 硬件初始化 */  
  10.     PrintfLogo();   /* 打印例程信息到串口1 */  
  11.     vLCDInit();  
  12.       
  13. //  vClearScreen(Green);  
  14. //  vSetTextColor(Red);      
  15. //  vPutString(20,0, "NanJing RF Tracking!!!!!");  
  16. //  ShowImage();  
  17.     //DemoFatFS();  /* SD卡文件系统演示程序 */  
  18.     //RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);   
  19.     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_CRC, ENABLE);  
  20.     GUI_Init();  
  21.     GUI_DispString("I am jdh!");  
  22.   
  23.     while (1)  
  24.     {  
  25.         GUI_Delay(1000);  
  26.     }  
  27. }</span>  
复制代码
注意:
  1. [cpp] view plain copy
  2. <span style="font-family:SimHei;font-size:18px;">RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_CRC, ENABLE);</span>
复制代码

函数是必须的,否则GUI将不工作,这是ST公司防止其他芯片用此GUI的措施。

效果

3.jpg

转载自jdh

收藏 评论0 发布时间:2018-5-24 14:37

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版