硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4143|回复: 10
收起左侧

[emWin] GUI_Init进入了hard_default

[复制链接]

5

主题

26

回帖

41

积分

新手上路

积分
41
发表于 2019-11-15 09:27:27 | 显示全部楼层 |阅读模式
芯片是STM32H743VIT6,显示屏驱动是ST7789VI ,SPI通信;下载的 STemwin-V1.2.0,在IAR平台移植。
移植是参考安富莱-V6开发板emwin教程的 带os方式移植 章节,
但是我用了LCDConf_FlexColor_Template.c 文件,教程里用了LCDConf_Lin_Template.c 文件。

我想用H743的SRAM1和SRAM2(128K+128K)用于STemwin,不确定这样定义对不对。
  1. #define GUI_NUMBYTES  (1024*100)

  2. static U32 *aMemory = (U32*)((U32)0x30000000);
  3.   //
  4.   // Assign memory to emWin
  5.   //
  6.   GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);
  7.   GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIE);
复制代码




在GUI_Init之前运行了CRC初始化
  1. static void MX_CRC_Init(void)
  2. {
  3.   hcrc.Instance = CRC;
  4.   hcrc.Init.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_ENABLE;
  5.   hcrc.Init.DefaultInitValueUse = DEFAULT_INIT_VALUE_ENABLE;
  6.   hcrc.Init.InputDataInversionMode = CRC_INPUTDATA_INVERSION_NONE;
  7.   hcrc.Init.OutputDataInversionMode = CRC_OUTPUTDATA_INVERSION_DISABLE;
  8.   hcrc.InputDataFormat = CRC_INPUTDATA_FORMAT_BYTES;
  9.   if (HAL_CRC_Init(&hcrc) != HAL_OK)
  10.   {
  11.     Error_Handler();
  12.   }
  13. }
复制代码
  1. MX_CRC_Init();
  2.         GUI_Init();
  3.         GUI_SetTextMode(GUI_TM_TRANS);
  4.         GUI_SetColor(GUI_BLUE);
复制代码



出现的问题是进入GUI_Init函数后就发生错误,还没到 GUI_X_Config 函数,错误提示信息贴图
The processor has escalated a configurable-priority exception to HardFault.
   An imprecise data access error has occurred (CFSR.IMPRECISERR, BFAR).
Exception occured at PC = 0x800f654, LR = 0x801f939
psr: 0x01000000
r00: 0x40023000
r01: 0x00000001
r02: 0x00000006
r03: 0x00000000
r04: 0x20005ad0
r05: 0x20004a06
r06: 0x0801f92f
r07: 0x00000006
r08: 0x20005a90
r09: 0xdeadbeef
r10: 0xdeadbeef
r11: 0xdeadbeef
r12: 0x00000074
lr: 0x0801f939
pc: 0x0800f654
请问一下这种问题可能是什么原因导致的?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115785
QQ
发表于 2019-11-15 09:29:32 | 显示全部楼层
不用初始化CRC,仅需使能CRC时钟。
回复

使用道具 举报

5

主题

26

回帖

41

积分

新手上路

积分
41
 楼主| 发表于 2019-11-15 09:38:09 | 显示全部楼层
eric2013 发表于 2019-11-15 09:29
不用初始化CRC,仅需使能CRC时钟。

我把CRC初始化换成了使能CRC时钟
  1. __HAL_RCC_CRC_CLK_ENABLE();
  2.         GUI_Init();
复制代码

还是发生了错误,错误类型发生了变化
lr: 0x08020087
pc: 0x0800f628
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115785
QQ
发表于 2019-11-15 09:48:11 | 显示全部楼层
别用这个自带驱动,使用通用移植方法。
回复

使用道具 举报

5

主题

26

回帖

41

积分

新手上路

积分
41
 楼主| 发表于 2019-11-15 09:58:40 | 显示全部楼层
eric2013 发表于 2019-11-15 09:48
别用这个自带驱动,使用通用移植方法。

意思是使用LCDConf_Lin_Template.c文件自行改动?
我看了您教程里这个文件,内容有点长
不过这样的话我还是好好看看吧
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115785
QQ
发表于 2019-11-15 10:02:01 | 显示全部楼层
水滴石穿 发表于 2019-11-15 09:58
意思是使用LCDConf_Lin_Template.c文件自行改动?
我看了您教程里这个文件,内容有点长。
不过这样 ...

这个不是通用移植,flex,lin等都是自带驱动。

通用移植是这个GUIDRV_Template.c

仅需打点和读点就可以实现。非常简单。
回复

使用道具 举报

5

主题

26

回帖

41

积分

新手上路

积分
41
 楼主| 发表于 2019-11-15 10:14:10 | 显示全部楼层
eric2013 发表于 2019-11-15 10:02
这个不是通用移植,flex,lin等都是自带驱动。

通用移植是这个GUIDRV_Template.c

噢噢,这个文件我添加了自己的打点、读点、填充函数
  1. //
  2.       // Write into hardware ... Adapt to your system
  3.       //
  4.       // TBD by customer...
  5.       //
  6.                 set_pixel(x,y,PixelIndex);
复制代码

但是这个文件里面没有LCD_X_Config 和 LCD_X_DisplayDriver函数,我是把自带驱动从工程中移除再实现这两个函数?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115785
QQ
发表于 2019-11-15 10:17:36 | 显示全部楼层
水滴石穿 发表于 2019-11-15 10:14
噢噢,这个文件我添加了自己的打点、读点、填充函数

但是这个文件里面没有LCD_X_Config 和 LCD_X_Disp ...

看这个帖子吧,看完就会了

第一期:在OLED上面移植STemWin5.20
http://www.armbbs.cn/forum.php?mod=viewthread&tid=1678&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

5

主题

26

回帖

41

积分

新手上路

积分
41
 楼主| 发表于 2019-11-15 11:23:05 | 显示全部楼层
eric2013 发表于 2019-11-15 10:17
看这个帖子吧,看完就会了

第一期:在OLED上面移植STemWin5.20

跟着帖子调整了文件,新建了LCDConf.c文件实现LCD_X_DisplayDriver和LCD_X_Config函数
  1. void LCD_X_Config(void) {
  2.   // Set display driver and color conversion
  3.   //
  4.   GUI_DEVICE_CreateAndLink(GUIDRV_TEMPLATE, GUICC_M565, 0, 0);
  5.   //
  6.   // Display driver configuration, required for Lin-driver
  7.   //
  8.   LCD_SetSizeEx (0, 240 , 320);
  9.   LCD_SetVSizeEx(0, 240 , 320);
  10. }
复制代码

还是卡在了GUI_Init,
  1. lr: 0x08020abb
  2. pc: 0x0800f600
复制代码
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115785
QQ
发表于 2019-11-15 11:26:29 | 显示全部楼层
水滴石穿 发表于 2019-11-15 11:23
跟着帖子调整了文件,新建了LCDConf.c文件实现LCD_X_DisplayDriver和LCD_X_Config函数

还是卡在了GUI_ ...

GUIDRV_Template.c里面读写函数写了没有,如果写了,基本可以说明你的显示屏读写API就有问题。

如果你的裸机读写实现了,加emWin很简单。
回复

使用道具 举报

5

主题

26

回帖

41

积分

新手上路

积分
41
 楼主| 发表于 2019-11-15 11:58:37 | 显示全部楼层
eric2013 发表于 2019-11-15 11:26
GUIDRV_Template.c里面读写函数写了没有,如果写了,基本可以说明你的显示屏读写API就有问题。

如果你 ...

刚测试了我的读写函数,打点函数可以,就是都回来的色彩值与写进去的不一样
不知道是不是这个导致的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-18 09:47 , Processed in 0.266889 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表