MSP430串口初始化程序为什么要设置两个晶振?

来源:百度知道 编辑:UC知道 时间:2024/06/03 16:35:33
void init_UART(void)
{
unsigned char tmpv;
FLL_CTL0 &= ~XTS_FLL; //XTS_FLL(0x40) 1: Selects high-freq. oscillator
//使用低频晶振
/* UCTL0 |=SWRST;
UCTL0 |=CHAR; // 8-bit 字符
UTCTL0= 0x10; // UCLK=ACLK
UBR00 = 0x0d; // 在32768下进行 2400波特率通信
UBR10 = 0x00; // 在32768下进行 2400波特率通信
UMCTL0= 0x57; // 调整寄存器
*/

FLL_CTL1|=SELS+XT2OFF+SELM_XT2; //开启第二个振荡器
do
{
IFG1 &= ~OFIFG; // 清除OSCFault标志
for(tmpv = 0xff;tmpv > 0;tmpv--); //Time for flag to set
}while ((FLL_CTL0&XT2OF) == XT2OF ); // 第二个振荡器是否正常工作
UCTL0|=SWRST;
UCTL0|=CHAR; // 8-bit 字符
UTCTL0=SSEL0+SSEL1;

UBR00 = 0x0d;
UBR10 = 0x00;
你理解错了,不是两个晶振
是UBRO为低字节和UBR1为高字节组合为一个16位的波特率调整器

这个是用TIMERA的比较捕获中断模拟串口接受。TIMERA的时钟使用ACLK(XIN和XOUT引脚上的晶振)。
模拟串口专门使用一个时钟并不是为了得到稳定的波特率,而是为了能进入LPM3模式等待接收。(LPM3模式时主时钟SMCLK停止,辅助时钟ACLK还工作,能触发TIMERA中断)
如果不使用ACLK而使用主时钟SMCLK来进行TIMERA中断,则只能进入LPM1模式,进不了LPM3。
关于这几个低功耗模式请翻手册。
PS:用MSP430不就是要用他的LPM3或LPM4吗?不然也没用MSP430的必要了

会有两种频率吗?能允许非额定频率冲击吗?像高压电路的控制吗?

去看看怎么设置波特率的 你根本就没有用什么2个晶振