MSP430G2553与CC2530串口通讯已经成功实现了!
图中下面的那个板子是我借的,是仿官方的CC2530的板子 !
黑线和白线就是串口线 啦!灰屏显示的是MSP430上的数据,
蓝屏显示的则是通过串口发送到CC2530上后显示的数据! 两块屏上的数据时一致的!
介绍一下程序:
MSP430G2553部分:
初始化串口
void USCI_A0_init(void)
{
P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
P1SEL2 = BIT1 + BIT2;
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 8; // 1MHz 115200
UCA0BR1 = 0; // 1MHz 115200
UCA0MCTL = UCBRS2 + UCBRS0; // Modulation UCBRSx = 5
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE + UCA0TXIE; // Enable USCI_A0 TX/RX interrupt
__bis_SR_register(GIE); // Enter LPM3 w/ interrupts enabled
}
发送单个字节(查询法)
void UartTX_Send_char(unsigned char c)
{
UCA0TXBUF=c;
while(!(IFG2&UCA0TXIFG));
IFG2&=~UCA0TXIFG;
}
接收(中断法)
// USCI A0/B0 Receive ISR
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
uchar c;
c=UCA0RXBUF;
IFG2&=~UCA0RXIFG;
__bic_SR_register_on_exit(LPM3_bits); // 出低功耗
}
CC2530部分:
初始化:
void initUARTtest(void)
{
CLKCONCMD &= ~0x40; //晶振
while(!(SLEEPSTA & 0x40)); //等待晶振稳定
CLKCONCMD &= ~0x47; //TICHSPD128分频,CLKSPD不分频
SLEEPCMD |= 0x04; //关闭不用的RC振荡器
PERCFG = 0x00; //位置1 P0口
//P0SEL = 0x3c; //P0用作串口
P0SEL = 0x0c; //P0用作串口
U0CSR |= 0x80; //UART方式
U0GCR |= 11; //baud_e
U0BAUD |= 216; //波特率设为11520
UTX0IF = 1;
U0CSR |= 0X40; //允许接收
IEN0 |= 0x84; //开总中断,接收中断
}
发送字符串(查询法)
void UartTX_Send_String(uchar *Data,int len)
{
int j;
for(j=0;j<len;j++)
{
U0DBUF = *Data++;
while(UTX0IF == 0);
UTX0IF = 0;
}
}
接收(中断法)
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void)
{
URX0IF = 0; //清中断标志
temp = U0DBUF;
}