CC2541能否不接32MHz高频晶振?
大家好!
目前需要采用内部16MHz晶振,但是按照协议栈的程序焊掉32MHz后程序卡死了。所以想问下不接这个高频晶振可以吗?
这里有一段程序我没有读懂:
#define HAL_BOARD_INIT() \ { \ /* Set to 16Mhz to set 32kHz OSC, then back to 32MHz */\ START_HSOSC_XOSC(); \ SET_OSC_TO_HSOSC(); \ SET_32KHZ_OSC(); \ SET_OSC_TO_XOSC(); \ STOP_HSOSC(); \ /* Enable cache prefetch mode. */ \ PREFETCH_ENABLE(); \ }
大括号内START_HSOSC_XOSC和STOP_HSOSC两句完全没有读懂,这似乎和手册对不上啊?这两个函数操作的是SLEEPCMD的第2位,也就是常写1的保留位吧?操作保留位有啥用?请问这两句是什么原理呢?去掉32MHz晶振的话这两句怎么变化呢?求指点,谢谢大家。
32M不但给51,而且是给RF core的。所以没有32M是不行的。
高频射频的电路对晶振的要求比较高,内部晶振无法避免不精准的问题,所以为了性能,还是要接
谢谢亲,但是我的需求就是不要RF,彻底停掉RF。
在我的上一个问题中您应该帮忙解答过,我的需求就是不要RF只用51MCU的。
您好,这里就是不适用RF的场景的。想问下START和STOP这两句到底是怎么回事呢?怎么操作了保留位呢?
哦,这下不好回答了。我们没啥具体经验。
你可以移步国外的e2e论坛吗?看看老外们有没有类似经验。
https://e2e.ti.com/support/wireless_connectivity/bluetooth_low_energy/
www.
谢谢,请问您能帮忙解释下START_HSOSC_XOSC和STOP_HSOSC两句的含义吗?对保留位操作是怎么回事呢?
#include "ioCC2540.h"
void delay() {unsigned long i;
for(i=0;i<10000;i++)
asm(" nop "); }
void main()
{ CLKCONCMD = 0x80; // Wait until system clock source has changed to HS XOSC (CLKCONSTA.OSC = 0).
while(CLKCONSTA & 0x40);//外部晶振32MHz
P0SEL =0x0c;///发送数据的tx引脚是p03, rx p0.2
P0DIR=0xff;
U0CSR=0xc0;
U0UCR=0x02;
U0GCR=0x08;
U0BAUD=59;//波特率9600
PERCFG=0;
while(1) { U0DBUF=0xaa;
while( !(U0CSR&0x2));
delay(); delay(); delay(); delay(); delay(); delay();
U0DBUF=0x55;
while( !(U0CSR&0x2));
delay(); delay(); delay(); delay(); delay(); delay();
}
}
请不要回答不相干的内容,更不要做广告。
使用外部晶振就下边这两句代码,我给你完整的串口测试代码并有注释,问一下你如何说出这些话话?
CLKCONCMD = 0x80; // Wait until system clock source has changed to HS XOSC (CLKCONSTA.OSC = 0).
while(CLKCONSTA & 0x40);//外部晶振32MHz
看我个性签名档的博客地址,《CC2541之解析协议栈的晶振初始化过程》
谢谢解答,但是麻烦看下我讨论的是不接高频晶振如何操作,并不是高频晶振如何使用。
谢谢,您的回答完美地解决了我的疑问!