本帖最后由 menghubei 于 2015-10-9 15:08 编辑
XT2晶振使用25M,使用正常。
串口使用UCA3,波特率使用115200,程序功能:串口收到数据后直接返回数据。
UCA3BR = 25m/115200/16=13.56;
UCARF = 0.56*16=9;
出现的问题:PC端串口助手使用115200波特率是接收到乱码,使用76800没有问题,收发正常,怀疑是波特率设置的问题。
源代码如下:
//*********************************************************************************************
//主系统时钟设置
P5SEL |= BIT2 + BIT3; // Port select XT2
PMMCTL0=PMMPW+PMMCOREV_3;
UCSCTL6 &= ~XT2OFF; // Enable XT2
//UCSCTL6 |= XT2DRIVE_3; //晶振电流最大,达到24M~32MHz
UCSCTL3 |= SELREF_2; // FLLref = REFO
UCSCTL4 |= SELA__REFOCLK; // ACLK=REFO(32.768kHz),SMCLK=DCO,MCLK=DCO
do
{ // Clear XT2,XT1,DCO fault flags
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
SFRIFG1 &= ~OFIFG; // Clear fault flags
}while (SFRIFG1&OFIFG); // Test oscillator fault flag
UCSCTL6 &= ~(XT2DRIVE0 + XT2DRIVE1); // Decrease XT2 Drive according to expected frequency
UCSCTL6 |= XT2DRIVE_3; // XT2 Drive Level mode: 2, XT2: 16MHz~24MHz
UCSCTL4 |= SELS_5 + SELM_5; // SMCLK=MCLK=XT2
//串口设置
UCA3CTL1 |= UCSWRST;
UCA3CTL1 |= UCSSEL_3; //选择smclk为时钟源
UCA3BR1 = 13;
UCA3BR0 = 0;
UCA3MCTL = UCBRS_0 + UCBRF_9 + UCOS16;
P10SEL |= BIT4 + BIT5;
P10DIR =0x10;
UCA3CTL1 &= ~UCSWRST;
UCA3IE |= UCRXIE;
_EINT();
//*********************************************************************************************
各位又遇到这种问题没
此帖出自
小平头技术问答
XT2频率我都输出用示波器看了,虽然有误差,基本维持在25MHz左右。
SMCLK和MCLK都直接用的XT2,没有分频;串口时钟源用的SMCLK也就是25MHz。
已经醉了
一周热门 更多>