ercircle 发表于 2025-3-18 22:42:15

usb库内部可能USBCLK = 0x00;禁止了倍频,用源码测试不屏蔽这句会卡死。
使用PLL做USB时钟





使用内部48M做USB时钟:



ercircle 发表于 2025-3-19 08:33:40

hhhhhht 发表于 2025-3-18 21:06
//IRCBAND
//选择USB时钟为IRC48M   
USBCKS = 1;

USBCLK &= 0x60;
USBCLK |= 0x20;


这两句也有问题
你没配置 IRCBAND.SEL


默认6M的话,二分频变3M了,达不到输入PLL要求的8M~16M


参考:

                CLKDIV = 0x04;                                 //主时钟 MCLK四分频,144/4
      
                IRCBAND &= ~(3<<6);                        //选择USB时钟为IRC48M
                IRCBAND |= (2<<6);
                IRC48MCR = 0x80;                              //启动内部48M USB时钟
                while (!(IRC48MCR & 1));                  //等待时钟稳定
      
                IRCBAND |= 2;                              // IRCBAND.SEL 27MHz
                USBCLK &= ~0x60;                         // PCKI 清空
                USBCLK |= 0x20;                           //PCKI 二分频
               
                CLKSEL |= 0x80;                              //CKMS,PLL 输出 12*12 ,144
      
                CLKSEL &= 0xF0;
                CLKSEL |= 0x04;                           //内部 PLL 输出,MCK2SEL 01,MCKSEL 00
               
                USBCLK |= 0x80;                           //ENCKM

hhhhhht 发表于 2025-3-21 08:27:27

ercircle 发表于 2025-3-18 22:42
usb库内部可能USBCLK = 0x00;禁止了倍频,用源码测试不屏蔽这句会卡死。
使用PLL做USB时钟



是的,usb_init()要在时钟配置之前初始化就可以。建议更新USB库。目前这种写法是不是不太兼容?

ercircle 发表于 2025-3-21 08:45:35

在论坛里找了一圈,时钟树这部分资料比较少,不建议代码里操作时钟树,直接用AIAPP-ISP软件调节IRC就行。

https://www.stcaimcu.com/forum.php?mod=redirect&goto=findpost&ptid=16242&pid=152465

hhhhhht 发表于 2025-3-21 16:52:31

ercircle 发表于 2025-3-21 08:45
在论坛里找了一圈,时钟树这部分资料比较少,不建议代码里操作时钟树,直接用AIAPP-ISP软件调节IRC就行。

...

不操作时钟树,玩不到精髓哈哈
页: 1 [2]
查看完整版本: 调用usb_init();函数后就死机问题