下面是原子哥的实验代码,我想请问下“u8 USH_User_App(void)”这个函数会在什么时候调用呢?谢谢大神们给我解答!

2019-07-20 04:02发布

下面是原子哥的实验代码,我想请问下“u8 USH_User_App(void)”这个函数会在什么时候调用呢?谢谢大神们给我解答!


//用户测试主程序
//返回值:0,正常
//       1,有问题
u8 USH_User_App(void)
{
        u32 total,free;
        u8 res=0;
        Show_Str(30,140,200,16,"设备连接成功!.",16,0);         
          f_mount(fs[2],"2:",1);         //重新挂载U盘
        res=exf_getfree("2:",&total,&free);
        if(res==0)
        {
                POINT_COLOR=BLUE;//设置字体为蓝 {MOD}          
                LCD_ShowString(30,160,200,16,16,"FATFS OK!");       
                LCD_ShowString(30,180,200,16,16,"U Disk Total Size:     MB");         
                LCD_ShowString(30,200,200,16,16,"U Disk  Free Size:     MB");             
                LCD_ShowNum(174,180,total>>10,5,16);//显示U盘总容量 MB
                LCD_ShowNum(174,200,free>>10,5,16);       
        }
        while(HCD_IsDeviceConnected(&USB_OTG_Core))//设备连接成功
        {       
                LED1=!LED1;
                delay_ms(200);
        }
        LED1=1;//关闭LED1
          f_mount(0,"2:",1);         //卸载U盘
        POINT_COLOR=RED;//设置字体为红 {MOD}          
        Show_Str(30,140,200,16,"设备连接中...",16,0);
        LCD_Fill(30,160,239,220,WHITE);
        return res;
}

int main(void)
{        
        u8 t;
        Stm32_Clock_Init(336,8,2,7);//设置时钟
        delay_init(168);                //初始化延时
        uart_init(84,115200);        //115200波特率
        LED_Init();                                //初始化与LED连接的硬件接口
        KEY_Init();                                //按键
          LCD_Init();                                //初始化LCD
        W25QXX_Init();                        //SPI FLASH初始化
        usmart_dev.init(84);         //初始化USMART         
        my_mem_init(SRAMIN);        //初始化内部内存池       
        exfuns_init();                        //为fatfs相关变量申请内存
        piclib_init();                        //初始化画图
          f_mount(fs[0],"0:",1);         //挂载SD卡  
          f_mount(fs[1],"1:",1);         //挂载外部SPI FLASH盘   
        POINT_COLOR=RED;      
        while(font_init())                                 //检查字库
        {            
                LCD_ShowString(60,50,200,16,16,"Font Error!");
                delay_ms(200);                                  
                LCD_Fill(60,50,240,66,WHITE);//清除显示             
                delay_ms(200);                                  
        }
        Show_Str(30,50,200,16,"探索者STM32F407开发板",16,0);                                             
        Show_Str(30,70,200,16,"USB U盘实验",16,0);                                                     
        Show_Str(30,90,200,16,"2014年7月22日",16,0);                     
        Show_Str(30,110,200,16,"正点原子@ALIENTEK",16,0);
        Show_Str(30,140,200,16,"设备连接中...",16,0);                                        
        //初始化USB主机
          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);
                delay_ms(1);
                t++;
                if(t==200)
                {
                        LED0=!LED0;
                        t=0;
                }
        }       
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
正点原子
1楼-- · 2019-07-20 07:01
 精彩回答 2  元偷偷看……
壁虎
2楼-- · 2019-07-20 09:50
正点原子 发表于 2016-2-25 13:52
在U盘被识别到了以后,会被调用.

我在做一个采集数据,将数据放入到USB文件里的工程。
但同样是这段程序,USB插进去后,就进入了USH_User_App()里的一个循环出不来了。我在main()里写的服务程序就再也启动不起来了。
我想问下:
1、这个USH_User_App是怎样一个流程调用起来的,我只找到main()的while(1)中有个USBH_Process(&USB_OTG_Core, &USB_Host);最先被调用,其后就不知道怎么回到的USH_User_App函数。
2、因为没有找到USH_User_App是如何被调用的,所以不敢对其中的内容进行修改。请问,可否将其内容移到main的while(1)中,需要注意哪些,尤其是USB掉了以后,再重新回到检测状态需要调用哪个函数?
不胜感激
启程13579
3楼-- · 2019-07-20 15:26
 精彩回答 2  元偷偷看……
启程13579
4楼-- · 2019-07-20 15:59
 精彩回答 2  元偷偷看……
sugar111
5楼-- · 2019-07-20 16:16
遇到了同样的问题

while(1)中的USBH_Process(&USB_OTG_Core, &USB_Host);会调用USH_User_App这个函数,调用的方式比较复杂。可以查看别人关于USBH_Process的学习笔记。
简要说就是USBH_Process会负责处理USB内核所有状态的变化,当它满足某一状态时,会调用USBH_MSC_Hamdle()函数,而这个函数会根据当前状态,做出相应处理。比如说进入USBH_MSC_DEFAULT_APPLI_STATE这一个状态时候,就会调用应用程序UserApplictaion()。

然后关于内容能否移植到main 的while(1)里,这个问题也在困扰我。
竹叶青123
6楼-- · 2019-07-20 19:41
正点原子 发表于 2016-2-25 13:52
在U盘被识别到了以后,会被调用.

原子哥,我用正点的F407ZGT6探索者的板子调好程序OTG u盘写入,但是下载到我另一个F407VET6中,U盘一直识别不了,进不去USH_User_App(void)函数,是需要什么设置吗?求翻牌,困扰好久了一直调不通,感谢

一周热门 更多>