这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 深海的QuadCopter DIY进程帖-------更新NRF

共22条 2/3 1 2 3 跳转至
助工
2014-04-20 11:25:13     打赏
11楼

keil的逻辑仿真


助工
2014-04-20 11:36:04     打赏
12楼

有个问题,为什么我把文档上传上去了就不见了,都找不到在哪里。。。。


高工
2014-04-29 15:14:28     打赏
13楼
频率这东西,根据具体飞行效果来吧。一般10K左右的,也不是固定的

菜鸟
2014-05-04 17:35:11     打赏
14楼
111111111111111111111

助工
2014-05-04 23:17:02     打赏
15楼
但是感觉电机在10K的时候明显比2K的时候弱了蛮多的

助工
2014-05-04 23:48:17     打赏
16楼

5.无线模块的调试

其实无线模块在51之前就开始调试了,只是一直没什什么进展,所以一直没更新

51出去玩了3天,回来又看了一下,终于在昨晚调试通过了,晒出来得意一下



飞行器上的24L01无线,是分别接到STM32的硬件SPI1和SPI2上的,要注意区分

以前搞过SPI,但是一直没搞过NRF2401

其实NRF2401的程序在网上有很多现成的,移植一下就好

我也是在论坛里搞下来的(如果注意看,估计还能看出是从哪个贴copy下来的),不过还是调试了几天,最后把所有寄存器打印出来,一个个的对比PDF上的说明,才发现有个寄存器没配置好,改了之后就可以了

当然,现在只是实现了互相通信而已,距离最终使用还是有一定的距离的,等后面的模块都写好了再完善吧!!



助工
2014-05-04 23:58:48     打赏
17楼

重点来了!!!

其实发送接收端的代码基本是一致,所以就发遥控的就算了,剩下的就自己移过去吧

——回复可见内容——




助工
2014-05-05 00:00:55     打赏
18楼

乱码了,将就着看吧


#ifndef __24L01_H

#define __24L01_H  
#include <stm32f10x.h> 

#define NRF_CSN_LOW()   GPIO_ResetBits(GPIOC, GPIO_Pin_13)
#define NRF_CSN_HIGH() GPIO_SetBits(GPIOC, GPIO_Pin_13)
#define NRF_CE_LOW()   GPIO_ResetBits(GPIOC, GPIO_Pin_14)
#define NRF_CE_HIGH()   GPIO_SetBits(GPIOC, GPIO_Pin_14)
#define NRF_Read_IRQ() GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_15)
/*******************************************************/  
#define TX_ADDR_WITDH 5//·¢Ë͵ØÖ·¿í¶ÈÉèÖÃΪ5¸ö×Ö½Ú  
#define RX_ADDR_WITDH 5//½ÓÊÕµØÖ·¿í¶ÈÉèÖÃΪ5¸ö×Ö½Ú  
#define TX_DATA_WITDH 4//·¢ËÍÊý¾Ý¿í¶È1¸ö×Ö½Ú  
#define RX_DATA_WITDH 4//½ÓÊÕÊý¾Ý¿í¶È1¸ö×Ö½Ú  
/*******************ÃüÁî¼Ä´æÆ÷***************************/  
#define  R_REGISTER     0x00//¶ÁÈ¡ÅäÖüĴæÆ÷  
#define  W_REGISTER     0x20//дÅäÖüĴæÆ÷  
#define  R_RX_PAYLOAD 0x61//¶ÁÈ¡RXÓÐЧÊý¾Ý  
#define  W_TX_PAYLOAD 0xa0//дTXÓÐЧÊý¾Ý  
#define  FLUSH_TX 0xe1//Çå³ýTXFIFO¼Ä´æÆ÷  
#define  FLUSH_RX 0xe2//Çå³ýRXFIFO¼Ä´æÆ÷  
#define  REUSE_TX_PL    0xe3//ÖØÐÂʹÓÃÉÏÒ»°üÓÐЧÊý¾Ý  
#define  NOP            0xff//¿Õ²Ù×÷  
//////////////////////////////////////////////////////////////////////////////////////////////////////////
#define CONFIG          0x00  //ÅäÖüĴæÆ÷µØÖ·;bit0:1½ÓÊÕģʽ,0·¢Éäģʽ;bit1:µçÑ¡Ôñ;bit2:CRCģʽ;bit3:CRCʹÄÜ;
                              //bit4:ÖжÏMAX_RT(´ïµ½×î´óÖØ·¢´ÎÊýÖжÏ)ʹÄÜ;bit5:ÖжÏTX_DSʹÄÜ;bit6:ÖжÏRX_DRʹÄÜ
#define EN_AA           0x01  //ʹÄÜ×Ô¶¯Ó¦´ð¹¦ÄÜ  bit0~5,¶ÔӦͨµÀ0~5
#define EN_RXADDR       0x02  //½ÓÊÕµØÖ·ÔÊÐí,bit0~5,¶ÔӦͨµÀ0~5
#define SETUP_AW        0x03  //ÉèÖõØÖ·¿í¶È(ËùÓÐÊý¾ÝͨµÀ):bit1,0:00,3×Ö½Ú;01,4×Ö½Ú;02,5×Ö½Ú;
#define SETUP_RETR      0x04  //½¨Á¢×Ô¶¯ÖØ·¢;bit3:0,×Ô¶¯ÖØ·¢¼ÆÊýÆ÷;bit7:4,×Ô¶¯ÖØ·¢ÑÓʱ 250*x+86us
#define RF_CH           0x05  //RFͨµÀ,bit6:0,¹¤×÷ͨµÀƵÂÊ;
#define RF_SETUP        0x06  //RF¼Ä´æÆ÷;bit3:´«ÊäËÙÂÊ(0:1Mbps,1:2Mbps);bit2:1,·¢É书ÂÊ;bit0:µÍÔëÉù·Å´óÆ÷ÔöÒæ
#define STATUS          0x07  //״̬¼Ä´æÆ÷;bit0:TX FIFOÂú±êÖ¾;bit3:1,½ÓÊÕÊý¾ÝͨµÀºÅ(×î´ó:6);bit4,´ïµ½×î¶à´ÎÖØ·¢
                              //bit5:Êý¾Ý·¢ËÍÍê³ÉÖжÏ;bit6:½ÓÊÕÊý¾ÝÖжÏ;
#define MAX_TX   0x10  //´ïµ½×î´ó·¢ËÍ´ÎÊýÖжÏ
#define TX_OK   0x20  //TX·¢ËÍÍê³ÉÖжÏ
#define RX_OK   0x40  //½ÓÊÕµ½Êý¾ÝÖжÏ


#define OBSERVE_TX      0x08  //·¢Ëͼì²â¼Ä´æÆ÷,bit7:4,Êý¾Ý°ü¶ªÊ§¼ÆÊýÆ÷;bit3:0,ÖØ·¢¼ÆÊýÆ÷
#define CD              0x09  //Ôز¨¼ì²â¼Ä´æÆ÷,bit0,Ôز¨¼ì²â;
#define RX_ADDR_P0      0x0A  //Êý¾ÝͨµÀ0½ÓÊÕµØÖ·,×î´ó³¤¶È5¸ö×Ö½Ú,µÍ×Ö½ÚÔÚÇ°
#define RX_ADDR_P1      0x0B  //Êý¾ÝͨµÀ1½ÓÊÕµØÖ·,×î´ó³¤¶È5¸ö×Ö½Ú,µÍ×Ö½ÚÔÚÇ°
#define RX_ADDR_P2      0x0C  //Êý¾ÝͨµÀ2½ÓÊÕµØÖ·,×îµÍ×Ö½Ú¿ÉÉèÖÃ,¸ß×Ö½Ú,±ØÐëͬRX_ADDR_P1[39:8]ÏàµÈ;
#define RX_ADDR_P3      0x0D  //Êý¾ÝͨµÀ3½ÓÊÕµØÖ·,×îµÍ×Ö½Ú¿ÉÉèÖÃ,¸ß×Ö½Ú,±ØÐëͬRX_ADDR_P1[39:8]ÏàµÈ;
#define RX_ADDR_P4      0x0E  //Êý¾ÝͨµÀ4½ÓÊÕµØÖ·,×îµÍ×Ö½Ú¿ÉÉèÖÃ,¸ß×Ö½Ú,±ØÐëͬRX_ADDR_P1[39:8]ÏàµÈ;
#define RX_ADDR_P5      0x0F  //Êý¾ÝͨµÀ5½ÓÊÕµØÖ·,×îµÍ×Ö½Ú¿ÉÉèÖÃ,¸ß×Ö½Ú,±ØÐëͬRX_ADDR_P1[39:8]ÏàµÈ;
#define TX_ADDR         0x10  //·¢Ë͵ØÖ·(µÍ×Ö½ÚÔÚÇ°),ShockBurstTMģʽÏÂ,RX_ADDR_P0Óë´ËµØÖ·ÏàµÈ
#define RX_PW_P0        0x11  //½ÓÊÕÊý¾ÝͨµÀ0ÓÐЧÊý¾Ý¿í¶È(1~32×Ö½Ú),ÉèÖÃΪ0Ôò·Ç·¨
#define RX_PW_P1        0x12  //½ÓÊÕÊý¾ÝͨµÀ1ÓÐЧÊý¾Ý¿í¶È(1~32×Ö½Ú),ÉèÖÃΪ0Ôò·Ç·¨
#define RX_PW_P2        0x13  //½ÓÊÕÊý¾ÝͨµÀ2ÓÐЧÊý¾Ý¿í¶È(1~32×Ö½Ú),ÉèÖÃΪ0Ôò·Ç·¨
#define RX_PW_P3        0x14  //½ÓÊÕÊý¾ÝͨµÀ3ÓÐЧÊý¾Ý¿í¶È(1~32×Ö½Ú),ÉèÖÃΪ0Ôò·Ç·¨
#define RX_PW_P4        0x15  //½ÓÊÕÊý¾ÝͨµÀ4ÓÐЧÊý¾Ý¿í¶È(1~32×Ö½Ú),ÉèÖÃΪ0Ôò·Ç·¨
#define RX_PW_P5        0x16  //½ÓÊÕÊý¾ÝͨµÀ5ÓÐЧÊý¾Ý¿í¶È(1~32×Ö½Ú),ÉèÖÃΪ0Ôò·Ç·¨
#define FIFO_STATUS     0x17  //FIFO״̬¼Ä´æÆ÷;bit0,RX FIFO¼Ä´æÆ÷¿Õ±êÖ¾;bit1,RX FIFOÂú±êÖ¾;bit2,3,±£Áô
                              //bit4,TX FIFO¿Õ±êÖ¾;bit5,TX FIFOÂú±êÖ¾;bit6,1,Ñ­»··¢ËÍÉÏÒ»Êý¾Ý°ü.0,²»Ñ­»·;
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//24L01²Ù×÷Ïß
#define NRF24L01_CE   PAout(4) //24L01ƬѡÐźÅ
#define NRF24L01_CSN  PCout(4) //SPIƬѡÐźŠ  
#define NRF24L01_IRQ  PCin(5)  //IRQÖ÷»úÊý¾ÝÊäÈë
//24L01·¢ËͽÓÊÕÊý¾Ý¿í¶È¶¨Òå
#define TX_ADR_WIDTH    5   //5×ֽڵĵØÖ·¿í¶È
#define RX_ADR_WIDTH    5   //5×ֽڵĵØÖ·¿í¶È
#define TX_PLOAD_WIDTH  32  //20×Ö½ÚµÄÓû§Êý¾Ý¿í¶È
#define RX_PLOAD_WIDTH  32  //20×Ö½ÚµÄÓû§Êý¾Ý¿í¶È     


void NRF24L01_Init(void);//³õʼ»¯
u8 SPI_RW_Byte(SPI_TypeDef* SPIx,unsigned char Byte);  
u8 SPI_NRF_Write_buf(SPI_TypeDef* SPIx,char CMD,unsigned char* WBuff,unsigned char ByteNUM);
u8 SPI_NRF_Read_buf(SPI_TypeDef* SPIx,char CMD,unsigned char* RBuff,unsigned char ByteNUM);
void NRF24L01_RX_Mode(void);//ÅäÖÃΪ½ÓÊÕģʽ
void NRF24L01_TX_Mode(void);//ÅäÖÃΪ·¢ËÍģʽ
ErrorStatus NRF24L01_TxPacket(u8* TBuff,u8 ByteNUM);//·¢ËÍÊý¾Ý
ErrorStatus NRF24L01_RxPacket(u8* RBuff); //½ÓÊÕÒ»¸ö°üµÄÊý¾Ý
uint8_t NRF24L01_Check(void);//¼ì²é24L01ÊÇ·ñ´æÔÚ
u8 SPI_NRF_WE(SPI_TypeDef* SPIx,char CMD,unsigned char WBuff);
void read_allreg(void);
#endif


助工
2014-05-05 00:04:15     打赏
19楼

最后再发个测试用的小函数

——回复可见内容——


工程师
2015-03-30 13:52:58     打赏
20楼

瞄一下 


共22条 2/3 1 2 3 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]