PIC33FJ芯片,使用外部晶振做时钟源的配置问题

[复制链接]
2301|48
 楼主| supernan 发表于 2021-12-8 22:36 | 显示全部楼层 |阅读模式
我程序烧录进去之后没有任何反映
zhenykun 发表于 2021-12-8 22:38 | 显示全部楼层
可能是外部硬件晶振没起振的原因
zwll 发表于 2021-12-8 22:40 | 显示全部楼层

还有什么现象?能再详细描述下吗?
 楼主| supernan 发表于 2021-12-8 22:42 | 显示全部楼层
使用内部快速RC振荡程序是可以正常运行的。
可以请各位看看在下的时钟配置程序是否正确吗?
 楼主| supernan 发表于 2021-12-8 22:45 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| supernan 发表于 2021-12-8 22:47 | 显示全部楼层
配置位图以及主函数的寄存器配置
heweibig 发表于 2021-12-8 22:48 | 显示全部楼层

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因
 楼主| supernan 发表于 2021-12-8 22:50 | 显示全部楼层
int main(int argc, char** argv)

{

        //产生Fosc = 120MHz

        CLKDIVbits.PLLPRE = 0;          //N1 = 2  

        PLLFBDbits.PLLDIV = 58;         //M = 60  

        CLKDIVbits.PLLPOST = 0;         //N2 = 2    8 * (60 / (2 + 2)) = 120M



        OSCCONbits.NOSC = 0b11;

        OSCCONbits.CLKLOCK = 0b0;

        

    // Wait for Clock switch to occur

    while(OSCCONbits.COSC != 0b011)                /* Wait for new Oscillator to become XT with PLL */  

        {



        }

    while(OSCCONbits.LOCK != 1)                /* Wait for Pll to Lock */

        {



        }

        //Tim3_Init();

    //timer1_init();

    LATF = 0x0000;  // B端口清零

    TRISF = 0x0000; // B端口设为输入, 0: out, 1: in

    PORTF = 0x0000;

    while(1)

    {

                LATF=(PORTF ^ 0xff);

            delay_ms(500);

    }

    return (EXIT_SUCCESS);

}
dingy 发表于 2021-12-8 22:54 | 显示全部楼层
直接对OSCCON操作应该是不成功的,要先解锁。
stly 发表于 2021-12-8 22:55 | 显示全部楼层
你这个应该是对OSCCON没有写成功
 楼主| supernan 发表于 2021-12-8 22:58 | 显示全部楼层
手册中OSCCON寄存器高位解锁序列和低位解锁序列是什么意思
 楼主| supernan 发表于 2021-12-8 23:00 | 显示全部楼层
在下没找到相关操作并且它说时序要求很高,在下用C语言进行相关操作,会有影响吗?
zhenykun 发表于 2021-12-8 23:02 | 显示全部楼层
要不介绍下具体哪个型号,大家也方便帮你瞅瞅手册。

首先用C语言操作时钟寄存器是没问题的
jlyuan 发表于 2021-12-8 23:04 | 显示全部楼层
对于你配置120M晶振的问题,建议先使用一个低的时钟看看能跑起来吗,排除你晶振和匹配电容的问题
yszong 发表于 2021-12-8 23:06 | 显示全部楼层
上面OK的话,再尝试配置这个120M频率试试,好运哈
stly 发表于 2021-12-8 23:08 | 显示全部楼层
编译器都有操作OSCCON的内置函数,直接用内置函数写操作就可以了
 楼主| supernan 发表于 2021-12-8 23:09 | 显示全部楼层
在下又改了一下代码,是想启动时是FRC作为晶振,然后进行时钟切换。
 楼主| supernan 发表于 2021-12-8 23:11 | 显示全部楼层
下面放出代码,FRCPLL的配置是正常的,芯片是dsPIC33FJ64MC506。
 楼主| supernan 发表于 2021-12-8 23:15 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| supernan 发表于 2021-12-8 23:18 | 显示全部楼层
void FRC_PLL(void)

{

         PLLFBD=41;              /* M=PLLFBD+2=43 */

    CLKDIVbits.PLLPOST=0;   /* N2=PLLPOST+2=2 */

    CLKDIVbits.PLLPRE=0;    /* N1=PLLPRE+2=2 */

    __builtin_write_OSCCONH(0x01);                /* 快速RC振荡器(FRC)→带PLL的快速RC振荡器(FRC) */

    __builtin_write_OSCCONL(0x01);                  /* Enable Switch */

      

    // Wait for Clock switch to occur

    while(OSCCONbits.COSC != 0b001);                /* Wait for new Oscillator to become FRC with PLL */  

    while(OSCCONbits.LOCK != 1);                /* Wait for Pll to Lock */



}

void XT_PLL(void)

{

        PLLFBD=(30-2);              /* M=PLLFBD+2=30 */

    CLKDIVbits.PLLPOST=0;   /* N2=PLLPOST+2=2 */

    CLKDIVbits.PLLPRE=0;    /* N1=PLLPRE+2=2 */



        //FOSCbits.FCKSM = 0b00;

        __builtin_write_OSCCONH(0b11);

        __builtin_write_OSCCONL(0b01);

        while(OSCCONbits.COSC != 0b011);                /* Wait for new Oscillator to become FRC with PLL */  

    while(OSCCONbits.LOCK != 1);                /* Wait for Pll to Lock */

}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

730

主题

10412

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部