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

PIC16F15345外部时钟配置

[复制链接]
797|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
永远不停|  楼主 | 2021-2-7 11:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 永远不停 于 2021-2-7 11:42 编辑

    在做时钟配置时,内部时钟的配置是可以正常工作的,且通过CLKOUT脚观察时钟频率是正确的。    板子上接了外部8M晶振,做外部时钟配置时,MCU的工作频率并不符合配置的频率,而是还按照内部的时钟配置在运行。向各位请较一下外部时钟的配置,帮忙看看程序配置有什么问题。
1.内部时钟配置
   配置字
   #pragma config FEXTOSC = OFF    // External Oscillator mode selection bits->Oscillator not enabled
   #pragma config RSTOSC = HFINT1    // Power-up default value for COSC bits->HFINTOSC (1MHz)
   #pragma config CLKOUTEN = ON    // Clock Out Enable bit->CLKOUT function is enable;
   OSC配置
/*内部时钟配置
* OSCCON1为新时钟配置,NOSC选择新的时钟源,NDIV选择新的分频系数
* OSCCON2为当前时钟配置
* OSCFRQ为新内部时钟的频率
* 使用内部时钟时,可通过CLKOUT脚输出focs/4的频率波形,便于观察,同时需要将配置字里的FEXTOSC关掉,以防该引脚被外部晶振占用
*/
void CLCK_Internal_Config(void)
{
    OSCCON1 = 0X60; //新时钟配置,HFINTOSC-1MHZ,分频-1
    OSCCON2 = 0X60; //当前时钟配置,HFINTOSC-1MHZ,分频-1
    OSCCON3 = 0X00;
    OSCEN = 0X00;
    OSCFRQ = 0x06; //HFFRQ-32MHZ
    OSCTUNE =0X00;           
}
     这种配置下,内部时钟频率是正确的,通过调整OSCFRQ寄存器的值,可以修改频率。


2.外部时钟配置
  配置字
#pragma config FEXTOSC = HS    // External Oscillator mode selection bits->Oscillator not enabled
  #pragma config RSTOSC = HFINT1    // Power-up default value for COSC bits->HFINTOSC (1MHz)
  #pragma config CLKOUTEN = OFF    // Clock Out Enable bit->CLKOUT function is disabled; i/o or oscillator function on OSC2
  OSC配置
void CLCK_External_Config(void)
{   
    OSCCON1 = 0x70; //选择外部EXTOSC,不分频
    OSCCON2 = 0X60;
    OSCCON3 = 0x00;
    OSCEN = 0x00;
    OSCFRQ = 0x05;
    // HFTUN 0;
    OSCTUNE = 0x00;
}
    这种配置下, 配置字中已使能HS,写入OSCCON1的配置感觉并没有生效,因为工作频率并不是外部晶振的8M。在调整OSCFRQ寄存器的值时,仍可以修改工作频率,而OSCFRQ中的值是内部振荡器的频率配置值。实际测试时外部晶振并没有起振。
    将OSCCON2中的配置也改为0X70,即选择外部时钟,仍然是在按内部时钟频率工作。
    为什么外部时钟的配置不能生效,是配置有问题吗?请各位指教一下,感谢!


   

使用特权

评论回复
沙发
lcczg| | 2021-2-7 14:34 | 只看该作者
建议用MPLABX 的图形化工具MCC配置,生产代码。你看看你的IO脚RA4,RA5的配置对不对

使用特权

评论回复
板凳
永远不停|  楼主 | 2021-2-7 15:21 | 只看该作者
lcczg 发表于 2021-2-7 14:34
建议用MPLABX 的图形化工具MCC配置,生产代码。你看看你的IO脚RA4,RA5的配置对不对 ...

找到问题了,因为RA5,RA4除了接晶振,还接了其他电路,断开其他的电路后就可以了,程序中没有做对这两个脚的配置,默认状态。
这款芯片有PPS功能,某些功能引脚可以随意映射到其他端口,像几个比较特殊的,RA0/ICSPDAT,RA1/VREF+/ICSPCLK,RA4/OSC2,RA5/OSC1,如果RA1也要接ADC的外部参考电压VREF+,就不能正常烧程序了,这个有办法解决吗?

使用特权

评论回复
地板
lcczg| | 2021-2-8 16:33 | 只看该作者
永远不停 发表于 2021-2-7 15:21
找到问题了,因为RA5,RA4除了接晶振,还接了其他电路,断开其他的电路后就可以了,程序中没有做对这两个 ...

跳线了

使用特权

评论回复
5
永远不停|  楼主 | 2021-2-8 16:50 | 只看该作者

是的,板子上有跳线。
那像烧录口ICSPDAT和ICSPCLK,晶振接入口OSC1和OSC2,这些特殊引脚是不是就不能再做其他功能用了,虽然手册上写其他的功能可以通过PPS映射到其他任意脚,其中也包括这几个特殊脚,但正常使用时应该是没办法映射到这几个特殊脚的吧?

使用特权

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

本版积分规则

20

主题

59

帖子

0

粉丝