hhhhhht 发表于 2025-3-18 20:53:55

调用usb_init();函数后就死机问题

程序里配置内部PLL时钟作为主时钟后,调用了usb_init();函数后就死机了??时钟配置流程如下
时钟配置输入24M,PLL输入2分频为12MHz,PLL后12*12=144MHz,选择主时钟为PLL,CLKDIV为4分频,得到SysClock为36MHz
USB时钟使用了内部的IRC48MHz。

国芯人工智能 发表于 2025-3-18 20:58:00

在您描述的场景中,调用usbinit();函数后出现死机问题,可能与时钟配置或USB时钟源的稳定性有关。以下是一些可能的原因及建议的排查步骤:<br><br>1. 时钟配置冲突:确保PLL和USB时钟的配置没有冲突。PLL输出为144MHz,经过4分频后系统时钟为36MHz,而USB时钟使用的是内部IRC48MHz。请检查这两个时钟是否在硬件上能够共存,且不会相互干扰。<br><br>2. USB时钟源稳定性:内部IRC48MHz时钟的精度和稳定性可能不足,导致USB初始化失败。建议检查IRC48MHz的校准和稳定性,或考虑使用外部晶振作为USB时钟源。<br><br>3. 时钟分频设置:确认CLKDIV分频设置是否正确,确保系统时钟和USB时钟的配置符合硬件要求。错误的时钟分频可能导致系统无法正常运行。<br><br>4. 电源和复位:检查电源电压是否稳定,复位电路是否正常工作。不稳定的电源或复位信号可能导致系统在初始化过程中死机。<br><br>5. 调试信息:通过调试器或日志输出,查看死机前的寄存器状态和程序执行路径,以便更精确地定位问题。<br><br>建议逐一排查上述可能的原因,确保时钟配置和硬件环境符合设计要求。<br><br>[本文内容由国芯人工智能辅助生成,仅供参考]

jwd 发表于 2025-3-18 21:03:06

你可以把你的程序晒出来让大家看看

hhhhhht 发表于 2025-3-18 21:03:10

国芯人工智能 发表于 2025-3-18 20:58
在您描述的场景中,调用usbinit();函数后出现死机问题,可能与时钟配置或USB时钟源的稳定性有关。以下是一 ...

AI8051U单片机,内部IRC48M和PLL可以同时开启嘛

hhhhhht 发表于 2025-3-18 21:06:25

jwd 发表于 2025-3-18 21:03
你可以把你的程序晒出来让大家看看

//IRCBAND
//选择USB时钟为IRC48M   
USBCKS = 1;
USBCKS2 = 0;
IRC48MCR = 0x80;
while (!(IRC48MCR & 1)); //等待时钟稳定

CLKSEL |= 0x80;
USBCLK &= 0x60;
USBCLK |= 0x20;
USBCLK |= 0x80;
delay();
CLKDIV = 0x04;
CLKSEL &= 0xF0;
CLKSEL |= 0x04;
usb_init();

ercircle 发表于 2025-3-18 21:15:41

完整工程发一下,哪个版本的usb库?
自己画的板子还是官方实验板?自己画的原理图也可以贴一下

hhhhhht 发表于 2025-3-18 21:42:52

ercircle 发表于 2025-3-18 21:15
完整工程发一下,哪个版本的usb库?
自己画的板子还是官方实验板?自己画的原理图也可以贴一下
...



就是用的官网的库函数模版。板子是擎天柱的最小系统板。

hhhhhht 发表于 2025-3-18 21:48:11

hhhhhht 发表于 2025-3-18 21:42
就是用的官网的库函数模版。板子是擎天柱的最小系统板。




ercircle 发表于 2025-3-18 22:03:54



卡死和usb库内部也操作了寄存器有关

ercircle 发表于 2025-3-18 22:21:17

推荐使用这个小工具配置时钟树

https://www.stcaimcu.com/forum.php?mod=viewthread&tid=11513
页: [1] 2
查看完整版本: 调用usb_init();函数后就死机问题