SAMD20 的 PWM 频率随温度漂移?切换到外部晶振校准 DFLL 后稳定性提升明显。以下是配置代码:
// 使用32.768kHz外部晶振校准DFLL(SAMD20)
void SystemClock_Config(void) {
// 启用外部32.768kHz晶振
SYSCTRL->XOSC32K.reg = SYSCTRL_XOSC32K_ENABLE |
SYSCTRL_XOSC32K_XTALEN |
SYSCTRL_XOSC32K_EN32K;
while(!SYSCTRL->PCLKSR.bit.XOSC32KRDY);
// 配置DFLL48M使用外部参考
SYSCTRL->DFLLCTRL.reg = 0; // 禁用DFLL进行配置
while(SYSCTRL->PCLKSR.bit.DFLLRDY);
SYSCTRL->DFLLMUL.reg = SYSCTRL_DFLLMUL_CSTEP(31) |
SYSCTRL_DFLLMUL_FSTEP(511) |
SYSCTRL_DFLLMUL_MUL(1464); // 48MHz = 32.768kHz × 1464
SYSCTRL->DFLLCTRL.reg = SYSCTRL_DFLLCTRL_ENABLE |
SYSCTRL_DFLLCTRL_USBCRM |
SYSCTRL_DFLLCTRL_MODE |
SYSCTRL_DFLLCTRL_WAITLOCK;
while(!SYSCTRL->PCLKSR.bit.DFLLRDY);
} |
|