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

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

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:400
  • 最近打卡:2025-06-17 08:34:53

16

主题

137

回帖

1084

积分

金牌会员

积分
1084
发表于 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也非常重要,如果把这句注释掉的话,看门狗也不能正常。哪位高手能解释一下,为何有了这个延时,后面再次赋值就不起作用了?谢谢!


回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8090

积分

荣誉版主

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:400
  • 最近打卡:2025-06-17 08:34:53

16

主题

137

回帖

1084

积分

金牌会员

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

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-17 11:21 , Processed in 0.128753 second(s), 61 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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