打印
[PIC®/AVR®/dsPIC®产品]

PIC24HJ单片机时钟

[复制链接]
551|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ZZY001|  楼主 | 2022-3-21 15:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
PIC24HJ时钟
1.时钟来源
PIC24HJ系列单片机的时钟来源有以下几个:
a.主振荡器:EC,HS,XT,三个外部时钟源,这三个又有不同的频率范围,具体不赘述,可以在PIC24HJ数据手册中找到,这里有必要说明一下这三个时钟源的接法:EC高速晶振单脚接入单片机,它的特点是接电源自激振荡,并输出时钟信号至PIC24HJ,HS和XT都是通过PIC24HJ的OSC1和OSC2接入,需要单片机起振才能正常工作。
b.内部快速RC振荡器(FRC),它的标称值是7.37MHz。
c.辅助振荡器Socs,它的频率是32768KHz。


2.配置时钟
PIC24HJ的时钟源可以配置,如果我们写的代码里面没有设置时钟的话,PIC24HJ默认使用内部FRC晶振的。7.37MHz并不是直接作用于器件(外设)上的,如果使用带PLL锁相环的FRC,需要配置三个系数M,N1和N2。这里的FRC标称值7.37MHz就是Fosc,单片机的工作频率,它驱动PIC24HJ的定时器外设时,不是直接输出到定时器上的,PIC24HJ单片机有器件工作频率Fcy = Fosc / 2。
接上一篇**配置TIMER定时1MS,在中断函数中设置一个计数器,累加1000,翻转LED状态。具体是修改上一篇代码中的PR1的值,修改为:3684,因为TIMER的工作频率是3.685MHz。根据Fcy = Fosc / 2得到。代码中设置的时钟分频是1分频。


使用MPLAB X IDE 自带的配置位设置时钟源为:外部时钟HS:



具体是修改图中红色箭头所指的这两部分。一个选择时钟源为带PLL锁相环的主振荡器PRIPLL,一个是选择主振荡器的类型为HS,由于我的外部晶振是接在PIC24HJ的OSC1和OSC2上所以不能选择EC,之前选择EC发现单片机不能工作,直接影响不能使用MPLAB X IDE 调试代码,调试代码出现:“Your Target could not ready to DEBUG”类似的话,问题就出现在这,这是因为DEBUG时时钟没有起振,PIC24HJ不工作。配置完成后,点击下面的Generate Source Code,将生成的代码复制到编辑框内。


// PIC24HJ128GP506A Configuration Bit Settings


// 'C' source line config statements


// FBS
#pragma config BWRP = WRPROTECT_OFF     // Boot Segment Write Protect (Boot Segment may be written)
#pragma config BSS = NO_FLASH           // Boot Segment Program Flash Code Protection (No Boot program Flash segment)
#pragma config RBS = NO_RAM             // Boot Segment RAM Protection (No Boot RAM)


// FSS
#pragma config SWRP = WRPROTECT_OFF     // Secure Segment Program Write Protect (Secure segment may be written)
#pragma config SSS = NO_FLASH           // Secure Segment Program Flash Code Protection (No Secure Segment)
#pragma config RSS = NO_RAM             // Secure Segment Data RAM Protection (No Secure RAM)


// FGS
#pragma config GWRP = OFF               // General Code Segment Write Protect (User program memory is not write-protected)
#pragma config GSS = OFF                // General Segment Code Protection (User program memory is not code-protected)


// FOSCSEL
#pragma config FNOSC = PRIPLL           // Oscillator Mode (Primary Oscillator (XT, HS, EC) w/ PLL)
#pragma config IESO = ON                // Two-speed Oscillator Start-Up Enable (Start up with FRC, then switch)


// FOSC
#pragma config POSCMD = HS              // Primary Oscillator Source (HS Oscillator Mode)
#pragma config OSCIOFNC = OFF           // OSC2 Pin Function (OSC2 pin has clock out function)
#pragma config FCKSM = CSDCMD           // Clock Switching and Monitor (Both Clock Switching and Fail-Safe Clock Monitor are disabled)


// FWDT
#pragma config WDTPOST = PS32768        // Watchdog Timer Postscaler (1:32,768)
#pragma config WDTPRE = PR128           // WDT Prescaler (1:128)
#pragma config WINDIS = OFF             // Watchdog Timer Window (Watchdog Timer in Non-Window mode)
#pragma config FWDTEN = ON              // Watchdog Timer Enable (Watchdog timer always enabled)


// FPOR
#pragma config FPWRT = PWR128           // POR Timer Value (128ms)


// FICD
#pragma config ICS = PGD1               // Comm Channel Select (Communicate on PGC1/EMUC1 and PGD1/EMUD1)
#pragma config JTAGEN = OFF             // JTAG Port Enable (JTAG is Disabled)


// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.


#include <xc.h>


int main(void){
    return 0;
}


使用特权

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

本版积分规则

60

主题

60

帖子

0

粉丝