工具与软件:
您好!
我最近开始探索 F280025 Launchpad 并尝试了解时钟单元。 所有操作都按预期运行、直到我完全擦除闪存。 擦除后、外部晶体不再工作、即使在断电和接通之后、晶体引脚上也没有信号。 如果能协助解决这一问题、我将不胜感激。 提前感谢您!
以下是参考代码:
#include "F28002x_Device.h"//特定于器件的头文件
void SysControl (void);
void delay (volatile long count);
void main (void)
{
//步骤1. 初始化系统控制:
//禁用看门狗计时器
EALLOW;
WdRegs.wdcr.all = 0x68;//禁用看门狗
EDIS;
SysControl();
//步骤2. 初始化 GPIO:
EALLOW;// Enable EALLOW protected register access (启用 EALLOW 受保护寄存器访问)
GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 0U;//将 GPIO31设置为 GPIO
GpioCtrlRegs.GPADIR.bit.GPIO31 = 1U;//将 GPIO31设置为输出
EDIS;// Disable EALLOW protected register access (禁用 EALLOW 受保护寄存器访问)
//步骤3. 无限循环切换 GPIO31
while (1)
{
GpioDataRegs.GPATOGGLE.bit.GPIO31 = 1U;// Toggle GPIO31
延迟(50000);
}
}
void SysControl (void)
{
EALLOW;
//步骤1:配置时钟源
ClkCfgRegs.CLKSRCCTL1.bit.OSCCLKSRCSEL = 00U;//选择外部振荡器
延迟(5000);
//第2步:为100 MHz PLLSYSCLK 配置 PLL
//设置基准分频器(REFDIV)、倍频器(IMULT)和输出分频器(ODIV)
ClkCfgRegs.SYSPLLMULT.bit.REFDIV = 1U;//基准分频器值(REFCLK = XTAL/(REFDIV + 1))
ClkCfgRegs.SYSPLLMULT.bit.IMULT = 40U;//整数乘法器值(IMULT)
ClkCfgRegs.SYSPLLMULT.bit.ODIV = 4U;//输出分频器(ODIV)
//第3步:启用 PLL
ClkCfgRegs.SYSPLLCTL1.bit.PLLEN = 1U;// Enable the PLL
//步骤4:等待 PLL 锁定
/*
while (ClkCfgRegs.SYSPLLSTS.bit.locks!= 1){
//可选:在此处添加超时机制以避免无限循环
}
*/
//步骤5:配置系统时钟分频器
ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV = 0U;//设置系统时钟分频器(0 =无分频)
//步骤6:启用 PLL 作为系统时钟源
// ClkCfgRegs.SYSPLLCTL1.bit.PLLCLKEN = 1U;// Enable PLL clock output
//输出时钟设置以进行调试
ClkCfgRegs.CLKSRCCTL3.bit.XCLKOUTSEL = 0U;// PLLSYSCLK
ClkCfgRegs.XCLKOUTDIVSEL.bit.XCLKOUTDIV = 0U;// No Prescalling (无预调用)
GpioCtrlRegs.GPAMUX2.bit.GPIO16= 0b11;
GpioCtrlRegs.GPAGMUX2.bit.GPIO16= 0b10;
EDIS;
}
void delay (volatile long count){
Volatile long i;
//简单的延迟循环
for (i = 0;i < count;i++);
}