3002|0

20

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

神舟IV LCD显示SD卡图片 (简易电子相架功能) [复制链接]


目的: 在LCD上显示图片

方案: 由于STM32F107VC内置内存只有64K,不足以全屏显示板载LCD,SSD1289,320x240x16bit
        图像数据只能通过外部存储设备读入,板置W25X16,或SD。数据需要提前导入。
        另一个方案是通过数据连接在运行时实时传输,USART,LAN,或USB。需要数据服务端程序。
        通过SD传输是开发量最少且可以独立运行的方案

研究: 板载有2个SD卡槽,主板卡槽和LCD板背部槽。
        由于主板卡槽使用的CS线与LCD的CS冲突,于是选择LCD板背后有SD卡插槽
        该槽使用SPI3驱动,与AFIO的Remap连接

实现:

初始化GPIOC/GPIOD/AFIO,并使用SPI3的REMAP外接线

init_spi

    *rcc_apb1enr |= 0x8000;    //SPI3
    *rcc_apb2enr |= 0x31;    //GPIOC GPIOD AFIO

    *afio_mapr |= 0x10000000; //AFIO SPI3 remap


SD的响应值设置超时等待

sd_respons

    while (((rtn&0x80)!=0)&&(cnt)) {    // R1: [MSB]0xxxxxxx


SD的CMD8用于确定新卡的版本,只处理v2以后的卡

sd_process

    if (sd_cmd8()) {
        sd_v2_process();
    } else {
//        sd_v1_process();
    }


ACMD41为SD卡上电,进入可读写状态

ACMD41

        cmd[0]=41;
        cmd[1]=0x40;  //v2 card set volt
        cmd[5]=0x77; //CRC
        sd_command(cmd, out, cc);


SD卡Page的大小为512字节,而图像的每个像素是24bit,3Byte,需要2字节用于处理每页的剩余数据

page_mod

    unsigned char pagedata[512+3]; //512 + 3


            if (512+cc > rtn) {
                for (jj=0; jj<512+cc-rtn; jj++) {
                    pagedata[jj] = pagedata[rtn+jj];
                }
            }
            cc = 512 + cc - rtn;



图像文件需要RGB 24bit,RAW格式文件
使用Linux环境图像转换工具ImageMagick可以简单处理

ImageMagick Convert

$> convert -resize 320x240 ori.jpg stm.rgb

如果图像比例不是4:3, 可以使用调整参数
$> convert -resize 320x240 -background skyblue -gravity center -extent 320x240 ori.jpg stm.rgb

使用USB读卡器将.rgb文件写到SD卡

dump image

 $> dd if=stm.rgb of=/dev/sd?


LCD的像素是RGB5:6:5格式,需要进行转换

pixel_convert

    rr=dat[0];
    gg=dat[1];
    bb=dat[2];

    ddat = ((rr>>3)<<11) | ((gg>>2)<<5) | (bb>>3);
镜像下载 http://sites.google.com/site/btvnlue/stm32/lcdsd [ 本帖最后由 btvnlue 于 2012-3-28 22:44 编辑 ]

run_simple_lcd_sd.zip

13.95 KB, 下载次数: 64

此帖出自stm32/stm8论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表