硬汉嵌入式论坛

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

[emWin] 关于在STM32-X3开发板上移植 Ex001-2DGL_BMP

[复制链接]

4

主题

14

回帖

26

积分

新手上路

积分
26
发表于 2014-11-17 11:18:52 | 显示全部楼层 |阅读模式
1、首先明确的是在这个例程上显示屏幕颜色为红色成功,换句话说底层移植已经成功。
2、按照说明把1.bmp和2.bmp图片拷贝到SD卡上,通过单步运行发现在进入_ShowBMP("2.bmp")函数中的result = f_open(&file, sFilename, FA_OPEN_EXISTING | FA_READ | FA_OPEN_ALWAYS);这个子函数后一直退不出来,死循环了,通过连接串口发送的一直是“FLGASUCCESS”,通过阅读stemWin例程1-60期所述的区别在于例程中没有bsp_InitExtSRAM(),不知道是什么原因。个人分析可能是使用fatfs读取文件不成功所致,还请楼主及各位同位高手协助分析,谢谢!
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115692
QQ
发表于 2014-11-17 12:19:01 | 显示全部楼层
楼主,我看下你这个函数里面的具体内容:_ShowBMP("2.bmp")

有一点要注意:我是用BMP显示时,我是将所有的图片数据读到了外部SRAM中,然后才调用显示,X3板子没有外置SRAM,所有就得采用边从SD卡读取数据,边显示的方式。
回复

使用道具 举报

4

主题

14

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2014-11-17 16:49:15 | 显示全部楼层
static void _ShowBMP(const char * sFilename)
{
    int XSize, YSize;
    GUI_HMEM hMem;
    char *_acBuffer2;
    int i;

    /* 申请一块内存空间 并且将其清零 */
    hMem = GUI_ALLOC_AllocZero(100000);
    /* 将申请到内存的句柄转换成指针类型 */
    _acBuffer2 = GUI_ALLOC_h2p(hMem);

   
    /* 打开文件 */        
    result = f_open(&file, sFilename, FA_OPEN_EXISTING | FA_READ | FA_OPEN_ALWAYS);
    if (result != FR_OK)
    {
        return;
    }

    result = f_read(&file, _acBuffer2, file.fsize, &bw);
      if (result != FR_OK)
      {
        return;
      }

    XSize = GUI_BMP_GetXSize(_acBuffer2);
    YSize = GUI_BMP_GetXSize(_acBuffer2);

    while(1)
    {
        for(i = 100; i < 600; i += 10)
        {
            GUI_BMP_DrawScaled(_acBuffer2,
                               (LCD_GetXSize() - XSize*i/100)/2,
                               (LCD_GetYSize() - YSize*i/100)/2,
                               i,
                               100);
            GUI_Delay(100);   
        }
        GUI_Clear();
               
    }

//    GUI_ALLOC_Free(hMem);
//    f_close(&file);
}
回复

使用道具 举报

4

主题

14

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2014-11-17 16:51:32 | 显示全部楼层
"2.bmp"放在SD卡根目录下。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115692
QQ
发表于 2014-11-17 22:30:01 | 显示全部楼层

回 wlp0574 的帖子

wlp0574:"2.bmp"放在SD卡根目录下。
 (2014-11-17 16:51) 
这种方法不行的,这种方法是加载到外部SRAM中实现的。你要用那种边读取边显示的方法。
回复

使用道具 举报

4

主题

14

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2014-11-18 09:09:52 | 显示全部楼层
好的,谢谢!因为买的是X3的板子,学习的例子几乎没有,所以只能在V5的例程上移植。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115692
QQ
发表于 2014-11-18 12:23:23 | 显示全部楼层

回 wlp0574 的帖子

wlp0574:好的,谢谢!因为买的是X3的板子,学习的例子几乎没有,所以只能在V5的例程上移植。 (2014-11-18 09:09) 
嗯,你就用那种边读取边显示的方案就行。
回复

使用道具 举报

4

主题

14

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2014-11-19 15:56:17 | 显示全部楼层
TO:版主
现在通过边读边显示数据成功了,但是显示的图片与我在SD卡上的图片信息不一致,烦请协助分析一下.万分感谢!
程序如下:
/*
******************************************************************
*
*       _ShowBMP
*
* Shows the contents of a bitmap file
******************************************************************
*/
char _acBuffer[1024];
char *_acBuffer2 = _acBuffer;
static void _ShowBMP (const char *sFilename)
{
    int uiCycTimes, uiCycTimes_Y;
    int uiXOffset=0, uiYOffset=0;
    int uiXSize=100, uiYSize=200;
    unsigned int uiBMPWidth=0, uiBMPHeight=0, uiBMPCount=0;
    //GUI_HMEM hMem;
    /* 申请一块内存空间 并且将其清零 */
    //hMem = GUI_ALLOC_AllocZero(100000);
    /* 将申请到内存的句柄转换成指针类型 */
    //_acBuffer2 = GUI_ALLOC_h2p(hMem);

    /* 打开文件 */
    result = f_open(&file, sFilename, FA_OPEN_EXISTING | FA_READ | FA_OPEN_ALWAYS);
    if (result != FR_OK)
    {
        return;
    }

    //result = f_read(&file, _acBuffer2, file.fsize, &bw);
    result = f_read(&file, _acBuffer2, 0x36, &bw);
      if (result != FR_OK)
      {
        return;
      }
    if (_acBuffer2[0]==0x42 && _acBuffer2[1]==0x4D)        //文件格式标记为BM
    {
        // 图片宽度信息
        uiBMPWidth = _acBuffer2[18]+(_acBuffer2[19]<<8)+(_acBuffer2[20]<<16)+(_acBuffer2[21]<<24);
        // 图片高度信息
        uiBMPHeight = _acBuffer2[22]+(_acBuffer2[23]<<8)+(_acBuffer2[24]<<16)+(_acBuffer2[25]<<24);
        // 象素所需的位数
        uiBMPCount = _acBuffer2[28]+(_acBuffer2[29]<<8);
        if (uiBMPCount == 24)        // 4(16色),8(256色)16(高彩色)或24(真彩色)
        {
            while(1)
            {
                //result = f_read(&file, _acBuffer2, 3, &bw);             // 读取3个数据
                //if (result||bw == 0)
                //    break;
                uiXOffset = 0;
                uiYOffset = 0;
                for (uiCycTimes_Y=0; uiCycTimes_Y<uiBMPHeight; uiCycTimes_Y++)
                {
                    for (uiCycTimes=0; uiCycTimes<uiBMPWidth; uiCycTimes++)
                    {
                        result = f_read(&file, _acBuffer2, 3, &bw);             // 读取3个数据
                        if (result||bw == 0)
                            break;
                        /* 画点函数 */
                        RA8875_PutPixel(uiXSize+uiXOffset, uiYSize+uiBMPHeight-1-uiYOffset,((_acBuffer2[2]*32/256)<<11 | (_acBuffer2[1]*64/256)<<5 |(_acBuffer2[3]*32/256)));
                        uiXOffset++;
                    }
                    uiXOffset = 0;
                    uiYOffset++;
                }
            }
        }                    
    }
    /*XSize = GUI_BMP_GetXSize(_acBuffer2);
    YSize = GUI_BMP_GetXSize(_acBuffer2);

    GUI_BMP_Draw(_acBuffer2,0,0);
    while(1)
    {
        for(i = 100; i < 600; i += 10)
        {
            GUI_BMP_DrawScaled(_acBuffer2,
                               (LCD_GetXSize() - XSize*i/100)/2,
                               (LCD_GetYSize() - YSize*i/100)/2,
                               i,
                               100);
            GUI_Delay(100);   
        }
        GUI_Clear();

    }*/

//    GUI_ALLOC_Free(hMem);
//    f_close(&file);
}

SD卡读到的图片如下:
IMG_6103.JPG

实际的图片如下:
IMG_6104.JPG
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115692
QQ
发表于 2014-11-20 17:07:45 | 显示全部楼层

回 wlp0574 的帖子

wlp0574:TO:版主
现在通过边读边显示数据成功了,但是显示的图片与我在SD卡上的图片信息不一致,烦请协助分析一下.万分感谢!
程序如下:
/*
******************************************************************
....... (2014-11-19 15:56) 
不要用这种方式显示,使用emWin的话,最好全部用emWin自带的函数。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115692
QQ
发表于 2014-11-20 17:08:44 | 显示全部楼层

回 wlp0574 的帖子

wlp0574:TO:版主
现在通过边读边显示数据成功了,但是显示的图片与我在SD卡上的图片信息不一致,烦请协助分析一下.万分感谢!
程序如下:
/*
******************************************************************
....... (2014-11-19 15:56) 
这种边读,边显示也有例子的。看60期emWin教程的BMP图片显示章节。
回复

使用道具 举报

4

主题

14

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2014-11-21 11:01:00 | 显示全部楼层
版主:
    你好,今天早上按你所述试了一下(看60期emWin教程的BMP图片显示章节),小图片可以的,大图片不行。
    本人附上整个工程,希望你能帮我解决一下,因为是初学者,有些东西不是很理解,需要慢慢消化,需要一个过程,占用你一点时间,X3+7英寸TFT(RA8875)。尝试改变GUI_NUMBYTES的值,但Keil提示空间不够。万分感谢!
    小图片:
IMG_6112.JPG
    大图片:
    IMG_6110.JPG
    原程序如下:
16-STemWin5.20+FreeRTOS+Fatfs(BMP).rar (40.67 MB, 下载次数: 37)
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115692
QQ
发表于 2014-11-21 12:08:05 | 显示全部楼层
wlp0574:
版主:
    你好,今天早上按你所述试了一下(看60期emWin教程的BMP图片显示章节),小图片可以的,大图片不行。
    本人附上整个工程,希望你能帮我解决一下,因为是初学者,有些东西不是很理解,需要慢慢消化,需要一个过程,占用你一点时间,X3+7英寸TFT(RA8875)。尝试改变GUI_NUMBYTES的值,但Keil提示空间不够。万分感谢!
    小图片:

.......

注意这里:
1.png
回复

使用道具 举报

4

主题

14

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2014-11-21 12:47:39 | 显示全部楼层
这个我也设了,版主所述一致,内容都放在main.c中,我是按照11.3章节改的,但是显示出来的效果就是不对。可以看一下程序哦!
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115692
QQ
发表于 2014-11-21 23:02:11 | 显示全部楼层

回 wlp0574 的帖子

wlp0574:这个我也设了,版主所述一致,内容都放在main.c中,我是按照11.3章节改的,但是显示出来的效果就是不对。可以看一下程序哦! (2014-11-21 12:47)
你的程序太大了,老是下载失败。
回复

使用道具 举报

4

主题

14

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2014-11-22 08:40:17 | 显示全部楼层
版主:
      你好!
       能不能把邮箱地址告诉我,我给你发过去.谢谢!
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115692
QQ
发表于 2014-11-22 18:49:12 | 显示全部楼层

回 wlp0574 的帖子

wlp0574:版主:
      你好!
       能不能把邮箱地址告诉我,我给你发过去.谢谢! (2014-11-22 08:40)
512464265@qq.com
回复

使用道具 举报

4

主题

14

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2014-11-26 08:55:17 | 显示全部楼层
版主:
        程序已经发到你邮箱里,请查收,协助查查问题,谢谢!
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115692
QQ
发表于 2014-11-26 09:47:25 | 显示全部楼层

回 wlp0574 的帖子

wlp0574:版主:
        程序已经发到你邮箱里,请查收,协助查查问题,谢谢! (2014-11-26 08:55) 
不好意思啊,今天抓紧给你看下。
回复

使用道具 举报

4

主题

14

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2014-11-30 22:31:46 | 显示全部楼层
版主帮我看的怎么样了,问题找到了没。一直等着你的测试结果呢,哈哈
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-12 11:24 , Processed in 0.354644 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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