高级会员

- 积分
- 764
- 金钱
- 764
- 注册时间
- 2015-11-28
- 在线时间
- 208 小时
|
50金钱
本帖最后由 yconnor 于 2019-10-16 15:52 编辑
手头上用的是原子的STM32H743IIT6核心板 我这里几乎都是用STM32cubeMX配置的。 SDRAM测试正常,LTDC测试正常,SD卡和文件系统也测试正常的。移植STemWin的时候没有按照原子的例程来移植,因为我看原里的 emWin 库文件是 GUI_CM4F_L.lib 而不是M7内核的,于是按照 “安富莱”的教程和他们的源文件。移植后我写了一段代码来测试是否成功- void demo_task(void const *pvParameters)
- {
- // uint8_t res;
- int x,y;
- while(1){
-
- // GUI_UC_SetEncodeUTF8();
- // hMemBMP = _ShowBMP("0:/PICTURE/BMP/图标.bmp", 0, 30 );
- // hMemBMP = ShowJpeg("0:/PICTURE/JPEG/实例图片.jpg", 0, 0);
- // MainTask();
- GUI_Init();
- GUI_SetLayerVisEx (1, 0);
- GUI_SetBkColor(GUI_YELLOW);
- GUI_Clear();
- GUI_SetColor(GUI_RED);
- GUI_SetFont(&GUI_Font32_1);
- GUI_DispString("Hello world!");
- x = (LCD_GetXSize()-100)/2;
- y = (LCD_GetYSize()-20)/2;
- GUI_DispStringAt("Hello world!", x, y);
- while(1){
- // GUI_Delay(100);
- // GUI_Exec();
- osDelay(100);
- }
- }
- }
复制代码
FreeRTOS 建了一个任务,这个任务里GUI初始化和GUI_DispString();已及下面的两条语句获取x,y坐标也正常。但GUI_DispStringAt就会出现硬件总线错误中断(PRECISERR)如下图所示。
开启了MPU和Icache和Dcache。MPU代码如下:
- void MPU_Config(void)
- {
- MPU_Region_InitTypeDef MPU_InitStruct = {0};
- /* Disables the MPU */
- HAL_MPU_Disable();
- /** Initializes and configures the Region and the memory to be protected
- */
- MPU_InitStruct.Enable = MPU_REGION_ENABLE;
- MPU_InitStruct.Number = MPU_REGION_NUMBER0;
- MPU_InitStruct.BaseAddress = 0x24000000;
- MPU_InitStruct.Size = MPU_REGION_SIZE_512KB;
- MPU_InitStruct.SubRegionDisable = 0x0;
- MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
- MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
- MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
- MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
- MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
- MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
- HAL_MPU_ConfigRegion(&MPU_InitStruct);
-
- MPU_InitStruct.Enable = MPU_REGION_ENABLE;
- MPU_InitStruct.BaseAddress = 0xC0000000;
- MPU_InitStruct.Size = MPU_REGION_SIZE_32MB;
- MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
- MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
- MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
- MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
- MPU_InitStruct.Number = MPU_REGION_NUMBER1;
- MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
- MPU_InitStruct.SubRegionDisable = 0x00;
- MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
- HAL_MPU_ConfigRegion(&MPU_InitStruct);
- /* Enables the MPU */
- HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
- }
复制代码 求各位大佬能够指点一下。谢谢了!
自己移植过后的工程如下第一个没有Drivers文件夹 STM32H743.ioc 文件打开可看到cubemx的配置,第二个是安富莱的移植
H743CubeEMwinTest.rar
(5.76 MB, 下载次数: 31)
|
最佳答案
查看完整内容[请看2#楼]
老哥,我估计你这很少人会去看你的代码的,
不过我还真去看了,首先你这个内存分配就错了啊,
void GUI_X_Config(void)
{
#if EX_SRAM
static U32 *aMemory;
aMemory = (U32 *)LCD_FRAME_BUF_ADDR;
/* Assign memory to emWin */
GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);
GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);
#else
// /* 32 bit aligned memory area */
// static U32 aMemory[GUI_NUMB ...
|