5回答

1收藏

[分享] GD32F207移植STemWin(分享三)

GD32 GD32 8113 人阅读 | 5 人回复 | 2016-01-07

本帖最后由 wenyangzeng 于 2016-1-14 13:29 编辑

GD32F207移植STemWin
这个GD32F207移植STemWin的结果不是很成功,但是还是有必要将移植过程与各位分享。
使用FSMC模式驱动TFT-SSD1289,硬件的连接和编程请参阅:
试过几种编译环境,只有采用STM32CUbeMXMDK5下能勉强运行。
代码中如果有“LCD.h””LCD.C”“GUI.H”同名的文件必须另起新文件名。
STM32CUbeMX的配置中选择STM32F103ZET6,需要配置的选项有”SYS””CRC”“FSMC”和“RCC”,见下图:
要注意那个CRC是必须的。

项目中芯片型号则选择GD32F207ZE,还要添加STemWinLibrary5.22库、GUIConfig.CLCDConf_FiexColor_Template.CGUI_X.C,GUIDEMO.C。


Options-Debug选项:


Driver Setup选项:

  1. 主函数:
  2. #include "stm32f1xx_hal.h"
  3. #include "SSD1289_lcd.h"
  4. #include "crc.h"
  5. #include "gpio.h"
  6. #include "fsmc.h"
  7. include "GUI.h"
  8. #include "GUIDEMO.h"
  9. #include "GUI_Type.h"
  10. void SystemClock_Config(void);
  11. extern __IO int32_t OS_TimeMS;

  12. int main(void)
  13. { HAL_Init();
  14. SystemClock_Config();
  15. MX_GPIO_Init();
  16. MX_CRC_Init();          //这个CRC是必须要的
  17. MX_FSMC_Init();
  18. STM3210E_LCD_Init();
  19. WM_SetCreateFlags(WM_CF_MEMDEV);
  20. GUI_Init();
  21. GUIDEMO_Main();
  22. }
  23. void SystemClock_Config(void)
  24. { RCC_OscInitTypeDef RCC_OscInitStruct;
  25. RCC_ClkInitTypeDef RCC_ClkInitStruct;
  26. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  27. RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  28. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  29. HAL_RCC_OscConfig(&RCC_OscInitStruct);
  30. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK;
  31. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSE;
  32. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV16;
  33. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  34. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV4;
  35. HAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_0);
  36. HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/200);
  37. HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
  38. HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  39. }

  40. //GUIConf.C的修改:
  41. #define GUI_NUMBYTES  1024*50

  42. //LCDConf_FlexColor_Template.c的修改:
  43. include "stm32f1xx.h"
  44. #include "SSD1289_lcd.h"
  45. typedef struct
  46. {
  47. __IO uint16_t LCD_REG;
  48. __IO uint16_t LCD_RAM;
  49. } LCD_TypeDef;
  50. #define LCD_BASE           ((uint32_t)(0x60000000 |0x0C000000))
  51. #define LCD                ((LCD_TypeDef *) LCD_BASE)
  52. static void LcdWriteReg(U16 Data) {
  53.   __nop();__nop();
  54. LCD->LCD_REG = Data;
  55. }
  56. static void LcdWriteData(U16 Data) {
  57.   __nop();__nop();
  58. LCD->LCD_RAM =Data;</font>
  59. }
  60. static void LcdWriteDataMultiple(U16 *pData, int NumItems) {
  61. while (NumItems--) {
  62.      __nop();__nop();
  63. LCD->LCD_RAM = *pData++;</font>
  64.   }
  65. }
  66. static void LcdReadDataMultiple(U16 *pData, int NumItems) {
  67. *pData=LCD->LCD_RAM ;
  68. while (NumItems--) {
  69.          __nop();__nop();
  70. *pData++=LCD->LCD_RAM ;
  71. }
  72. }
  73. void LCD_X_Config(void) {
  74. GUI_DEVICE * pDevice;
  75. CONFIG_FLEXCOLOR Config = {0};
  76. GUI_PORT_API PortAPI = {0};
  77. pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_<font color="red">M</font>565, 0, 0);
  78. LCD_SetSizeEx (0, XSIZE_PHYS , YSIZE_PHYS);
  79. LCD_SetVSizeEx(0, VXSIZE_PHYS, VYSIZE_PHYS);
  80. Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_Y;
  81. GUIDRV_FlexColor_Config(pDevice, &Config);
  82. PortAPI.pfWrite16_A0  =LcdWriteReg;
  83. PortAPI.pfWrite16_A1  =LcdWriteData;
  84. PortAPI.pfWriteM16_A1 = LcdWriteDataMultiple;
  85. PortAPI.pfReadM16_A1  =LcdReadDataMultiple;
  86. GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66702,GUIDRV_FLEXCOLOR_M16C0B16);
  87. }
  88. //Stm32f1xx_it.c的修改:
  89. #include "stm32f1xx_hal.h"
  90. #include "stm32f1xx.h"
  91. #include "stm32f1xx_it.h"
  92. extern __IO int32_t OS_TimeMS;
  93. void SysTick_Handler(void)
  94. {
  95. HAL_IncTick();
  96. HAL_SYSTICK_IRQHandler();
  97. <font color="red">OS_TimeMS++;
  98. }
复制代码
编译下载运行:
运行结果并不如意,运行到一半就死机了,提示硬件的失败:


高手如果知道问题所在,望指教。
http://player.youku.com/player.php/sid/XMTQzODE5ODI0MA==/v.swf

分享到:
回复

使用道具 举报

回答|共 5 个

倒序浏览

沙发

奋斗哥

发表于 2016-1-8 09:43:50 | 只看该作者

非常好的分享!!!
板凳

wanyyxum

发表于 2016-4-9 16:23:14 | 只看该作者

硬件异常多半是数组越界,先定位出现异常的地方,然后看看是否调用了数组!
地板

goust51

发表于 2016-11-14 10:54:26 | 只看该作者

楼主,GD32移植STemwin成功了吗?可不可以分享一下源码,学习学习!
5#

wenyangzeng

发表于 2016-11-15 13:18:56 | 只看该作者

goust51 发表于 2016-11-14 10:54
楼主,GD32移植STemwin成功了吗?可不可以分享一下源码,学习学习!

原代码:
GD32.rar (131.83 KB, 下载次数: 53)


6#

mars4zhu

发表于 2017-6-13 15:04:02 | 只看该作者

在startup文件里面把heap_size 和 stack_size设置大一些。
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条