最近在使用fr5992时,需要用到1200的波特率,根据文档设置完以后,发现串口接收不到任何数据,但是用官方的例程可以,说明硬件没有问题,不清楚哪里设置出了问题,源码如下,
#include <msp430fr5992.h>
char RecvBuf[20] = {0};
int dataLen = 0;
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
PM5CTL0 &= ~LOCKLPM5;
P2SEL1 &= ~( BIT5 + BIT6 );//TX,RX
P2SEL0 |= ( BIT5 + BIT6 );//TX,RX
UCA1CTLW0 |= UCSWRST; // **Put state machine in reset**
UCA1CTLW0 |= UCSSEL__ACLK; // CLK = ACLK
//Baudrate = 1200
//BRCLK BaudRate UCOS16 UCBRx UCBRFx UCBRSx(2)
//32768 1200 1 1 11 0x25
UCA1BRW = 1;
UCA1MCTLW |= UCOS16 | UCBRF_11|0x2500;
UCA1CTLW0 &= ~UCSWRST; // **Initialize USCI state machine**
UCA1IE |= UCRXIE; // Enable USCI_A1 RX interrupt
__bis_SR_register(GIE);
while(1)
_NOP();
return 0;
}
void Uart1_PutChar(char data)
{
while (!(UCA1IFG & UCTXIFG));
UCA1TXBUF = data;
}
/******************************************************************************
函数: void USCI_A1_ISR(void)
功能: 串口1中断处理函数
参数:
返回值:
说明:
******************************************************************************/
#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
switch( UCA1IV )
{
case 0:
break; // Vector 0 - no interrupt
case 2: // Vector 2 - RXIFG
{
dataLen = dataLen % 20;
RecvBuf[dataLen] = UCA1RXBUF;
}
break;
case 4:
break; // Vector 4 - TXIFG
default:
break;
}
}