LVGL加载外部flash上图片

void loadBitmap(lv_img_dsc_t *image, uint32_t start_addr, uint32_t file_size)
{
    uint8_t *pbuf;        //读取数据缓冲区
    uint8_t *pbmp;
    uint32_t header;
    int secTime = file_size/4096;
    int secOff = file_size%4096;
    int i;
    dbg_printf(" secTime = %d, secOff = %d\r\n", secTime, secOff);

    pbuf = lv_mem_alloc(file_size);

    for (i=0; i<secTime; i++) {
        SPI_Flash_Read(&pbuf[i*4096], start_addr+i*4096, 4096);
    }
    if (secOff>0) {
        SPI_Flash_Read(&pbuf[secTime*4096], start_addr+secTime*4096, secOff);
    }
    /* 获取图片数据流 */
    pbmp = (uint8_t *)pbuf + 4;
    /* 获取头 */
    header = (uint32_t)pbuf[3] << 24;
    header |= (uint32_t)pbuf[2] << 16;
    header |= (uint32_t)pbuf[1] << 8;
    header |= (uint32_t)pbuf[0];

    image->header.cf = pbuf[0];
    image->header.always_zero = 0;
    image->header.w = (uint16_t)(header >> 10);
    image->header.h = (uint16_t)(header >> 21);
    image->data_size = file_size - 4;
    image->data = pbmp;
}

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
你可以使用STM32CubeIDE和LVGL库来在外部Flash存储图片。下面是一个简单的步骤: 1. 首先,确保你的外部Flash已正确连接到STM32微控制器上。 2. 在STM32CubeIDE中创建一个新的工程,并选择适合你的微控制器型号。 3. 配置外部Flash的接口和引脚。在CubeMX中选择"Pinout & Configuration"选项,然后选择你的微控制器型号并配置外部Flash接口和引脚。 4. 在CubeMX的"Middleware"选项中启用FatFS文件系统。这将允许你访问外部Flash作为文件系统。 5. 生成代码并打开生成的工程。 6. 在工程中创建一个文件夹来存储图片文件。 7. 将你的图片文件复制到该文件夹中。 8. 在代码中使用FatFS库来读取外部Flash中的图片文件。你可以使用类似下面的代码来实现: ```c FIL file; UINT bytesRead; uint8_t buffer[1024]; if (f_open(&file, "image.jpg", FA_READ) == FR_OK) { while (f_read(&file, buffer, sizeof(buffer), &bytesRead) == FR_OK && bytesRead > 0) { // 处理读取的数据,例如将数据发送到LCD显示器 // ... } f_close(&file); } ``` 这个例子假设你的图片文件名为"image.jpg",你可以根据你的实际情况更改文件名和处理读取数据的代码。 9. 在LVGL中使用`lv_img_create`函数来创建图像对象,并设置图像对象的源为外部Flash中的图片数据。你可以使用类似下面的代码来实现: ```c lv_obj_t * img = lv_img_create(lv_scr_act(), NULL); lv_img_set_src(img, "path/to/image.jpg"); ``` 这个例子假设你的图片文件路径为"path/to/image.jpg",你可以根据你的实际情况更改图片文件路径。 这样,你就可以在STM32上使用外部Flash存储和显示图片了。请注意,这只是一个简单的示例,你可能需要根据你的具体要求进行适当的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值