OpenEdv-开源电子网

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

从不同的通道读取数据

[复制链接]

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2014-5-22
在线时间
12 小时
发表于 2015-5-28 16:05:44 | 显示全部楼层 |阅读模式
5金钱
我目前使用NRF24L01,手头有3块mini板,现在是想做1收2发的程序。论坛里相关的帖子我也看过了,总感觉不是很对路。我使用原子mini里面配套的例程做修改,但是我不会读取指定通道里的数据。发送和接收的程序我是分开编写的,分别烧入板子里,但是不能收发,我也不知道该怎么描述了,我是新手,麻烦哪位大神帮我看看代码吧。

24l01.c
[mw_shl_code=c,true]const u8 TX_ADDRESS[TX_ADR_WIDTH]={0xe7,0xe7,0xe7,0xe7,0xe7}; //???? const u8 RX_ADDRESS [RX_ADR_WIDTH]={0x01,0x01,0xc2,0xc2,0xc2}; //??0???? const u8 RX_ADDRESS1[RX_ADR_WIDTH]={0x02,0x01,0xc2,0xc2,0xc2}; //??1???? const u8 RX_ADDRESS2[RX_ADR_WIDTH]={0x03}; //??2???? const u8 RX_ADDRESS3[RX_ADR_WIDTH]={0x04}; //??3???? const u8 RX_ADDRESS4[RX_ADR_WIDTH]={0x05}; //??4???? const u8 RX_ADDRESS5[RX_ADR_WIDTH]={0x06}; //??5???? //??????24L01??IO?? void NRF24L01_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE ); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; //???ì???? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; //???ì???? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_SetBits(GPIOC,GPIO_Pin_4); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ; //???????? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4); SPI1_Init(); //??????SPI SPI_Cmd(SPI1, DISABLE); // SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //?è??SPI???ò?ò?????ò??????????:SPI?è???????????ò?????¤ SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //?è??SPI?¤×÷????:?è?????÷SPI SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //?è??SPI???????ó??:SPI·???????8?????á?? SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //???????®???±????????:?±???ü???????? SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; //?????????????????±???? SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS???????????¨NSS?????©?????í???¨????SSI???©???í:????NSS??????SSI?????? SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //?¨???¨?????¤·???????:?¨?????¤·???????256 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //???¨??????????MSB??????LSB??????:??????????MSB?????? SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC?????????à???? SPI_Init(SPI1, &SPI_InitStructure); //?ù??SPI_InitStruct?????¨???????????????èSPIx?????÷ NRF24L01_CE=0; //????24L01 NRF24L01_CSN=1; //SPI???????? } //?ì??24L01??·????? //·?????:0??????;1???§°? u8 NRF24L01_Check(void) { u8 buf[5]={0XA5,0XA5,0XA5,0XA5,0XA5}; u8 i; SPI1_SetSpeed(SPI_BaudRatePrescaler_8); //spi??????9Mhz?¨24L01??×??óSPI?±????10Mhz?© NRF24L01_Write_Buf(NRF_WRITE_REG+TX_ADDR,buf,5);//????5??×????????·. NRF24L01_Read_Buf(TX_ADDR,buf,5); //?????????????· for(i=0;i<5;i++)if(buf!=0XA5)break; if(i!=5)return 1;//?ì??24L01?í?ó return 0; //?ì????24L01 } //SPI???????÷ //reg:???¨?????÷???· //value:???????? u8 NRF24L01_Write_Reg(u8 reg,u8 value) { u8 status; NRF24L01_CSN=0; //????SPI???? status =SPI1_ReadWriteByte(reg);//·????????÷?? SPI1_ReadWriteByte(value); //?????????÷???? NRF24L01_CSN=1; //????SPI???? return(status); //·???×????? } //????SPI?????÷?? //reg:???????????÷ u8 NRF24L01_Read_Reg(u8 reg) { u8 reg_val; NRF24L01_CSN = 0; //????SPI???? SPI1_ReadWriteByte(reg); //·????????÷?? reg_val=SPI1_ReadWriteByte(0XFF);//?????????÷???? NRF24L01_CSN = 1; //????SPI???? return(reg_val); //·???×????? } //?????¨???????????¨?¤???????? //reg:?????÷(????) //*pBuf:???????? //len:?????¤?? //·?????,??????????×????????÷?? u8 NRF24L01_Read_Buf(u8 reg,u8 *pBuf,u8 len) { u8 status,u8_ctr; NRF24L01_CSN = 0; //????SPI???? status=SPI1_ReadWriteByte(reg);//·????????÷??(????),??????×????? for(u8_ctr=0;u8_ctr<len;u8_ctr++)pBuf[u8_ctr]=SPI1_ReadWriteByte(0XFF);//???????? NRF24L01_CSN=1; //??±?SPI???? return status; //·?????????×????? } //?????¨?????????¨?¤???????? //reg:?????÷(????) //*pBuf:???????? //len:?????¤?? //·?????,??????????×????????÷?? u8 NRF24L01_Write_Buf(u8 reg, u8 *pBuf, u8 len) { u8 status,u8_ctr; NRF24L01_CSN = 0; //????SPI???? status = SPI1_ReadWriteByte(reg);//·????????÷??(????),??????×????? for(u8_ctr=0; u8_ctr<len; u8_ctr++)SPI1_ReadWriteByte(*pBuf++); //???????? NRF24L01_CSN = 1; //??±?SPI???? return status; //·?????????×????? } //????NRF24L01·??????????? //txbuf:??·????????×???· //·?????:·????ê??×??? u8 NRF24L01_TxPacket(u8 *txbuf) { u8 sta; SPI1_SetSpeed(SPI_BaudRatePrescaler_8);//spi??????9Mhz?¨24L01??×??óSPI?±????10Mhz?© NRF24L01_CE=0; NRF24L01_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);//????????TX BUF 32??×??? NRF24L01_CE=1;//????·??? while(NRF24L01_IRQ!=0);//????·????ê?? sta=NRF24L01_Read_Reg(STATUS); //????×????????÷???? NRF24L01_Write_Reg(NRF_WRITE_REG+STATUS,sta); //????TX_DS?òMAX_RT????±ê?? if(sta&MAX_TX)//????×??ó??·????? { NRF24L01_Write_Reg(FLUSH_TX,0xff);//????TX FIFO?????÷ return MAX_TX; } if(sta&TX_OK)//·????ê?? { return TX_OK; } return 0xff;//???????ò·????§°? } //????NRF24L01·??????????? //txbuf:??·????????×???· //·?????:0???????ê???????????í?ó?ú?? u8 NRF24L01_RxPacket(u8 *rxbuf) { u8 sta; SPI1_SetSpeed(SPI_BaudRatePrescaler_8); //spi??????9Mhz?¨24L01??×??óSPI?±????10Mhz?© sta=NRF24L01_Read_Reg(STATUS); //????×????????÷???? NRF24L01_Write_Reg(NRF_WRITE_REG+STATUS,sta); //????TX_DS?òMAX_RT????±ê?? if(sta&RX_OK)//?????????? { NRF24L01_Read_Buf(RD_RX_PLOAD,rxbuf,RX_PLOAD_WIDTH);//???????? NRF24L01_Write_Reg(FLUSH_RX,0xff);//????RX FIFO?????÷ return 0; } return 1;//?????????????? } //????????????NRF24L01??RX???? //?è??RX???·,??RX?????í??,????RF????,?¨??????LNA HCURR //?±CE±????ó,??????RX????,???????????????? void NRF24L01_RX_Mode(void) { NRF24L01_CE=0; NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);//??RX???????· NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P1,(u8*)RX_ADDRESS1,RX_ADR_WIDTH);//?RX???? NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P2,(u8*)RX_ADDRESS2,1);//?RX???? NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P3,(u8*)RX_ADDRESS3,1);//?RX???? NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P4,(u8*)RX_ADDRESS4,1);//?RX???? NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P5,(u8*)RX_ADDRESS5,1);//?RX???? NRF24L01_Write_Reg(NRF_WRITE_REG+EN_AA,0x3f); //?????¨??0??×??????? NRF24L01_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x3f); //?????¨??0?????????· NRF24L01_Write_Reg(NRF_WRITE_REG+RF_CH,40); //?è??RF?¨?????? NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//?????¨??0?????§?????í?? NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P1,RX_PLOAD_WIDTH);//????0??????? NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P2,RX_PLOAD_WIDTH);//????0??????? NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P3,RX_PLOAD_WIDTH);//????0??????? NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P4,RX_PLOAD_WIDTH);//????0??????? NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P5,RX_PLOAD_WIDTH);//????0??????? NRF24L01_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f); //?è??TX·???????,0db????,2Mbps,?????ù???????? NRF24L01_Write_Reg(NRF_WRITE_REG+CONFIG, 0x0f); //?????ù±??¤×÷??????????WR_UP,EN_CRC,16BIT_CRC,???????? NRF24L01_CE = 1; //CE????,???????????? } //????????????NRF24L01??TX???? //?è??TX???·,??TX?????í??,?è??RX×????????????·,????TX·???????,????RF????,?¨??????LNA HCURR //PWR_UP,CRC???? //?±CE±????ó,??????RX????,???????????????? //CE?????ó??10us,?ò????·???. void NRF24L01_TX_Mode(void) { NRF24L01_CE=0; NRF24L01_Write_Buf(NRF_WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);//??TX???????· NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH); //?è??TX???????·,?÷??????????ACK NRF24L01_Write_Reg(NRF_WRITE_REG+EN_AA,0x01); //?????¨??0??×??????? NRF24L01_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x01); //?????¨??0?????????· NRF24L01_Write_Reg(NRF_WRITE_REG+SETUP_RETR,0x1a);//?è??×?????·??????±??:500us + 86us;×??ó×?????·?????:10?? NRF24L01_Write_Reg(NRF_WRITE_REG+RF_CH,40); //?è??RF?¨????40 NRF24L01_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f); //?è??TX·???????,0db????,2Mbps,?????ù???????? NRF24L01_Write_Reg(NRF_WRITE_REG+CONFIG,0x0e); //?????ù±??¤×÷??????????WR_UP,EN_CRC,16BIT_CRC,????????,?????ù?????? NRF24L01_CE=1;//CE????,10us?ó????·??? }[/mw_shl_code]


最佳答案

查看完整内容[请看2#楼]

论坛有个网友发过相关的帖子,可以参考下。 :http://www.openedv.com/posts/list/22270.htm
QQ:244403126
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-28 16:05:45 | 显示全部楼层
论坛有个网友发过相关的帖子,可以参考下。
http://www.openedv.com/posts/list/22270.htm
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2014-5-22
在线时间
12 小时
 楼主| 发表于 2015-5-28 16:05:45 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
好吧,呵呵,原子哥也有不会的东西。
QQ:244403126
回复

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2014-5-22
在线时间
12 小时
 楼主| 发表于 2015-6-1 11:36:43 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,那个帖子我也研究了好久,程序好像有些问题,再加上用的是寄存器编程,我比较熟悉库函数,我想用mini板的无线传输例程来修改,做1收2发的程序。我有一个想法,就是2个发射机烧入不同的程序,这样可以分别修改发送的字符串内容以及发射通道,不过在接收机方面,我不知道应该怎么选择这两个不同的通道,因为我需要把两路发射的内容分别保存在变量里,是不是在NRF24L01_RX_Mode里增加一些RX节点地址,比如说如果是两个发射机,在接收模式设置通道的时候,需要增加一路:
NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P1,(u8*)RX_ADDRESS,RX_ADR_WIDTH);   //新增的一个接收机地址

而在发射模式里,NRF24L01_TX_Mode也要增加一路发射通道的地址:
NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P1,(u8*)RX_ADDRESS,RX_ADR_WIDTH);

不知道是否还有别的关键位置需要修改,小弟我比较愚钝,无线传输的任务领导催得比较急,我并不是要找原子哥帮我编写代码,因为个人感觉NRF24L01的资料比较散乱,说明书都有些问题,所以只是把我自己的编程思路跟您说一下,看看是不是这样改。
QQ:244403126
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-6-1 22:22:40 | 显示全部楼层
回复【3楼】sunburn6192:
---------------------------------
这个我没做过多对1
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 18:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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