打印
[技术问答]

NUC029使用外部晶振无法起振是为什么?

[复制链接]
448|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jcky001|  楼主 | 2023-6-16 11:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用内部晶振程序是可以跑起来的,但是使用外部晶振,程序一直在等待,请问这是什么原因?(晶振使用的是12M无源晶振,不知道是不是有源无源的问题)


void SYS_Init(void)
{
    /*---------------------------------------------------------------------------------------------------------*/
    /* Init System Clock                                                                                       */
    /*---------------------------------------------------------------------------------------------------------*/

    /* Enable Internal RC 22.1184MHz clock */
    CLK->PWRCON |= CLK_PWRCON_OSC22M_EN_Msk;

    /* Waiting for Internal RC clock ready */
    while(!(CLK->CLKSTATUS & CLK_CLKSTATUS_OSC22M_STB_Msk));

    /* Switch HCLK clock source to Internal RC */
    CLK->CLKSEL0 &= ~CLK_CLKSEL0_HCLK_S_Msk;
    CLK->CLKSEL0 |= CLK_CLKSEL0_HCLK_S_HIRC;

    /* Enable external XTAL 12MHz clock */
    CLK->PWRCON |= CLK_PWRCON_XTL12M_EN_Msk;

    /* Waiting for external XTAL clock ready */
//死在这里!!
    while(!(CLK->CLKSTATUS & CLK_CLKSTATUS_XTL12M_STB_Msk));

    /* Set core clock as PLL_CLOCK from PLL */
    CLK->PLLCON = PLLCON_SETTING;
    while(!(CLK->CLKSTATUS & CLK_CLKSTATUS_PLL_STB_Msk));
    CLK->CLKSEL0 &= (~CLK_CLKSEL0_HCLK_S_Msk);
    CLK->CLKSEL0 |= CLK_CLKSEL0_HCLK_S_PLL;

    /* Update System Core Clock */
    /* User can use SystemCoreClockUpdate() to calculate PllClock, SystemCoreClock and CycylesPerUs automatically. */
    //SystemCoreClockUpdate();
    PllClock        = PLL_CLOCK;            // PLL
    SystemCoreClock = PLL_CLOCK / 1;        // HCLK
    CyclesPerUs     = PLL_CLOCK / 1000000;  // For SYS_SysTickDelay()

    /* Enable UART module clock */
    CLK->APBCLK |= CLK_APBCLK_UART0_EN_Msk | CLK_APBCLK_I2C0_EN_Msk;

    /* Select UART module clock source */
    CLK->CLKSEL1 &= ~CLK_CLKSEL1_UART_S_Msk;
    CLK->CLKSEL1 |= CLK_CLKSEL1_UART_S_HXT;

    /*---------------------------------------------------------------------------------------------------------*/
    /* Init I/O Multi-function                                                                                 */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Set P3 multi-function pins for UART0 RXD and TXD, and set P3.4 and P3.5 for I2C0 SDA and SCL */
    SYS->P3_MFP &= ~(SYS_MFP_P30_Msk | SYS_MFP_P31_Msk | SYS_MFP_P34_Msk | SYS_MFP_P35_Msk);
    SYS->P3_MFP |= (SYS_MFP_P30_RXD0 | SYS_MFP_P31_TXD0 | SYS_MFP_P34_SDA0 | SYS_MFP_P35_SCL0);
}

使用特权

评论回复
沙发
liu96jp| | 2023-6-25 15:58 | 只看该作者
问题似乎是在使用外部晶振时程序卡在了某个地方等待,而使用内部晶振时程序可以正常运行。这可能是由于外部晶振的连接不良或者外部晶振的频率不稳定导致的

使用特权

评论回复
板凳
d1ng2x| | 2023-6-25 17:08 | 只看该作者
你的晶振是无源晶振,而无源晶振需要外部电路才能提供时钟信号。如果外部电路没有正确连接或者设置不当,也可能导致程序无法正常运行

使用特权

评论回复
地板
zhizia4f| | 2023-6-25 19:10 | 只看该作者
检查一下外部晶振的连接和电路设置吧

使用特权

评论回复
5
y1n9an| | 2023-6-25 20:21 | 只看该作者
外部晶振没起来呗,看看匹配电容

使用特权

评论回复
6
q1d0mnx| | 2023-6-25 21:15 | 只看该作者
一般是电容不匹配导致的外部晶振没起来,好好检查一下,看看电路

使用特权

评论回复
7
suw12q| | 2023-6-26 06:02 | 只看该作者
其实看通过官方推荐的晶振时钟电路就好了

使用特权

评论回复
8
p0gon9y| | 2023-6-26 07:16 | 只看该作者
等待说明时钟配置的不对的

使用特权

评论回复
9
t1ngus4| | 2023-6-26 08:25 | 只看该作者
话说,新唐是否有时钟配置工具啊?

使用特权

评论回复
10
b5z1giu| | 2023-6-26 10:04 | 只看该作者
你这个一般用无源的晶振就好了

使用特权

评论回复
11
l1uyn9b| | 2023-6-26 12:24 | 只看该作者
那你就先用内部的时钟运行吧,如果没有啥特殊的外设,好像不用外置时钟也是可以的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1510

主题

4543

帖子

6

粉丝