硬汉嵌入式论坛

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

[emWin] 求助:截屏bmp图片到U盘,花屏问题

[复制链接]

3

主题

14

回帖

23

积分

新手上路

积分
23
发表于 5 小时前 | 显示全部楼层 |阅读模式
本帖最后由 jackjeanxp 于 2026-4-24 14:44 编辑



大家好,上面是屏幕照片和出问题的截图的对比

PCB上CPU和SDRAM部分是参考V7画的,SDRAM在内容取反测试里零报错,移植emWin后显示也正常

emWin是CubeMX H7器件包里的STemWin,2018年的V5.44
V5.44 / 22-March-2018
使用了FreeRTOS

USB驱动和FatFS是用CubeMX直接添加的,向U盘写入txt和csv文件,在电脑上打开,都正常

但是emWin截屏再写入U盘一直花屏,尝试了 GUI_BMP_Serialize 和 GUI_BMP_SerializeExBpp 两个函数都是这样,折腾两天了,求解……



以下是截屏代码:

[C] 纯文本查看 复制代码
FRESULT Udisk_Result;
FATFS Udisk_fs;
FIL Udisk_file;
DIR Udisk_DirInf;
UINT Udisk_bw;
extern USBH_HandleTypeDef hUsbHostFS;
extern ApplicationTypeDef Appli_state;

static void _WriteByte2File(U8 Data, void * p)
{
#if 1
    f_write(p, &Data, 1, &Udisk_bw);
#else
    FIL *File = (FIL *)p;
    f_putc(Data, File);
#endif
}

uint8_t Udisk_PrintScreen(void)
{
    char str[128];
    
    USBH_Stop(&hUsbHostFS);
    osDelay(100);
    FATFS_UnLinkDriver(USBHPath);
    
    osDelay(600);
    retUSBH = FATFS_LinkDriver(&USBH_Driver, USBHPath);
    osDelay(100);
    USBH_Start(&hUsbHostFS);
    osDelay(100);
    f_mount(NULL, NULL, 0);
    osDelay(1000);
    
    // to be opt
    // can we get new state?
    if (Appli_state != APPLICATION_READY)
        return 0;
    
    Udisk_Result = f_mount(&Udisk_fs, "0:", 1);
    if (Udisk_Result != FR_OK)
        goto exit_error;
    
    Udisk_Result = f_opendir(&Udisk_DirInf, "0:/EDT_PrintScreen");
    if (Udisk_Result == FR_OK)
    {
        
    }
    else if (Udisk_Result == FR_NO_PATH)
    {
        Udisk_Result = f_mkdir("0:/EDT_PrintScreen");
        if (Udisk_Result == FR_OK)
        {
            
        }
        else if (Udisk_Result == FR_EXIST)
        {
            
        }
        
        Udisk_Result = f_opendir(&Udisk_DirInf, "0:/EDT_PrintScreen");
        if (Udisk_Result != FR_OK)
            goto exit_error;
    }
    else
    {
        goto exit_error;
    }
    
    sprintf(str, "0:/EDT_PrintScreen/EDT_20%02d%02d%02d_%02d%02d%02d.bmp",
            RtcNow.Year,
            RtcNow.Month,
            RtcNow.Date,
            RtcNow.Hour,
            RtcNow.Minute,
            RtcNow.Second);
    Udisk_Result = f_open(&Udisk_file, str, FA_CREATE_ALWAYS | FA_WRITE);
    if (Udisk_Result != FR_OK)
        goto exit_error;
    
    GUI_LOCK();
//    GUI_BMP_Serialize(_WriteByte2File, &Udisk_file);
    GUI_BMP_SerializeExBpp(_WriteByte2File, 0, 0, 1024, 600, &Udisk_file, 16);
    GUI_UNLOCK();
    
    Udisk_Result = f_close(&Udisk_file);
    if (Udisk_Result != FR_OK)
        goto exit_error;
    
    f_mount(NULL, NULL, 0);
    
    return 1;
    
exit_error:
    return 0;
}




GUI_X.c:

[C] 纯文本查看 复制代码
void GUI_X_InitOS(void)    { _Semaphore = xSemaphoreCreateCountingStatic (1, 0, &_Semaphore_Memory); }
void GUI_X_Unlock(void)    { xSemaphoreGive(_Semaphore); }
void GUI_X_Lock(void)      { xSemaphoreTake(_Semaphore, 0);  }
U32  GUI_X_GetTaskId(void) { return (U32)xTaskGetCurrentTaskHandle(); }

V5.44 / 22-March-2018

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
122239
QQ
发表于 4 小时前 | 显示全部楼层
这个是5.42开始之后版本的bug。

测试STemWin5.40和MDK中带的emWin5.42都有神奇的截图bug,之前版本无此问题,好坑
https://forum.anfulai.cn/forum.p ... 2445&fromuid=58
(出处: 硬汉嵌入式论坛)

---------------------------------------
如果你手头有我们TOOL的话,可以方便截图:

H7-TOOL截图功能操作说明,无需内嵌代码,支持TouchGFX,GUIX,emWin,LVGL,AWTK,裸机等,含多缓冲玩法(2023-02-26)
https://forum.anfulai.cn/forum.p ... 8116&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

3

主题

14

回帖

23

积分

新手上路

积分
23
 楼主| 发表于 2 小时前 | 显示全部楼层
谢谢硬汉哥,我回退版本试试

看来是得整一个 H7-TOOL 了,这时间浪费得冤枉的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-24 19:56 , Processed in 2.007274 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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