芯片是MSP430F5310
环境是IAR5.20.1
代码如下方式实现:
void Init_Clk(void)
{
P5SEL |= BIT4+BIT5; //使能 XT1功能脚
UCSCTL6 &= ~(XT1OFF); // XT1 开启
UCSCTL3 = 0; // FLL Reference Clock = XT1
// Loop until XT1,XT2 & DCO stabilizes - In this case loop until XT1 and DCo settle
do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
// Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; // Clear fault flags
}while (SFRIFG1&OFIFG);
UCSCTL6 &= ~(XT1DRIVE_3); // Xtal is now stable, reduce drive strength
UCSCTL4 |= SELA_0 ; // ACLK = LFTX1 (by default)
}
/*******************************************
函数名称:InitUARTA
功 能:初始化UART端口
参 数:无
返回值 :无
********************************************/
void Init_uartA(void)
{
P4SEL = BIT4+BIT5; // P4.4,5 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL1 |= UCSSEL_2; // SMCLK
//UCA0CTL1 |= UCLISTEN;
UCA1STAT |= BIT7; //使用自收自发模式
UCA0BR0 = 0x03; // 32kHz/9600=3.41 (see User's Guide)
UCA0BR1 = 0x00; //
UCA0MCTL = UCBRS_1+UCBRF_0; // Modulation UCBRSx=3, UCBRFx=0
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA0IE |= UCRXIE;
}
/*******************************************
函数名称:InitUARTB
功 能:初始化UART端口
参 数:无
返回值 :无
********************************************/
void Init_uartB(void)
{
P4SEL = BIT4+BIT5; // P4.4,5 = USCI_A0 TXD/RXD
UCB0CTL1 |= UCSWRST; // **Put state machine in reset**
UCB0CTL1 |= UCSSEL_2; // SMCLK
//UCA0CTL1 |= UCLISTEN;
UCB1STAT |= BIT7; //使用自收自发模式
UCB0BR0 = 0x03; // 32kHz/9600=3.41 (see User's Guide)
UCB0BR1 = 0x00; //
UCA0MCTL = UCBRS_1+UCBRF_0; // Modulation UCBRSx=3, UCBRFx=0
UCB0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCB0IE |= UCRXIE;
}
/*******************************************
函数名称:InitUARTB
功 能:初始化UART端口
参 数:无
返回值 :无
********************************************/
void Init_uartB(void)
{
P4SEL = BIT4+BIT5; // P4.4,5 = USCI_A0 TXD/RXD
UCB0CTL1 |= UCSWRST; // **Put state machine in reset**
UCB0CTL1 |= UCSSEL_2; // SMCLK
//UCA0CTL1 |= UCLISTEN;
UCB1STAT |= BIT7; //使用自收自发模式
UCB0BR0 = 0x03; // 32kHz/9600=3.41 (see User's Guide)
UCB0BR1 = 0x00; //
UCA0MCTL = UCBRS_1+UCBRF_0; // Modulation UCBRSx=3, UCBRFx=0
UCB0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCB0IE |= UCRXIE;
}
/*******************************************
函数名称:BGet1Char
功 能:接收一个来自PC机的字符
参 数:无
返回值 :接收到的字符
********************************************/
uchar BGet1Char(void)
{
while (!(UCB0IFG&UCTXIFG)); //等待接收到字符
return UCB0RXBUF;
}
int main( void )
{
WDTCTL = WDTPW + WDTHOLD; //关看门狗
Init_Clk();
Init_Port();
Init_uartA();
Init_uartB();
_EINT(); //开总中断
while(1)
{
ASend1Char(0x11);
ReceiveV = BGet1Char();
//LPM3;
}
}
现在问题是在UCA0TXBUF时可以看到值!但是在UCB0RXBUF中看不到收到的值!
求高手指点!
别外在同一个芯片内实现一个UART 发一个UART 收,这样设置是不是有问题!
此帖出自
小平头技术问答
一周热门 更多>