主题中讨论的其他器件: MSP-FET
您好!
我有一个带有 MSP432P401R 和 MSP432 Launchpad 的定制 PCB。 我正在尝试使用48MHz 外部晶体来驱动我的定制设计。 我在 CSS 中创建了两个空白项目、一个用于 Launchpad、另一个用于定制板。 我已经使用 TI 的示例代码将 Launchpad 从使用 DCO 切换到使用48MHz 晶体。 当我将使用48MHz 晶体驱动 MCU 的示例代码复制/粘贴到定制板的项目中、编译、下载到器件、并查看 MCLK 的输出引脚时、频率为16MHz 而不是48MHz。 我只复制/粘贴.c 示例、而不是整个示例项目、因此基于创建示例的 CSS 版本、startup_*.c 代码可能会有一些细微的差异?
Launchpad 具有 MSP432P401R 版本 C、而我的定制板具有 MSP432P401R 版本 D
我已经检查了晶振的器件型号、以确保它是48MHz。 由于我要复制/粘贴代码、因此没有软件差异。 这两种配置之间的唯一区别是调试器(Launchpad 上的 XDS 与 MSP-FET 中的 MSP430)和晶体的实际器件型号、但两者均为48MHz。
我的定制板上的晶体是 Abraacon ABLS-48.000MHZ-B2-T、具有22pF 接地电容、连接在引脚 PJ.2和 PJ.3之间。
我还使用了调试器来检查 CS 时钟分频器的寄存器值、并且所有分频器都设置为零、因此在提供 MCLK 之前不应对 HFXTCLK 进行分频。
不确定接下来要看的是什么。
感谢您的任何帮助!
下面是我一直使用的示例代码:
include "ti/devices/msp432p4xx/inc/msp.h" #include "stdint.h" void error (void); int main (void) { volatile uint32_t i; uint32_t currentPowerState; WDT_A->CTL = WDT_A_CTL_PW | //停止 WDT WDT_A_CTL_HOLD; P1->DIR |= BIT0; /*注意:此示例假设默认电源状态为 AM0_LDO。 *有关更完整的 PCM 操作、请参阅 msp432p401x_PCM_0x 代码示例 *在工作模式之间进行各种电源状态转换。 * /*步骤1:转换到 VCORE 电平1:AM0_LDO --> AM1_LDO */ /*获取当前电源状态,如果它不是 AM0_LDO,则错误输出*/ currentPowerState = PCM->CTL0 & PCM_CTL0_CPM_MASK; if (currentPowerState!= PCM_CTL0_CPM_0) error(); while (((PCM->CTL1 & PCM_CTL1_PMR_BUSY)); PCM->CTL0 = PCM_CTL0_KEY_VAL | PCM_CTL0_AMR_1; while (((PCM->CTL1 & PCM_CTL1_PMR_BUSY)); IF (PCM->IFG & PCM_IFG_AM_INVALID_TR_IFG) error(); //转换失败时出错 if (((PCM->CTL0 & PCM_CTL0_CPM_MASK)!= PCM_CTL0_CPM_1) error(); //器件不处于 AM1_LDO 模式时出错 /*步骤2:将闪存等待状态配置为1 (对于组0和组1)*/ FLCTL->BANK0_RDCTL =(FLCTL->BANK0_RDCTL 和~(FLCTL_BANK0_RDCTL_WAIT_MASK))| FLCTL_BANK0_RDCTL_WAIT_1; FLCTL->BANK1_RDCTL =(FLCTL->BANK0_RDCTL 和~(FLCTL_BANK1_RDCTL_WAIT_MASK))| FLCTL_BANK1_RDCTL_WAIT_1; /*步骤3:将 HFXT 配置为使用48MHz 晶体,源至 MCLK 和 HSMCLK*/ PJ->SEL0 |= BIT2 | BIT3; //为 HFXT 函数配置 PJ.2/3 PJ->SEL1 &=~(BIT2 | BIT3); CS->KEY = CS_KEY_VAL; //解锁 CS 模块以进行寄存器访问 CS->CTL2 |= CS_CTL2_HFXT_EN | CS_CTL2_HFXTFREQ_6 | CS_CTL2_HFXTDRIVE; while (CS->IFG 和 CS_IFG_HFXTIFG) CS->CLRIFG |= CS_CLRIFG_CLR_HFXTIFG; /*选择 MCLK & HSMCLK = HFXT、无分频器*/ CS->CTL1 = CS->CTL1和 μ~(CS_CTL1_SELM_MASK | CS_CTL1_DIVM_MASK | CS_CTL1_SELS_MASK | CS_CTL1_DIVHS_MASK)| CS_CTL1_SELM_HFXTCLK | CS_CTL1_SELESS_HFXTCLK; CS->KEY = 0; //锁定 CS 模块,防止意外访问 /*步骤4:将 MCLK 输出到端口引脚以演示48MHz 运行*/ P4->DIR |= BIT3 | BIT4; P4->SEL0 |=BIT3 | BIT4; //输出 MCLK P4->SEL1 &=~(BIT3 | BIT4); while (1) //连续循环 { P1->OUT ^= BIT0; //闪烁 P1.0 LED 对于(i = 200000;i > 0;i---); //延迟 } } void 错误(void) { volatile uint32_t i; while (1) { P1->OUT ^= BIT0; 对于(i = 20000;i>0;i--); //一直闪烁 LED } }

