大家好!
目前需要采用内部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晶振的话这两句怎么变化呢?求指点,谢谢大家。
Albin Zhang:
32M不但给51,而且是给RF core的。所以没有32M是不行的。
BR. AZ
Viki Shi:
高频射频的电路对晶振的要求比较高,内部晶振无法避免不精准的问题,所以为了性能,还是要接
关东糖:
回复 Albin Zhang:
谢谢亲,但是我的需求就是不要RF,彻底停掉RF。
关东糖:
回复 Viki Shi:
在我的上一个问题中您应该帮忙解答过,我的需求就是不要RF只用51MCU的。
关东糖:
回复 Viki Shi:
您好,这里就是不适用RF的场景的。想问下START和STOP这两句到底是怎么回事呢?怎么操作了保留位呢?
Albin Zhang:
回复 关东糖:
哦,这下不好回答了。我们没啥具体经验。
你可以移步国外的e2e论坛吗?看看老外们有没有类似经验。
https://e2e.ti.com/support/wireless_connectivity/bluetooth_low_energy/
www.
关东糖:
回复 Albin Zhang:
谢谢,请问您能帮忙解释下START_HSOSC_XOSC和STOP_HSOSC两句的含义吗?对保留位操作是怎么回事呢?
da qin zheng sheng:
#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();
}
}
关东糖:
回复 da qin zheng sheng:
请不要回答不相干的内容,更不要做广告。
da qin zheng sheng:
回复 关东糖:
使用外部晶振就下边这两句代码,我给你完整的串口测试代码并有注释,问一下你如何说出这些话话???
CLKCONCMD = 0x80; // Wait until system clock source has changed to HS XOSC (CLKCONSTA.OSC = 0).
while(CLKCONSTA & 0x40);//外部晶振32MHz