[原创] 晒设计方案+"私人定制“数码相框

ddllxxrr   2014-2-19 19:52 楼主
没事的时候把喜爱的照片放到数码相框里。而这个相框又是个开发板,不是是很爽地事情。 呵呵。其实有开发板的童鞋,只要自己动动手就可以做出显示自己喜欢的图片的数码相框。 其实我是从例程:\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类的回调函数 用户回调函数整个过程如下图所示: OTG.JPG 首先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:/") } OTG2.JPG 本帖最后由 ddllxxrr 于 2014-2-19 19:56 编辑

回复评论 (8)

比如一幅图 2734247923784507342.jpg 用能编辑大小的看图软件打开: bainiand.GIF 变成宽240高320 本帖最后由 ddllxxrr 于 2014-2-20 06:37 编辑
  • bainianX.jpg
http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
点赞  2014-2-19 19:53
再占位大家注意了哈,这个相框要跑起来一定要有,OTG的USB线,U盘,开发板,缺一不可。 那个BMP文件,直接考到U盘根目录下就行。 我共转了几个: my3.BMP my2.BMP my4.BMP 本帖最后由 ddllxxrr 于 2014-2-20 06:36 编辑
http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
点赞  2014-2-19 19:57
效果图:


IMG_0455.jpg


IMG_0456.jpg


IMG_0457.jpg




  • IMG_0458.jpg
http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
点赞  2014-2-19 20:20
一想到数码相框放在那儿都要接上电源就纳闷

楼主做一个自动感应的吧,而且不要时刻接通220V电源
没工作,没女人老婆,没宽带 ,  没钱
点赞  2014-2-19 20:37
这个好办,可以用锂电池做电源,用人体接近模块感应人的到来
http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
点赞  2014-2-19 20:42
点赞  2014-2-19 23:54
很通用的开发板例程了。加油。做点创意。
点赞  2014-2-20 17:12
不错 不错!
生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙 =================================== 做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
点赞  2014-2-20 17:29
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复