微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > 飞思卡尔单片机与rf905的通信spi通信问题

飞思卡尔单片机与rf905的通信spi通信问题

时间:10-02 整理:3721RD 点击:

我是一个新人,对飞思卡尔单片机使用的不是很熟,最近在使用飞思卡尔128单片机和nrf905之间做一个无线传输的小协议,选择飞思卡尔为主机模式,并且作为接收终端,用于接收我的发送数据。我的发送端是用51做到已经好使了,没有问题了(发送端暂且不用考虑是好使的)。那我的问题来了,就是接收端接收不到数据,仿真时,spi只是一打开就迅速中断停止了。查看状态寄存器的SPIF位根本没有改变一直是零停在那里。所以我判断这就是症结所在,导致了MCU读取nrf905的接收数据失败了。

查找了好久,资料阅读了好多也没有发现问题的解决方案。听说这里的高手如云,热心的人如云。我相信,我有信心相信我的问题能很快得到高手的指点的。解决我的问题。

{
//(void)SPI0SR;
SPI0DRL = byte;
Delay(2);
while(!(SPI0SR_SPTEF));//wait until the data is all sent off

}

/*****************************************************************************/
//function SpiRead();
/*****************************************************************************/
uchar SpiRead(void)
{

while(!(SPI0SR_SPIF)); //程序就是卡在这里了,如果屏蔽掉改行代码,spi的数据时运行的状态
Delay(2);
return SPI0DRL; // Return function parameter
}

接收905数据包的函数

void RxPacket(void)
{
uchar i;
TRX_CE=0; // Set nRF905 in standby mode
CSN=0; // Spi enable for write a spi command
SpiWrite(RRP);
for (i=0;i<4;i++) // Read payload comma
{
RxBuf=SpiRead(); // Read data and save to buffer
}
CSN=1; // Disable spi
while(DR||AM);

Delay(2);
TRX_CE=1;


}

真心求解 希望得到各位的帮助 多谢!

我没有说清楚吧看来 补充:单片机工作的晶振是16Mhz的,905采用从机工作方式,采用三线制spi连接方式。因为只有一个905从机。
现在问题的主要原因是读取数据没有成功,while(!(SPI0SR_SPIF));这个代码总是运行不过去,原因是spif状态位没有改变,这个我在单步调试的时候已经验证过了。
我想知道我的接收端怎样才能使spif位正常,想请用过的好心人解答一下。

大虾们呀 你们在哪里呀 “青青子衿,悠悠我心”我的这个问题就这么的沉了吗。有没有做过的,来解答或是指导亦或是交流一下都很好的呀。 看看这是怎么回事 程序总是调试的不好。

我用飞思卡尔发送.也还没成...纠结中

这个可以呀, void SpiWrite(uchar byte)
{
//(void)SPI0SR;
SPI0DRL = byte;
Delay(2);
while(!(SPI0SR_SPTEF));//wait until the data is all sent off

}

这个发送的程序我是在12日早上调试好的,要加上个延时905才能够处理好,跟波特率没有关系,只要不超过100K就可以了,我想照着这样做就没有问题了,还有问题再联系。

看看SPI的模式配置,有4种,这个模式别错了,错了肯定是不行

这个SPI的模式肯定是没有错的了,因为发送的时候spi是好用的而且已经成功了,所以呀,接收程序应该是read函数有问题的了,但是原因到现在还是没有发现,逼得我们开始尝试用模拟的试试,但是我还没有放弃对SPI接收方式的调试过程,我还要坚持一下看看。希望各位大虾支持一哈

我也是一样的问题…纠结了一个多月了…就是接收端接受不到…甚至连载波都检测不到…

楼主要是成功了求指教…扣扣:252076178

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top