使用PLL做USB时钟
使用内部48M做USB时钟:
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
ercircle 发表于 2025-3-18 22:42
usb库内部可能USBCLK = 0x00;禁止了倍频,用源码测试不屏蔽这句会卡死。
使用PLL做USB时钟
是的,usb_init()要在时钟配置之前初始化就可以。建议更新USB库。目前这种写法是不是不太兼容? 在论坛里找了一圈,时钟树这部分资料比较少,不建议代码里操作时钟树,直接用AIAPP-ISP软件调节IRC就行。
https://www.stcaimcu.com/forum.php?mod=redirect&goto=findpost&ptid=16242&pid=152465 ercircle 发表于 2025-3-21 08:45
在论坛里找了一圈,时钟树这部分资料比较少,不建议代码里操作时钟树,直接用AIAPP-ISP软件调节IRC就行。
...
不操作时钟树,玩不到精髓哈哈
页:
1
[2]