金牌会员
- 积分
- 1083
- 威望
- 646
- 贡献
- 291
- 兑换币
- 16
- 注册时间
- 2011-3-18
- 在线时间
- 73 小时
|
2贡献
我写个与另一NRF905通讯,传输数据的程序
NRF905的DR有反应但是NRF905没数据发送出去
NRF905是好的
初步怀疑是SPI的波特率没调试好,导致通过SPI从单片机发送到NRF905的信息是乱码
只是猜测还望高手帮忙啊!!!
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#define uchar unsigned char
#define uint unsigned int
///////////////////////////////
//////////引脚数据寄存器定义///////////
#define RF905_PR_TX_EN PORTA_PA3
#define RF905_PR_TRX_CE PORTA_PA4
#define RF905_PR_PWR PORTA_PA5
#define RF905_PR_CD PORTA_PA6
#define RF905_PR_AM PORTA_PA7
#define RF905_PR_DR PTJ_PTJ7
#define RF905_SPI_PR_CSN PTM_PTM3
#define RF905_SPI_PR_SCK PTM_PTM5
#define RF905_SPI_PR_MISO PTM_PTM2
#define RF905_SPI_PR_MOSI PTM_PTM4
////////////////////RF905模块引脚方向寄存器定义//////////////////
#define RF905_TR_TX_EN DDRA_DDRA3
#define RF905_TR_TRX_CE DDRA_DDRA4
#define RF905_TR_PWR DDRA_DDRA5
#define RF905_TR_CD DDRA_DDRA6
#define RF905_TR_AM DDRA_DDRA7
#define RF905_TR_DR DDRJ_DDRJ7
#define RF905_SPI_TR_SCK DDRM_DDRM5
#define RF905_SPI_TR_MISO DDRM_DDRM2
#define RF905_SPI_TR_MOSI DDRM_DDRM4
#define RF905_SPI_TR_CSN DDRM_DDRM3
///////////////////RF905中断寄存器定义////////////////
#define RF905_INR_CS_DR PPSJ_PPSJ7
#define RF905_INR_IE_DR PIEJ_PIEJ7
#define RF905_INR_IF_DR PIFJ_PIFJ7
////////////////////////////905-SPI指令/////////////////////////////////
#define WC 0x00 //写905配置字
#define RRC 0x10 //读905配置字
#define WTP 0x20 //写905 发送的32个字节
#define RTP 0x21 //读905 发送的32个字节
#define WTA 0x22 //写905 接收方地址
#define RTA 0x23 //读905 接收方地址
#define RRP 0x24 //读取接收到的32个字节
///////////////////////////NRF_905变量定义/////////////////////////
/////////////////////共用变量定义///////////////////////
int i;
int j;
int Temp;
int Hmt;
long int TmNum;
unsigned char RF905_Spi_RCBuf[32]={0};
uchar RF905_CheckBuf_1[]="FJ1"; //发送数据
uchar RF905_CheckBuf_2[]="FJ2"; //发送数据
unsigned char RF905_CheckAddress_1[4]={0xcc,0xcc,0xcc,0xcc};
unsigned char RF905_CheckAddress_2[4]={0xaa,0xaa,0xaa,0xaa};
unsigned char RF905_Conf_1[11]=
{
0X00, //配置命令//
0x4c, //CH_NO,配置频段在423MHZ
0x0c, //输出功率为10db,不重发,节电为正常模式
0x44, //地址宽度设置,为4字节
0x20,0x20, //接收发送有效数据长度为32字节
0xcc,0xcc,0xcc,0xcc, //接收地址
0x58 //CRC充许,8位CRC校验,外部时钟信号不使 //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
};
unsigned char RF905_Conf_2[11]=
{
0X00, //配置命令//
0x4c, //CH_NO,配置频段在423MHZ
0x0c, //输出功率为10db,不重发,节电为正常模式
0x44, //地址宽度设置,为4字节
0x20,0x20, //接收发送有效数据长度为32字节
0xaa,0xaa,0xaa,0xaa, //接收地址
0x58 //CRC充许,8位CRC校验,外部时钟信号不使 //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
};
///////////////
void RF905_SpiReadSpiWrite(uchar DATA);
void RF905_SpiWrite_Order(uchar *val,uchar num);
void RF905_SpiRead_Order(uchar *val,uchar num);
void RF905_Config_1(void);
void RF905_Config_2(void);
void RF905_SetRCMode(void);
void RF905_SetTXMode (void);
void RF905_RCPacket(void);
void RF905_TXPacket_1(void);
void RF905_TXPacket_2(void);
void RF905_CheckTemp_1(void);
void RF905_CheckTemp_2(void);
void RF905_ProcTemp(void);
////////////////////////////////////公用程序////////////////////////////////////
void __delay_us(unsigned int valus)
{
unsigned int i;
valus=2*valus;
for(i=0;i<valus;i++)
{
;
}
}
void __delay_ms(int ms)
{
int ii,jj;
if (ms<1) ms=1;
for(ii=0;ii<ms;ii++)
for(jj=0;jj<2670;jj++);
}
////////////////////系统初始化设置/////////////////////////
void System_Init(void)
{
RF905_TR_TX_EN=1;
RF905_TR_TRX_CE=1;
RF905_TR_PWR=1;
RF905_TR_CD=0;
RF905_TR_AM=0;
RF905_TR_DR=0;
RF905_SPI_TR_CSN=1;
RF905_SPI_TR_SCK=1;
RF905_SPI_TR_MISO=0;
RF905_SPI_TR_MOSI=1;
RF905_PR_TX_EN=0;
RF905_PR_TRX_CE=0;
RF905_PR_PWR=1;
RF905_SPI_PR_CSN=1;
RF905_INR_IE_DR=1;
RF905_INR_CS_DR=1;
RF905_INR_IF_DR=0;
SPI0CR1=0X52;
SPI0CR2=0X10;
MODRR=0X10;
SPI0BR=0X42;
}
////////////////////////////////////RF905子程序/////////////////////////////////////
////////////////////RF905-SPI读/写单字节/////////////////////////
void RF905_SpiReadSpiWrite(uchar DATA) //r
{
SPI0DR=DATA;
while(!(SPI0SR&0X20));
//写入要发送数据发送的同时也得到数据
}
///////////////////RF905-SPI写数组///////////////////////////
void RF905_SpiWrite_Order(uchar *val,int num)
{
RF905_SPI_PR_CSN=0;
__delay_ms(1);
for(i=0;i<num;i++)
{
RF905_SpiReadSpiWrite(val[i]);
}
RF905_SPI_PR_CSN=1;
}
////////////////////初始化寄存器_1////////////////////////////
void RF905_Config_1(void)
{
RF905_SpiWrite_Order(RF905_Conf_1,11);
__delay_ms(10);
}
////////////////////初始化寄存器_2////////////////////////////
void RF905_Config_2(void)
{
RF905_SpiWrite_Order(RF905_Conf_2,11);
__delay_ms(10);
}
////////////////////RF905接收设置////////////////////////////
void RF905_SetRCMode(void)
{
RF905_PR_TX_EN=0;
__delay_ms (1);
RF905_PR_TRX_CE=1;
__delay_ms(1);
}
////////////////////RF905发送设置////////////////////////////
void RF905_SetTXMode (void)
{
RF905_PR_TRX_CE=0;
__delay_ms(1);
RF905_PR_TX_EN=1;
__delay_ms(1);
}
////////////////////RF905数据包接收//////////////////////////
void RF905_RCPacket(void)
{
RF905_PR_TRX_CE=0;
__delay_ms(1);
RF905_SPI_PR_CSN=0;
__delay_ms(1);
RF905_SpiReadSpiWrite(RRP);
RF905_SpiRead_Order(RF905_Spi_RCBuf,32);
while(RF905_PR_AM||RF905_PR_DR);
}
////////////////////RF905_1数据包发送//////////////////////////
void RF905_TXPacket_1(void)
{
RF905_SPI_PR_CSN=0;
__delay_ms(1);
RF905_SpiReadSpiWrite(WTP);
RF905_SpiWrite_Order(RF905_CheckBuf_1,3);
__delay_ms(1);
RF905_SPI_PR_CSN=0;
RF905_SpiReadSpiWrite(WTA);
RF905_SpiWrite_Order(RF905_CheckAddress_1,4);
RF905_PR_TRX_CE=1;
while(RF905_PR_DR==0);
RF905_PR_TRX_CE=0;
RF905_PR_TX_EN=0;
RF905_INR_IF_DR=0;
__delay_ms(1);
}
////////////////////RF905_2数据包发送//////////////////////////
void RF905_TXPacket_2(void)
{
RF905_SPI_PR_CSN=0;
__delay_ms(1);
RF905_SpiReadSpiWrite(WTP);
RF905_SpiWrite_Order(RF905_CheckBuf_2,3);
__delay_ms(1);
RF905_SPI_PR_CSN=0;
RF905_SpiReadSpiWrite(WTA);
RF905_SpiWrite_Order(RF905_CheckAddress_2,4);
RF905_PR_TRX_CE=1;
while(RF905_PR_DR==0);
__delay_ms(10);
RF905_PR_TRX_CE=0;
RF905_PR_TX_EN=0;
RF905_INR_IF_DR=0;
__delay_ms(1);
}
/////////////////////RF905_1温度检测///////////////////////////
void RF905_CheckTemp_1(void)
{
RF905_Config_1();
__delay_ms(10);
RF905_INR_IE_DR=0;
RF905_SetTXMode();
RF905_TXPacket_1();
RF905_INR_IE_DR=1;
RF905_SetRCMode();
__delay_ms(100);
}
/////////////////////RF905_2温度检测///////////////////////////
void RF905_CheckTemp_2(void)
{
RF905_Config_2();
__delay_ms(10);
RF905_INR_IE_DR =0;
RF905_SetTXMode();
RF905_TXPacket_2();
RF905_INR_IE_DR=1;
//RF905_SetRCMode();
__delay_ms(100);
}
/////////////////////RF905温度处理/////////////////////////////
void RF905_ProcTemp(void)
{
//Temph=RF905_Spi_RCBuf[2]-'0';
//Templ=RF905_Spi_RCBuf[3]-'0';
Temp=(RF905_Spi_RCBuf[2]-'0')*10+RF905_Spi_RCBuf[3]-'0';
//Hmth=RF905_Spi_RCBuf[12]-'0';
//Hmtl=RF905_Spi_RCBuf[13]-'0';
Hmt=RF905_Spi_RCBuf[12]-'0'*10+RF905_Spi_RCBuf[13]-'0';
RF905_Spi_RCBuf[2];
RF905_Spi_RCBuf[3];
RF905_Spi_RCBuf[11];
RF905_Spi_RCBuf[12];
}
void setbusclock(void)
{
CLKSEL=0X00; //disengage PLL to system
PLLCTL_PLLON=1; //turn on PLL
SYNR=1;
REFDV=1; //pllclock=2*osc*(1+SYNR)/(1+REFDV)=32MHz;
_asm(nop); //If PLL is selected (PLLSEL=1), Bus Clock = PLLCLK / 2=16M
while(!(CRGFLG_LOCK==1))
_asm(nop); //when pll is steady ,then use it;
CLKSEL_PLLSEL =1; //engage PLL to system;
}
void main(void)
{
System_Init();
//setbusclock();
//EnableInterrupts;
RF905_CheckTemp_2();
while(1);
} |
|