bjhdtv
bjhdtv

注册于 7 years ago

回答
0
文章
0
关注者
0

请问你RT-Thread+STM32F4下面的usb host问题解决了吗?
我也碰到这个问题了

1,需要rt_usb_class_driver_storage()的实现,没有代码实现。

#ifdef RT_USB_CLASS_MASS_STORAGE
/* register mass storage class driver */
drv = rt_usb_class_driver_storage();
rt_usb_class_driver_register(drv);
#endif

2,然后才可以使用dfs_mount测试吧,目前还没找到usb device,只有一个总线设备
finsh />list_device()
device type
-------- ----------
e0 Network Interface
rtc RTC
lcd Graphic Device
susb USB Host Bus
touch Unknown
flash0 Block Device
spi21 SPI Device
spi20 SPI Device
spi2 SPI Bus
uart3 Character Device
0, 0x00000000

改成512不行,只有4096可以的。包括SD卡和SPI-FLASH,都是FAT32文件系统

代码是完全参考stm32f4_iap_using_usart的;擦写前后需要加上FLASH_Unlock();和
FLASH_Lock();对吧?

能提供一下ST提供的FLASH擦写例程或者下载链接麽?
谢谢,困扰我好多天

TF卡升级固件不是在Boot里面做的,而是在APP里面做的。boot里面没有rt-thread,只是参考stm32f4_iap_using_usart简单改了下。不知这个方案是否可行?

谢谢

上面的代码rt_hw_interrupt_disable();
是多余,刚才调试使用的。

感谢回复,我的意思就是说目前STM32F4板子上面的SPI-FLASH有Boot区域+APP区域,然后希望板子启动之到APP之后,能够mount TF卡,检测是否有升级文件rtthread.bin,有的话,则循环读取该文件,每次读256bytes,擦写到APP区域,全部擦写完毕,则跳转重启。
目前碰到的问题是:循环读取该文件,擦写到APP区域,FLASH_If_Write就挂掉了。
APP启动之后,能否自己擦写自己?
补充:
1)TF卡里面的rtthread.bin文件和烧入到APP一样,则反复写都没问题;一旦TF卡里面的rtthread.bin文件和烧入到APP不一样,则挂了。
2)APP是采用romfs,TF卡是fat32文件系统
3)附上代码:

if (dfs_file_open(&src_fd, "/sd/rtthread.bin", DFS_O_RDONLY) < 0)
{
rt_kprintf("Open %s Failed
", "/sd/rtthread.bin");
return ;
}
else
{
rt_kprintf("Open %s OK,src_fd.size=%d
", "/sd/rtthread.bin",src_fd.size);
}


if (src_fd.size > (USER_FLASH_SIZE + 1))
{
rt_kprintf("src_fd.size=%d > %d
",src_fd.size,USER_FLASH_SIZE+1);
return ;
}

/*rt_kprintf("FLASH_If_Erase start
");
FLASH_If_Erase(APPLICATION_ADDRESS);
rt_kprintf("FLASH_If_Erase over
");*/
rt_hw_interrupt_disable();

do
{
memset(block_ptr,0,BUZZER);
read_bytes = dfs_file_read(&src_fd, block_ptr, BUZZER);
if (read_bytes > 0)
{
//write_spiflash(block_ptr,read_bytes);
//dfs_file_write(&fd, block_ptr, read_bytes);
ramsource = (uint32_t)block_ptr;
packet_length=BUZZER;
totle_length+=read_bytes;
/* Write received data in Flash */
if (FLASH_If_Write(&flashdestination, (uint32_t*) ramsource, (uint16_t) packet_length/4) == 0)
{
rt_kprintf("write ok:%d,allszie=%d
",packet_length,totle_length);
}
else /* An error occurred while writing to Flash memory */
{
rt_kprintf("write err:%d,allszie=%d
",packet_length,totle_length);
return ;
}
}
} while (read_bytes > 0);

dfs_file_close(&src_fd);

rt_thread_delay(RT_TICK_PER_SECOND * 3);
rt_kprintf("FLASH_If_Write over:%d bytes,Now reboot
",totle_length);

if (1) /* execute the new program */
{
JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
/* Jump to user application */
Jump_To_Application = (pFunction) JumpAddress;
/* Initialize user application's Stack Pointer */
__set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
Jump_To_Application();
}

没人回复吗?需要自己实现吗,有现成的麽

以上问题搞定了。
另外在 combobox 和 listbox组件上如何支持垂直滚动条?1屏幕显示不下啊
分别使用rtgui_combobox_create 和 rtgui_listbox_create创建的下拉列表框,一屏显示不下,需要下拉列表框啊,谢谢。

如何删除一个button,能否给个例子?谢谢

发布
问题