OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3806|回复: 6

原子哥请看 51和STM32 24l01通信

[复制链接]

3

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2013-7-8
在线时间
0 小时
发表于 2013-7-11 20:32:01 | 显示全部楼层 |阅读模式
<p>                                         
                                                                            在学习了原子哥的2401 和论坛已经有的相关资料后 ,自己修改了一部分,可是&nbsp;一直无法通信。<br />
</p>
<p>STM32 做接受,用的是 战舰的例程。<br />
</p>
<p>51做发送&nbsp; 发收地址都改了 和 战舰一样<br />
</p>
<p>发送端配置如下<br />
void TX_Mode(void)<br />
{<br />
&nbsp;&nbsp;&nbsp; CE = 0;<br />
&nbsp;//SPI_WR_Reg(WRITE_REG + CONFIG, 0x02);&nbsp;&nbsp; //0x0E&nbsp;&nbsp; // IRQ收发完成中断响应,16位CRC,主发送<br />
&nbsp;<br />
&nbsp;SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);&nbsp;&nbsp;&nbsp; // 写本地地址&nbsp;<br />
&nbsp;SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址<br />
&nbsp;<br />
&nbsp;SPI_WR_Reg(WRITE_REG + EN_AA, 0x01);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; 频道0自动&nbsp;ACK应答允许&nbsp;<br />
&nbsp;SPI_WR_Reg(WRITE_REG + EN_RXADDR,0x01);&nbsp; //&nbsp; 允许接收地址只有频道0,如果需要多频道可以参考Page21&nbsp; <br />
&nbsp;SPI_WR_Reg(WRITE_REG + SETUP_RETR, 0x1a); // 设置自动重发时间和次数:500us + 86us, 10 retrans...<br />
&nbsp;SPI_WR_Reg(WRITE_REG + RF_CH, 40);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; 设置信道工作为2.4GHZ,收发必须一致<br />
&nbsp;SPI_WR_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为32字节<br />
&nbsp;SPI_WR_Reg(WRITE_REG + RF_SETUP, 0x0F);&nbsp;&nbsp; &nbsp;&nbsp;//设置发射速率为2MHZ,发射功率为最大值0dB<br />
&nbsp;SPI_WR_Reg(WRITE_REG + CONFIG, 0x0E);<br />
&nbsp;&nbsp;&nbsp; CE = 1;<br />
}&nbsp;&nbsp;&nbsp;<br />
</p>
<p><br />
&nbsp;</p>
<p><br />
&nbsp;</p>
<p>&nbsp;</p>

实验32 无线通信实验 - 双.zip

2.94 MB, 下载次数: 103

stm32与51实时双向通信(51用).zip

66.1 KB, 下载次数: 194

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2013-7-8
在线时间
0 小时
 楼主| 发表于 2013-7-11 20:34:58 | 显示全部楼层
我已经看过&nbsp;以下两个&nbsp;论坛的例子了&nbsp;&nbsp;
<br>http://www.openedv.com/posts/list/198.htm#38373&nbsp;
<br>http://www.openedv.com/posts/list/7125.htm#35976
<br>请原子哥&nbsp;
<br>直接看看我的例程吧
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-7-12 00:18:13 | 显示全部楼层
回复【2楼】lijungei:
<br>---------------------------------
<br>我看了也没用啊。
<br>没你的硬件,怎么测试?
<br>我拿我的例程测试好好的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2013-7-8
在线时间
0 小时
 楼主| 发表于 2013-7-12 08:46:06 | 显示全部楼层
回复【3楼】正点原子:
<br>---------------------------------
<br>我就是想问&nbsp;
<br>两个2401配对的要求
<br>是不是要求
<br>1,发送接收地址一样
<br>2,TX_Mode&nbsp;&nbsp;&nbsp;RX_Mode匹配
<br>
<br>你看看我的TX_Mode&nbsp;&nbsp;&nbsp;RX_Mode对不对
<br>发送端配置如下
<br>void&nbsp;TX_Mode(void)
<br>&nbsp;{
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CE&nbsp;=&nbsp;0;
<br>&nbsp;&nbsp;//SPI_WR_Reg(WRITE_REG&nbsp;+&nbsp;CONFIG,&nbsp;0x02);&nbsp;&nbsp;&nbsp;//0x0E&nbsp;&nbsp;&nbsp;//&nbsp;IRQ收发完成中断响应,16位CRC,主发送
<br>&nbsp;
<br>&nbsp;&nbsp;SPI_Write_Buf(WRITE_REG&nbsp;+&nbsp;TX_ADDR,&nbsp;TX_ADDRESS,&nbsp;TX_ADR_WIDTH);&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;写本地地址&nbsp;
<br>&nbsp;&nbsp;SPI_Write_Buf(WRITE_REG&nbsp;+&nbsp;RX_ADDR_P0,&nbsp;RX_ADDRESS,&nbsp;RX_ADR_WIDTH);&nbsp;//&nbsp;写接收端地址
<br>&nbsp;
<br>&nbsp;&nbsp;SPI_WR_Reg(WRITE_REG&nbsp;+&nbsp;EN_AA,&nbsp;0x01);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;频道0自动&nbsp;ACK应答允许&nbsp;
<br>&nbsp;&nbsp;SPI_WR_Reg(WRITE_REG&nbsp;+&nbsp;EN_RXADDR,0x01);&nbsp;&nbsp;//&nbsp;&nbsp;允许接收地址只有频道0,如果需要多频道可以参考Page21&nbsp;&nbsp;
<br>&nbsp;&nbsp;SPI_WR_Reg(WRITE_REG&nbsp;+&nbsp;SETUP_RETR,&nbsp;0x1a);&nbsp;//&nbsp;设置自动重发时间和次数:500us&nbsp;+&nbsp;86us,&nbsp;10&nbsp;retrans...
<br>&nbsp;&nbsp;SPI_WR_Reg(WRITE_REG&nbsp;+&nbsp;RF_CH,&nbsp;40);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;设置信道工作为2.4GHZ,收发必须一致
<br>&nbsp;SPI_WR_Reg(WRITE_REG&nbsp;+&nbsp;RX_PW_P0,&nbsp;RX_PLOAD_WIDTH);&nbsp;//设置接收数据长度,本次设置为32字节
<br>&nbsp;SPI_WR_Reg(WRITE_REG&nbsp;+&nbsp;RF_SETUP,&nbsp;0x0F);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置发射速率为2MHZ,发射功率为最大值0dB
<br>&nbsp;&nbsp;SPI_WR_Reg(WRITE_REG&nbsp;+&nbsp;CONFIG,&nbsp;0x0E);
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CE&nbsp;=&nbsp;1;
<br>&nbsp;}&nbsp;&nbsp;
<br>
<br>void&nbsp;NRF24L01_RX_Mode(void)
<br>{
<br>        NRF24L01_CE=0;        &nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Buf(WRITE_REG_NRF+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);//写RX节点地址
<br>        &nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG_NRF+EN_AA,0x01);&nbsp;&nbsp;&nbsp;&nbsp;//使能通道0的自动应答&nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG_NRF+EN_RXADDR,0x01);//使能通道0的接收地址&nbsp;&nbsp;        &nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG_NRF+RF_CH,40);        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置RF通信频率                &nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG_NRF+RX_PW_P0,RX_PLOAD_WIDTH);//选择通道0的有效数据宽度&nbsp;        &nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG_NRF+RF_SETUP,0x0f);//设置TX发射参数,0db增益,2Mbps,低噪声增益开启&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_Write_Reg(WRITE_REG_NRF+CONFIG,&nbsp;0x0f);//配置基本工作模式的参数WR_UP,EN_CRC,16BIT_CRC,接收模式&nbsp;
<br>&nbsp;&nbsp;        NRF24L01_CE&nbsp;=&nbsp;1;&nbsp;//CE为高,进入接收模式&nbsp;
<br>}
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-7-12 10:17:34 | 显示全部楼层
当然是了
<br>地址不配,不能通信.
<br>两个必须一个RX模式,一个TX模式.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

54

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2013-7-8
在线时间
0 小时
 楼主| 发表于 2013-7-12 10:35:14 | 显示全部楼层
回复【5楼】正点原子:
<br>---------------------------------
<br>发送与接收地址我都配成一样的&nbsp;&nbsp;&nbsp;用两个STM32测试过没问题
<br>就是先让你看看&nbsp;我的51的TX模式&nbsp;&nbsp;和32的RX模式配的对不对
<br>
<br>51发送端配置如下&nbsp;
<br>void&nbsp;TX_Mode(void)&nbsp;
<br>&nbsp;{&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CE&nbsp;=&nbsp;0;&nbsp;
<br>&nbsp;&nbsp;//SPI_WR_Reg(WRITE_REG&nbsp;+&nbsp;CONFIG,&nbsp;0x02);&nbsp;&nbsp;&nbsp;//0x0E&nbsp;&nbsp;&nbsp;//&nbsp;IRQ收发完成中断响应,16位CRC,主发送&nbsp;
<br>&nbsp;&nbsp;
<br>&nbsp;&nbsp;SPI_Write_Buf(WRITE_REG&nbsp;+&nbsp;TX_ADDR,&nbsp;TX_ADDRESS,&nbsp;TX_ADR_WIDTH);&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;写本地地址&nbsp;&nbsp;
<br>&nbsp;&nbsp;SPI_Write_Buf(WRITE_REG&nbsp;+&nbsp;RX_ADDR_P0,&nbsp;RX_ADDRESS,&nbsp;RX_ADR_WIDTH);&nbsp;//&nbsp;写接收端地址&nbsp;
<br>&nbsp;&nbsp;
<br>&nbsp;&nbsp;SPI_WR_Reg(WRITE_REG&nbsp;+&nbsp;EN_AA,&nbsp;0x01);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;频道0自动&nbsp;ACK应答允许&nbsp;&nbsp;
<br>&nbsp;&nbsp;SPI_WR_Reg(WRITE_REG&nbsp;+&nbsp;EN_RXADDR,0x01);&nbsp;&nbsp;//&nbsp;&nbsp;允许接收地址只有频道0,如果需要多频道可以参考Page21&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;SPI_WR_Reg(WRITE_REG&nbsp;+&nbsp;SETUP_RETR,&nbsp;0x1a);&nbsp;//&nbsp;设置自动重发时间和次数:500us&nbsp;+&nbsp;86us,&nbsp;10&nbsp;retrans...&nbsp;
<br>&nbsp;&nbsp;SPI_WR_Reg(WRITE_REG&nbsp;+&nbsp;RF_CH,&nbsp;40);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;设置信道工作为2.4GHZ,收发必须一致&nbsp;
<br>&nbsp;SPI_WR_Reg(WRITE_REG&nbsp;+&nbsp;RX_PW_P0,&nbsp;RX_PLOAD_WIDTH);&nbsp;//设置接收数据长度,本次设置为32字节&nbsp;
<br>&nbsp;SPI_WR_Reg(WRITE_REG&nbsp;+&nbsp;RF_SETUP,&nbsp;0x0F);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置发射速率为2MHZ,发射功率为最大值0dB&nbsp;
<br>&nbsp;&nbsp;SPI_WR_Reg(WRITE_REG&nbsp;+&nbsp;CONFIG,&nbsp;0x0E);&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CE&nbsp;=&nbsp;1;&nbsp;
<br>&nbsp;}&nbsp;&nbsp;&nbsp;
<br>
<br>
<br>
<br>32接受端配置如下&nbsp;
<br>void&nbsp;NRF24L01_RX_Mode(void)&nbsp;
<br>{&nbsp;
<br>        NRF24L01_CE=0;&nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;NRF24L01_Write_Buf(WRITE_REG_NRF+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);//写RX节点地址&nbsp;
<br>&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;NRF24L01_Write_Reg(WRITE_REG_NRF+EN_AA,0x01);&nbsp;&nbsp;&nbsp;&nbsp;//使能通道0的自动应答&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;NRF24L01_Write_Reg(WRITE_REG_NRF+EN_RXADDR,0x01);//使能通道0的接收地址&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;NRF24L01_Write_Reg(WRITE_REG_NRF+RF_CH,40);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置RF通信频率&nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;NRF24L01_Write_Reg(WRITE_REG_NRF+RX_PW_P0,RX_PLOAD_WIDTH);//选择通道0的有效数据宽度&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;NRF24L01_Write_Reg(WRITE_REG_NRF+RF_SETUP,0x0f);//设置TX发射参数,0db增益,2Mbps,低噪声增益开启&nbsp;&nbsp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;NRF24L01_Write_Reg(WRITE_REG_NRF+CONFIG,&nbsp;0x0f);//配置基本工作模式的参数WR_UP,EN_CRC,16BIT_CRC,接收模式&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;NRF24L01_CE&nbsp;=&nbsp;1;&nbsp;//CE为高,进入接收模式&nbsp;&nbsp;
<br>}
回复 支持 反对

使用道具 举报

47

主题

255

帖子

1

精华

高级会员

Rank: 4

积分
641
金钱
641
注册时间
2012-11-3
在线时间
6 小时
发表于 2013-7-12 22:24:30 | 显示全部楼层
回复【6楼】lijungei:
<br>---------------------------------
<br>既然你用&nbsp;&nbsp;stm32&nbsp;&nbsp;测试能通信&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;那就是51那边程序的问题了,你先检查一下用51能不能读写寄存器。有可能你51模拟的spi有问题呢。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 19:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表