找回密码
 立即注册
查看: 149|回复: 2

看门狗中关于USB复位代码中的延时函数的疑惑

[复制链接]
  • TA的每日心情
    开心
    昨天 19:51
  • 签到天数: 119 天

    [LV.6]常住居民II

    11

    主题

    87

    回帖

    268

    积分

    中级会员

    积分
    268
    发表于 2024-2-25 09:40:23 | 显示全部楼层 |阅读模式
    我在学习冲哥的STC32教程,由于我使用的是STC8H8K64U实验箱,所以使用USB-CDC时,我的例程中代码略有不同,如下是实验成功的:

    void main(){
            ...
            IRC48MCR = 0x80; //使能内部 48M 的 USB 专用 IRC
            while (!(IRC48MCR & 0x01));
            USBCLK = 0x00;  //设置 USB 时钟源为内部 48M 的 USB 专用 IRC
            USBCON = 0x90;  //使能 USB 功能
            usb_init();

            IE2 |= 0x80;   // 使能 USB 中断
            EA = 1;      
            while (DeviceState != DEVSTATE_CONFIGURED); // 等待 USB 完成配置

            while(1){
                    if (bUsbOutReady){                
                            USB_SendData(UsbOutBuffer,OutNumber);
                            usb_OUT_done(); //处理完成接收的数据后,调用 usb_OUT_done 准备接收下一笔数据
                    }
            ......
    }

    但在学习第23课看门狗中,冲哥介绍了 USB复位代码的4句:

            USBCON = 0X00;
            USBCLK = 0X00;
            IRC48MCR = 0X00;
            delay_ms(10);  

    现在我把如上4句放到前面程序的...处,看门狗运行正常。我的疑问是,这几句写在前面,后面紧跟的几句赋值(USBCON、IRC48MCR等)不就覆盖了吗?为什么还是有效的?经实验,没有这4句,看门狗就是不行。而且这个延时10ms也非常重要,如果把这句注释掉的话,看门狗也不能正常。哪位高手能解释一下,为何有了这个延时,后面再次赋值就不起作用了?谢谢!


    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    5 天前
  • 签到天数: 90 天

    [LV.6]常住居民II

    38

    主题

    986

    回帖

    6773

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    6773
    QQ
    发表于 2024-2-26 08:30:58 | 显示全部楼层
    你可以这样理解:因为这个USB在单片机端是作为从机的, USBCON = 0X00;USBCLK = 0X00;IRC48MCR = 0X00;这三句是为了让USB恢复初始化,但是这里只是让从机端初始化,本质上这里不能直接控制主机,但是主机会时不时的去轮询从机,所以给他点延时让主机查到信号即可。所以如果之前主机端已经识别并检测到了这个USB从机之后,就需要加上这四句从新连接下。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 19:51
  • 签到天数: 119 天

    [LV.6]常住居民II

    11

    主题

    87

    回帖

    268

    积分

    中级会员

    积分
    268
     楼主| 发表于 2024-2-26 09:29:15 | 显示全部楼层
    电子DIY小家 发表于 2024-2-26 08:30
    你可以这样理解:因为这个USB在单片机端是作为从机的, USBCON = 0X00;USBCLK = 0X00;IRC48MCR = 0X00;这三 ...

    谢谢冲哥讲解,我再学习了USB后,相信会加深理解。
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-4 02:14 , Processed in 0.056062 second(s), 37 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表