您好,
在 Code Composer Studio 中使用 C 代码通过 SPI 配置 CC1120时遇到了一些问题。我通过从 SmartRF 导入868MHz 的设置来编写了以下代码。但通信未正常进行。我在发送器和接收器侧执行了相同的设置。下面是代码 发送器侧
#include
unsigned char 命令 Byte、dataByte、receivedByte、i;
void SPI_init();
void sendData (unsigned char);
unsigned char receiveData (void);
void send_Serial (unsigned char);
void init_serial (void);
void send_value (unsigned char);
int main (空)
{
WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
spi_init(); //初始化 SPI
init_serial();
P1OUT=0x01; //选择输出
P1OUT^= BIT0;
while (1)//***检查空 RXFIFO 的条件
{
sendData (0x01);
sendData (0x02);
sendData (0x03);
sendData (0x04);
sendData (0x05);
}
返回0;
}
void send_value (无符号字符字节)
{
unsigned char 字节2、字节1、字节0;
字节2=(字节/100);
字节2=字节2|0X30;
SEND_Serial (字节2);
字节=字节%100;
字节1 =字节/10;
字节1=字节1|0X30;
SEND_Serial (字节1);
字节0=byte%10;
字节0=字节0|0X30;
SEND_Serial (字节0);
SEND_Serial ('\n');
}
void send_Serial (无符号字符字节)
{
UCA1TXBUF=字节;
while (UCA1STAT 和 UCBUSY);
UCA1TXBUF=0x0A;//LE
while (UCA1STAT 和 UCBUSY);
UCA1TXBUF=0x0D;//CR
while (UCA1STAT 和 UCBUSY);
}
void init_serial (void)
{
P4SEL|=0X30;//选择 P4.4、5作为 TxD、RxD;
UCA1CTL1|=UCSWRST;//复位 UART
UCA1CTL1|=UCSSEL_1;//选择32668HZ
UCA1BR0=3;//设置9600波特率
UCA1BR1=0x00;
UCA1MCTL=0x06;
UCA1CTL0=0x00;
UCA1CTL1 &=~UCSWRST;
}
void SPI_init()
{
P2DIR|=BIT2; //为输出配置 CS
P2OUT = BIT2; // CS High
P3REN=BIT1; //
P3DIR |= BIT0 + BIT2; //设置为输出
P3SEL = BIT0+ BIT1 + BIT2; //配置 SPI
/* USCI */
UCB0CTL1 = UCSWRST; //将状态机复位
UCB0CTL0 |= UCCKPL + UCMSB+UCMST + UCSYNC; // 3引脚8位 SPI 主器件
UCB0CTL1 |= UCSSEL_2; // USCI 时钟源:SMCLK
UCB0BR0 |= 0x02;
UCB0BR1 = 0;
UCB0CTL1 &=~UCSWRST; //启用模块或模块初始化
P2OUT &=~BIT2; //选择设备
}
void sendData (无符号字符数据字节)
{
UCB0TXBUF =数据字节; //输入要发送的0-255值
while (UCB0STAT 和 UCBUSY); //等待移位寄存器和缓冲区为空完成
_DELAY_CYCLES (1000);
}
unsigned char receiveData()
{
while (UCB0STAT 和 UCBUSY); //等待移位寄存器和缓冲区为空完成
接收字节= UCB0RXBUF; //存储接收到的数据
_DELAY_CYCLES (1000);
return receivedByte;
}
在接收器端、我编写了以下代码。
#include
unsigned char 命令 Byte、dataByte、receivedByte、i;
void SPI_init();
void sendData (unsigned char);
unsigned char receiveData (void);
void send_Serial (unsigned char);
void init_serial (void);
void send_value (unsigned char);
int main (空)
{
WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
spi_init(); //初始化 SPI
init_serial();
P1OUT=0x01; //选择输出
P1OUT^= BIT0;
while (1)//***检查空 RXFIFO 的条件
{
receivedByte=receiveData();
SEND_VALUE (接收字节);
}
返回0;
}
void send_value (无符号字符字节)
{
unsigned char 字节2、字节1、字节0;
字节2=(字节/100);
字节2=字节2|0X30;
SEND_Serial (字节2);
字节=字节%100;
字节1 =字节/10;
字节1=字节1|0X30;
SEND_Serial (字节1);
字节0=byte%10;
字节0=字节0|0X30;
SEND_Serial (字节0);
SEND_Serial ('\n');
}
void send_Serial (无符号字符字节)
{
UCA1TXBUF=字节;
while (UCA1STAT 和 UCBUSY);
UCA1TXBUF=0x0A;//LE
while (UCA1STAT 和 UCBUSY);
UCA1TXBUF=0x0D;//CR
while (UCA1STAT 和 UCBUSY);
}
void init_serial (void)
{
P4SEL|=0X30;//选择 P4.4、5作为 TxD、RxD;
UCA1CTL1|=UCSWRST;//复位 UART
UCA1CTL1|=UCSSEL_1;//选择32668HZ
UCA1BR0=3;//设置9600波特率
UCA1BR1=0x00;
UCA1MCTL=0x06;
UCA1CTL0=0x00;
UCA1CTL1 &=~UCSWRST;
}
void SPI_init()
{
P3DIR |= BIT1; //设置为输出
P3SEL = BIT0+ BIT1 + BIT2; //配置 SPI
/* USCI */
UCB0CTL1 = UCSWRST; //将状态机复位
UCB0CTL0 |= UCCKPL + UCMSB + UCSYNC; // 3引脚8位 SPI 主器件
UCB0CTL1 |= UCSSEL_2; // USCI 时钟源:SMCLK
UCB0BR0 |= 0x02;
UCB0BR1 = 0;
UCB0CTL1 &=~UCSWRST; //启用模块或模块初始化
}
void sendData (无符号字符数据字节)
{
UCB0TXBUF =数据字节; //输入要发送的0-255值
while (UCB0STAT 和 UCBUSY); //等待移位寄存器和缓冲区为空完成
_DELAY_CYCLES (1000);
}
unsigned char receiveData()
{
unsigned char receivedByte;
while (UCB0STAT 和 UCBUSY); //等待移位寄存器和缓冲区为空完成
接收字节= UCB0RXBUF; //存储接收到的数据
_DELAY_CYCLES (1000);
return receivedByte;
}
请建议我采取补救措施,使其正确发生