5599|8

1万

帖子

16

TA的资源

版主

楼主
 

晒设计方案+"私人定制“数码相框 [复制链接]

本帖最后由 ddllxxrr 于 2014-2-19 19:56 编辑

没事的时候把喜爱的照片放到数码相框里。而这个相框又是个开发板,不是是很爽地事情。

呵呵。其实有开发板的童鞋,只要自己动动手就可以做出显示自己喜欢的图片的数码相框。

其实我是从例程:\STM32F429I-Discovery_FW_V1.0.1\Projects\Peripheral_Examples\LTDC_AnimatedPictureFromUSB

得到的启发,动手做出来地。

一定要记住,显示的图片一定是BMP的,且宽240高320地。

这个可以用看图软件,如1234看图王来转换。

下面先说下运行机制:


应用相关文件:
板子相关
>> GPIO连接:DM、DP、Vbus、SOF…
>> 系统中断NVIC配置和使能
>> 系统用到的延时功能

应用相关
>> 各种用户回调函数
>> 应用相关的初始化、实现等
MSC类相关文件:
处理BOT流程
MSC类特有命令和request处理
存储介质访问
各种SCSI命令处理

用户只需调用:
USBH_Init(&USB_OTG_Core,
          USB_OTG_HS_CORE_ID
          &USBH_MSC_cb,
          &USR_cb);
其中
USR_cb是用户回调函数:
USBH_Usr_cb_TypeDef USR_cb =
{
  USBH_USR_Init,
  USBH_USR_DeInit,
  USBH_USR_DeviceAttached,
  USBH_USR_ResetDevice,
  USBH_USR_DeviceDisconnected,
  USBH_USR_OverCurrentDetected,
  USBH_USR_DeviceSpeedDetected,
  USBH_USR_Device_DescAvailable,
  USBH_USR_DeviceAddressAssigned,
  USBH_USR_Configuration_DescAvailable,
  USBH_USR_Manufacturer_String,
  USBH_USR_Product_String,
  USBH_USR_SerialNum_String,
  USBH_USR_EnumerationDone,
  USBH_USR_UserInput,
  USBH_USR_MSC_Application,
  USBH_USR_DeviceNotSupported,
  USBH_USR_UnrecoveredError
     
};
USBH_MSC_cb是类回调函数
USBH_Class_cb_TypeDef  USBH_MSC_cb =  
{
  USBH_MSC_InterfaceInit,
  USBH_MSC_InterfaceDeInit,
  USBH_MSC_ClassRequest,
  USBH_MSC_Handle,
};
运行时调用:
While(1){
USBH_Process(&USB_OTG_Core,&USB_Host);
}
其中USB_OTG_Core的数据结构为:
typedef struct _HCD
{
  uint8_t                      Rx_Buffer [MAX_DATA_LENGTH];   
  __IO uint32_t            ConnSts;
  __IO uint32_t            ErrCnt[USB_OTG_MAX_TX_FIFOS];
  __IO uint32_t            XferCnt[USB_OTG_MAX_TX_FIFOS];
  __IO HC_STATUS       HC_Status[USB_OTG_MAX_TX_FIFOS];   
  __IO URB_STATE        URB_State[USB_OTG_MAX_TX_FIFOS];
  USB_OTG_HC             hc [USB_OTG_MAX_TX_FIFOS];
  uint16_t                     channel [USB_OTG_MAX_TX_FIFOS];
}
HCD_DEV , *USB_OTG_USBH_PDEV;

USBH_HOST的数据结构是:
typedef struct _Host_TypeDef
{
  HOST_State                  gState;        /* USBH_Process大循环的switch */  
  HOST_State                gStateBkp;   
  ENUM_State                EnumState; /* 用于USBH_HandleEnum循环 */
  CMD_State                 RequestState;       /* USBH_CtlReq循环 */
  USBH_Ctrl_TypeDef       Control;
  USBH_Device_TypeDef     device_prop;  
  USBH_Class_cb_TypeDef             *class_cb;   
  USBH_Usr_cb_TypeDef    *usr_cb;
} USBH_HOST, *pUSBH_HOST;
USBH_HOST    USB_Host
MSC、HID类的回调函数
用户回调函数整个过程如下图所示:




首先U盘插上主机通过中断函数检测到U盘插上。
• return (pdev->host.ConnSts)
• 如果检测到插入,状态从HOST_IDEL  HOST_DEV_ATTACHED
• phost->gState = HOST_DEV_ATTACHED

插出也是通过中断
phost->gState = HOST_DEV_DISCONNECTED

为设备的双向0端点各分配一个channel,并打开

读取状态寄存器 pdev->regs.HPRT0,其中有2个bit域表示速度信息

然后是杖举。杖举结束后。就发出各种请求。

case HOST_USR_INPUT:

if ( phost->usr_cb->UserInput() == OK)
    {
      if ( (phost->class_cb->Init (pdev, phost)) == OK)
      { phost->gState  = HOST_CLASS_REQUEST;  }      
    }  

case HOST_CLASS_REQUEST:   
     status = phost->class_cb->Requests (pdev, phost);
     
     if(status == USBH_OK)
     { phost->gState  = HOST_CLASS; }   
      
     else
     { USBH_ErrorHandle(phost, status); }

case HOST_CLASS:   
     
    status = phost->class_cb->Machine (pdev, phost);
    USBH_ErrorHandle(phost, status);
    break;

一系列杖举和发请求之后,最终到了用户处理函数。
pphost->usr_cb->UserApplication()

int USBH_USR_MSC_Application(void)
{
  USBH_USR_ApplicationState

  = USH_USR_FS_INIT:    f_mount( 0, &fatfs )

  = USH_USR_FS_READLIST:  Explore_Disk("0:/", 1)
       f_opendir(&dir, path);
       f_readdir(&dir, &fno);


  = USH_USR_FS_WRITEFILE:  f_mount(0, &fatfs )
      f_open(&file, "0:STM32.TXT",FA_CREATE_ALWAYS | FA_WRITE)
      f_write (&file, writeTextBuff, bytesToWrite, (void *)&bytesWritten);  
      …………….
      f_close(&file)
      f_mount(0, NULL)

  = USH_USR_FS_DRAW:     f_mount( 0, &fatfs )
       Image_Browser("0:/")
      
      
}



此帖出自stm32/stm8论坛

最新回复

不错 不错!  详情 回复 发表于 2014-2-20 17:29

赞赏

1

查看全部赞赏

点赞 关注(1)
 

回复
举报

1万

帖子

16

TA的资源

版主

沙发
 
本帖最后由 ddllxxrr 于 2014-2-20 06:37 编辑

比如一幅图
用能编辑大小的看图软件打开:




变成宽240高320



bainianX.jpg (16.35 KB, 下载次数: 0)

bainianX.jpg
此帖出自stm32/stm8论坛
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 

回复

1万

帖子

16

TA的资源

版主

板凳
 
本帖最后由 ddllxxrr 于 2014-2-20 06:36 编辑

再占位大家注意了哈,这个相框要跑起来一定要有,OTG的USB线,U盘,开发板,缺一不可。
那个BMP文件,直接考到U盘根目录下就行。
我共转了几个:









此帖出自stm32/stm8论坛
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 

回复

1万

帖子

16

TA的资源

版主

4
 
效果图:













IMG_0458.jpg (123.89 KB, 下载次数: 0)

IMG_0458.jpg
此帖出自stm32/stm8论坛
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

5276

帖子

5

TA的资源

裸片初长成(中级)

5
 
一想到数码相框放在那儿都要接上电源就纳闷

楼主做一个自动感应的吧,而且不要时刻接通220V电源
此帖出自stm32/stm8论坛
 
个人签名没工作,没女人老婆,没宽带 ,  没钱
 
 

回复

1万

帖子

16

TA的资源

版主

6
 
这个好办,可以用锂电池做电源,用人体接近模块感应人的到来
此帖出自stm32/stm8论坛
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

603

帖子

1

TA的资源

纯净的硅(中级)

7
 
此帖出自stm32/stm8论坛
 
 
 

回复

775

帖子

0

TA的资源

纯净的硅(高级)

8
 
很通用的开发板例程了。加油。做点创意。
此帖出自stm32/stm8论坛
 
 
 

回复

5979

帖子

8

TA的资源

版主

9
 
不错 不错!
此帖出自stm32/stm8论坛
 
个人签名生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙
===================================
做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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