cc254x的外部32.768k晶振

根据文档说明可以发现CC254x有四个振荡器

  1、32MHz外部晶振  -  为内部时钟提供时钟源和用于RF收发器

  2、16MHz内部RC振荡器  -  为内部时钟提供时钟源,功耗低,精度差,不可以用于RF收发器

  3、32kHz外部晶振  -  精度高,低功耗设计必须接,主要用在Sleep Timer 和Watchdog Timer上

  4、32kHz内部RC振荡器  -  精度低,功耗低,主要用在Sleep Timer 和Watchdog Timer上

      CC254x内部自带振荡器,因此即使外部电路不接晶振,CC254x也可以用内部振荡器工作,但是如果用到RF收发数据的话,只能使用外部32MHz晶振,因此如果芯片是用作ble的话,那么32mhz晶振是必须接的,如果不接的话,只能用cc254x当单片机使用。


        一般的项目中cc254x的硬件上面会接两个晶振,一个是系统运行需要的32Mhz的晶振,这个不用多说,关于32.768khz的外部晶振,需要特别说明一下,这个晶振根据自己的需求是可有可无的,阅读文档会发现,这颗32k的晶振是给低功耗使用的,也就是如果系统需要设计低功耗,则必须接上32.768khz的外部晶振,否则使用32kHz内部RC振荡器,这就会导致计时不准确,该醒的时候醒不过来,所以就会出现连接不上,易断开的情况。如果不需要低功耗设计,在不接外部32.768khz晶振的情况下,可以屏蔽POWER_SAVING的宏,也可以修改协议栈初始化设置,使用32kHz内部RC振荡器,修改方法如下(参考http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/t/70831.aspx):


没有外部32KHz晶振也可以进入PM2的,需要修改main里的HAL_BOARD_INIT()这个宏。把切换到外部32KHz晶振的代码删掉即可,相关引脚也要做处理。

/* Board Initialization */
#define HAL_BOARD_INIT()                                                       \
{                                                                              \
  /* Set to 16Mhz to set 32kHz OSC, then back to 32MHz */                      \
  START_HSOSC_XOSC();                                                          \
  /*SET_OSC_TO_HSOSC(); 使用内部32K时钟*/                                                         \
  /*SET_32KHZ_OSC();*/                                                             \
  SET_OSC_TO_XOSC();                                                           \
  STOP_HSOSC();                                                                \
                                                                               \
  /* Enable cache prefetch mode. */                                            \
  PREFETCH_ENABLE();                                                           \
}


你可能感兴趣的:(低功耗蓝牙)