新手入门
- 积分
- 8
- 金钱
- 8
- 注册时间
- 2017-5-27
- 在线时间
- 2 小时
|
发表于 2017-5-23 11:46:33
|
显示全部楼层
兄台,我前天在论坛上看的你的帖子,因为我也和你一样,ucosiii+emwin,但是一加上USB就死机,然后找了半天也没个答案,最后硬着头皮看了原子大哥的综合例程关于usb的那块,最后终于调试能用了,首先移植usb的U盘基础例程(USB_OTG三个文件, USB_HOST七个文件 USB_APP两个文件),然后打开USB_APP文件中的usbh_usr.c,找到“OTG_FS_IRQHandler”中断服务函数,进入后首先加上 OSIntEnter(); 出来前加 OSIntExit(); 然后用文件系统读写u盘前后都加这两句话,就不死机了······(我是将U盘处理的过程放到了另一个任务中完成的)还有就是原子哥的usb基础例程中u盘只能读一个,然后读另一个的时候数据还是第一个的,比如读第一个u盘的数据是 total 7654M free 6543M,然后拔下来插入第二个U盘,还是这个数据,看了综合例程才明白,每次插入U盘前都得重新挂载, fs[2]->drv=2; f_mount(fs[2],"2:",1);加上这两条就好了。 本人小白一枚。。。。有什么不对的地方还请多多指教。
//USB OTG 中断服务函数
void OTG_FS_IRQHandler(void)
{
OSIntEnter();
USBH_OTG_ISR_Handler(&USB_OTG_Core);
OSIntExit();
}
//USB循环扫描函数 高优先级
void usb_task(void *p_arg)
{
OS_ERR err;
USBH_Init(&USB_OTG_Core,USB_OTG_FS_CORE_ID,&USB_Host,&USBH_MSC_cb,&USR_Callbacks);
while(1)
{
USBH_Process(&USB_OTG_Core, &USB_Host);
OSTimeDlyHMSM(0,0,0,5,OS_OPT_TIME_PERIODIC,&err);
}
}
//U盘读数据任务 低优先级
void morse_task(void *p_arg)
{
OS_ERR err;
FIL fil;
UINT bww;
u8 buf=0;
while(1)
{
if(you_can_inter==1)////////////////全局变量,U盘读取成功,枚举完成后,在用户应用程序函数中置1,U盘拔出后置0
{
OSIntEnter();
f_open (&fil,"2:abc/abc.txt", FA_READ);
f_read (&fil, &buf, 1, &bww);
f_close(&fil);
OSIntExit();
printf("%s",buf);
printf("\r\n");
while(HCD_IsDeviceConnected(&USB_OTG_Core))
{
LED1=!LED1;
delay_ms(200);
}
OSIntEnter();
fs[2]->drv=2;
f_mount(fs[2],"2:",1); //重新挂载U盘
OSIntExit();
}
OSTimeDlyHMSM(0,0,0,5,OS_OPT_TIME_PERIODIC,&err);
}
}
|
|