Quantcast
Channel: MSP 低功耗微控制器论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 3634

MSP430F6438 低功耗模式下的串口通信失败

$
0
0

大家好:

    我现在遇到一个棘手的问题。MSP430F6438 工作在低功耗LPM3模式下,系统时钟为通过倍频得到的2.45MHz,串口时钟使用smclk。

    现在问题出来了,若在仿真状态下,串口可以正常接收数据;若退出仿真状态,拔掉仿真器,串口则不能接收数据了。这是什么原因呢?

    下面是时钟初始化和串口初始化代码:

void Init_FLL_CLK(void)                        // 初始化锁相环主时钟: MCLK = XT1×(FLL_FACTOR+1)
{
  while(BAKCTL & LOCKBAK)                    // Unlock XT1 pins for operation
  BAKCTL &= ~(LOCKBAK);
  P7SEL  |=(BIT0+BIT1);                        // 端口选择外部低频晶振XT1 ,32768
  UCSCTL6&=~XT1OFF;                            // 使能外部晶振
  UCSCTL6|= XCAP_3;                            // 设置内部负载电容
  UCSCTL3|= SELREF_0;        //  SELREF_0选择 XT1 ; 
 UCSCTL4|= SELA__XT1CLK;          // ACLK   = ref
 // Loop until XT1,XT2 & DCO fault flag is cleared
  do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
                                            // Clear XT2,XT1,DCO fault flags
    SFRIFG1 &= ~OFIFG;                      // Clear fault flags
  }while (SFRIFG1&OFIFG);                   // Test oscillator fault flag
 UCSCTL6 &= ~(XT1DRIVE_3);                 // Xtal is now stable, reduce drive strength
 // Initialize DCO to 2.45MHz
  __bis_SR_register(SCG0);                  // Disable the FLL control loop
  UCSCTL0 = 0x0000;                         // Set lowest possible DCOx, MODx.
  UCSCTL1 &= ~(DCORSEL_7);                  // Clear DCO frequency select bits first
  UCSCTL1 = DCORSEL_3;                      // Set RSELx for DCO = 4.9 MHz
  UCSCTL2 = FLLD_1 + 74;                    // Set DCO Multiplier for 2.45MHz
                                            // (N + 1) * FLLRef = Fdco
                                            // (74 + 1) * 32768 = 2.4576MHz
  __delay_cycles(5000);
  __bic_SR_register(SCG0);                  // Enable the FLL control loop

  UCSCTL4 |= SELM__DCOCLK + SELA__XT1CLK + SELS__DCOCLK; //选择MCLK,ACLK,SMCLK,
}
 void Init_USCI_A0_UART(void)
{
  UCA0IE&=~UCRXIE; 
  UCA0IE&=~UCTXIE;         // 关闭中断
  P2SEL   |= (BIT4+BIT5);        
  P2DIR   |=  BIT4;                
  P2DIR   &= ~BIT5;                 // 选择引脚方向
  UCA0CTL1 = UCSWRST;               // 状态机复位
  UCA0CTL1|= UCSSEL__SMCLK;              // 选择时钟源CLK = SMCLK
  UCA0CTL0 = UCMODE_0;              //选择uart模式
  UCA0CTL0 &= ~UC7BIT;              //8字节传输
  
  UCA0BR0 = 0x40;                     //波特率分频 2457600hz/38400
  UCA0BR1 = 0x00;
  UCA0MCTL= 0x00;
  UCA0CTL1&=~UCSWRST;               // 启动状态机,即启用串口功能
  UCA0IE  |= UCRXIE;                // 允许接收中断
}


Viewing all articles
Browse latest Browse all 3634

Trending Articles