跪求大神帮忙啊!!我用STC12C2052AD单片机控制无线模块nordic 24l011,感觉我的程序,和硬件都没问题,为什么不行

跪求大神帮忙啊!!我用STC12C2052AD单片机控制无线模块nordic 24l01,感觉我的程序,和硬件都没问题,为什么不行 - 叫阿莫西中心 - 中国网络使得骄傲马戏中心!
跪求大神帮忙啊!!我用STC12C2052AD单片机控制无线模块nordic 24l01,感觉我的程序,和硬件都没问题,为什么不行
24L01 里面包含24LO1无线通信模块 单片机驱动程序 STM32用 C语言版 ARM-PowerPC-ColdFire-MIPS 微处理器开发 218万源代码下载-
&文件名称: 24L01& & [
& & & & &&]
&&所属分类:
&&开发工具: Visual C++
&&文件大小: 6 KB
&&上传时间:
&&下载次数: 41
&&提 供 者:
&详细说明:里面包含24LO1无线通信模块 单片机驱动程序 STM32用 C语言版-Wireless communication module which contains 24LO1 driver STM32 microcontroller using C language version
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&24L01\24l01.c&&.....\24l01.h&&24L01
&[]:纯粹是垃圾&[]:文件有密码,不知道密码
&近期下载过的用户:
&相关搜索:
&输入关键字,在本站218万海量源码库中尽情搜索:
&[] - stm32 SPI口控制24l01通信代码,分为接收和发送两个部分,半双工通信
&[] - 本程序是基于stm32F103RBT6单片机nRF24l01无线通信程序,希望对大家有用。
&[] - 基于stm32的TFT示波器
ADC采集,DMA传输,实现在TFT上的波形显示
&[] - stm32F10xxx+USART串口应用实例STM32F10xxx+USART应用实例
&[] - 本程序是基于stm32F103RBT6单片机nRF24l01无线通信程序,希望对大家有用。
&[] - stm32下无线模块NRF2401接收程序
STM32_wireless.c
STM32_wireless.h
&[] - stm32
ucos 移植例程
有2个任务 独立运行
&[] - NRF24l01通过stm32单片机进行通信的收发程序,本人测试通过,绝对可用
&[] - 无线数传模块C51源码,nrf905、24l01、等非常有用的开发实例资料。
&[] - stm32 SPI口控制24l01通信代码,分为接收和发送两个部分,半双工通信24l01_send_and_receive 基于51单片机的无线模块 的接收和发送C语言程序,有详细的中文注释 SCM 开发 182万源代码下载-
&文件名称: 24l01_send_and_receive
& & & & &&]
&&所属分类:
&&开发工具: Visual C++
&&文件大小: 6 KB
&&上传时间:
&&下载次数: 75
&&提 供 者:
&详细说明:基于51单片机的无线模块24l01的接收和发送C语言程序,有详细的中文注释-Microcontroller-based wireless modules 24l01 51 receive and transmit C language program, with detailed notes in Chinese
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&无线_24l01_接收C语言程序.txt&&无线_24l01_发送C语言程序.docx.txt
&[]:纯粹是垃圾&[]:纯粹是垃圾
&近期下载过的用户:
&相关搜索:
&输入关键字,在本站182万海量源码库中尽情搜索:
&[] - *****本人收集了N年的nRF2401/&font color=#CC/905/9e5/401系列等/中文应用手册,芯片选型手册,(中-英双份),51的nRF24L01的源代码等,无线数传的天线设计等,本资料最大特点,就是中文和英文双份资料,以供不懂英文的电子友查阅参考,是开发无线数传的不好多得的资料,好资料不能独享
&[] - 51与NRF &font color=#CC
&[] - 源程序射频芯片nRF&font color=#CC + C 的驱动程序以及一个简单的收发控制协议
&[] - 射频芯片nRF&font color=#CC + C 的驱动程序以及一个简单的收发控制协议
&[] - 这是基于51单片机的NRF&font color=#CC的按键和led灯测试程序,代码我已经验证过。 供大家学习用,只要修改下代码就可以应用到其他的单片机。这个程序是一个半双工的通信模式.含有电路原理图
&[] - 很详细的关于智能家电与智能家居的资料,看后一定收获不少
&[] - nrf&font color=#CC无线显示的模块 含有接受和发送的程序 调好了已经
&[] - &font color=#CC开发资料,发送接收程序,有用的东西
&[] - 此资料包含51、stm的&font color=#CC的源代码,非常好用
&[] - NanoStack is a 6lowpan IPv6 + IEEE 802.15.4 protocol stack, enabling wireless embedded and sensor networking. The goal is to help 6lowpan spread globa求C语言程序 “基于单片机的遥控小车 使用的是24L01无线模块”_百度知道
求C语言程序 “基于单片机的遥控小车 使用的是24L01无线模块”
哪位大神给个C语言程序?用的是STC89C52单片机,L298驱动模块,24L01无线模块,左中右三个红外避障模块,左中右三个循迹模块,一个测模块,一个1602显示车速和里程。我在网上找了一个程序不会改啊!!!!
我有更好的答案
按默认排序
我有整套的发射控制小车前进后退,只是没有1602部分,这部分你要自己加,需要吗?
就算程序给你了你也不会改,不如用成品
基础太差的话建议买成品。
其他类似问题
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁注册时间: 17:55
论坛积分:9
来自: 北京
是这样的,一端用vs1053录音,然后不储存,录到什么直接用2.4G模块发送出去
另一端接收并解码就好了。
//新录音模式
void Record_init(void)
// Kick vs10xx into action!
& VS_Soft_Reset();
& VS_WR_Cmd(SPI_CLOCKF,0x0000); & //XTAL(12.288M) = 0X0000; &2*12.288M = 0X4430;
& VS_WR_Cmd(SPI_BASS, 0x0000); & & //
& VS_WR_Cmd(SPI_MODE, 0x1800); & &// MIC ,录音激活
& VS_WR_Cmd(SPI_AICTRL0, 0x0006); // 分配值= 0,则代表默认为12 /* Div -& 12=8kHz 8=12kHz 6=16kHz */
& // 采样率8000; *6 = 8000
& VS_WR_Cmd(SPI_AICTRL1, 0x0000); // 自动增益
& VS_WR_Cmd(SPI_AICTRL2, 0x1000); // 自动增益的最大值
//SPI_AICTRL3
//0BXXXX, & & & &X 1 1 0;
//SPI_AICTRL3.2 & & &0 ---IMA ADPCM &; 1 ---线性 ADPCM
//SPI_AICTRL3.1&0 & &0 ---- 联合立体声 &00&
// & & & & & & & & & 1 ---- 双声道 & & &01
// & & & & & & & & & 2 ---- 左通道 & & &10
// & & & & & & & & & 3 ---- 右通道 & & &11
& VS_WR_Cmd(SPI_AICTRL3, 0x0005); // 线性ADPCM 双声道
& VS_WR_Cmd(SPI_MODE, 0x3844); & &// MIC ,线路激活0X3804
//delay_ms(10); &&
// Vs1053WriteRegister(SPI_CLOCKF,0x98,0x00); &&
//Delay_ms(100); ; while(!DREQ);
& //write 1053 patch
VS_WR_Cmd(SPI_WRAMADDR, 0x8010); // 0X8010
VS_WR_Cmd(SPI_WRAM, 0x3E12); & & &// 0X3E12
VS_WR_Cmd(SPI_WRAM, 0xB817);//0XB817
VS_WR_Cmd(SPI_WRAM, 0x3E14);//0X3E14
VS_WR_Cmd(SPI_WRAM, 0xF812);//0XF812
VS_WR_Cmd(SPI_WRAM, 0x3E01);//0X3E01
VS_WR_Cmd(SPI_WRAM, 0xB811);//0XB811
VS_WR_Cmd(SPI_WRAM, 0x0007);//0X0007
VS_WR_Cmd(SPI_WRAM, 0x9717);//0X9717
VS_WR_Cmd(SPI_WRAM, 0x0020);//0X0020
VS_WR_Cmd(SPI_WRAM, 0xFFD2);//0XFFD2
VS_WR_Cmd(SPI_WRAM, 0x0030);//0X0030
VS_WR_Cmd(SPI_WRAM, 0x11D1);//0X11D1
VS_WR_Cmd(SPI_WRAM, 0x3111);//0X3111
VS_WR_Cmd(SPI_WRAM, 0x8024);//0X8024
VS_WR_Cmd(SPI_WRAM, 0x3704);//0X3704
VS_WR_Cmd(SPI_WRAM, 0xC024);//0XC024
VS_WR_Cmd(SPI_WRAM, 0x3B81);//0X3B81
VS_WR_Cmd(SPI_WRAM, 0x8024);//0X8024
VS_WR_Cmd(SPI_WRAM, 0x3101);//0X3101
VS_WR_Cmd(SPI_WRAM, 0x8024);//0X8024
VS_WR_Cmd(SPI_WRAM, 0x3B81);//0X3B81
VS_WR_Cmd(SPI_WRAM, 0x8024);//0X8024
VS_WR_Cmd(SPI_WRAM, 0x3F04);//0X3F04
VS_WR_Cmd(SPI_WRAM, 0xC024);//0XC024
VS_WR_Cmd(SPI_WRAM, 0x2808);//0X2808
VS_WR_Cmd(SPI_WRAM, 0x4800);//0X4800
VS_WR_Cmd(SPI_WRAM, 0x36F1);//0X36F1
VS_WR_Cmd(SPI_WRAM, 0x9811);//0X9811
VS_WR_Cmd(SPI_WRAMADDR, 0x8028);//0X8028
VS_WR_Cmd(SPI_WRAM, 0x2A00);//0X2A00
VS_WR_Cmd(SPI_WRAM, 0x040E);//0X040E
//录音代码
void Rec_Mode(u16 agc)&
//如果是IMA ADPCM,采样率计算公式如下:&
& & //采样率=CLKI/256*d;&
//假设d=0,并2倍频,外部晶振为12.288M.那么Fc=(2*6*6=16Khz&
//如果是线性PCM,采样率直接就写采样值 &
& VS_WR_Cmd(SPI_BASS,0x0000); & &&
& VS_WR_Cmd(SPI_AICTRL0,16000); //设置采样率,设置为8Khz&
& VS_WR_Cmd(SPI_AICTRL1,agc); //设置增益,0,自动增益.1024相当于1倍,512相当于0.5倍,最大值65535=64倍&
& VS_WR_Cmd(SPI_AICTRL2,0); //设置增益最大值,0,代表最大值65536=64X&
& VS_WR_Cmd(SPI_AICTRL3,4); //左通道(MIC单声道输入)&
& VS_WR_Cmd(SPI_CLOCKF,0X2000); //设置VS10XX的时钟,MULT:2倍频;ADD:不允许;CLK:12.288Mhz&
& VS_WR_Cmd(SPI_MODE,0x3804); //MIC,录音激活 & &&
& delay_ms(5); //等待至少1.35ms &
// &VS_Load_Patch((u16*)wav_plugin,40);//VS1053的WAV录音需要plugin&
尝试了使用两种录音模式,&有plugin的录音效果明显要好(听输出的回音)
但是现在另一端接收到的都是杂音。。不知道是不是RIFF头文件不配套的问题。我找不到配套的只能搜到plugin或RIFF
现在已知是模块都是好的,2.4G是可以发送接收的,可以正常播放mp3和wav。
发送端就是读256字节发送一次,接收端先自动载入RIFF头,然后接收到直接spi再给1053。
目前还是菜鸟,待飞
注册时间: 10:41
回复数: 51773
主题数: 369
酷贴数:27
论坛积分:55580
来自: 湖南
回复【楼主位】&wxm2280&:
---------------------------------
应该是RIFF头的问题,你的文件大小设置为多少?
因为你的录音文件没有结束,事先并不知道文件大小是多少,默认设置是0的,等到录音结束再写入文件总长度.但是你现在这个,明显是还没写入总长度,就要开始播放,建议你可以设置这个文件大小为一个非常大的数,这样测试下,看看能不能播放?
我的淘宝小店:
注册时间: 09:26
回复数: 14
论坛积分:20
来自: 广东
回复【楼主位】&wxm2280&:
---------------------------------
加我的QQ&&免费技术支持
注册时间: 17:55
论坛积分:9
来自: 北京
回复【1楼】 正点原子 :
---------------------------------
&谢谢原子,隔了一段时间才继续实验
我下载了一段vs1003的录音,把头文件挖出来,然后数据段随便找一段发射出去,接收端都可以接到并且正常播放了
感觉上还是发生那边有问题,现在已经打开录音模式听到“回音”了,原子能否分享一下录音函数和录音文件我尝试一下?
TX_Mode();&
& &w = VS_RD_Reg(SPI_HDAT1);
& & & & & & & } while (w & 256 || w &= 896); /* wait until 512 bytes available */
& & & &t = 0;
& & & & while (t & 256)&
& & & & w = VS_RD_Reg(SPI_HDAT0);
& & & & buf[t++] = w&&8;
& & & & buf[t++] = (u8)w;
& & & & & }
for(j=0;j&125;j+=32)
& for(t=0;t&32;t++)
& & & & & & &tmp_buf[t] =buf[t+j];
& & & & & & }
& & & while(NRF24L01_TxPacket(tmp_buf)!=TX_OK)LED4=0;
---------------
这是我的发送模式的代码
目前还是菜鸟,待飞
注册时间: 10:41
回复数: 51773
主题数: 369
酷贴数:27
论坛积分:55580
来自: 湖南
//进入ADPCM&录音模式
//agc:0,自动增益.1024相当于1倍,512相当于0.5倍,最大值65535=64倍
&&
void&recoder_enter_rec_mode(u16&agc)
{
//如果是IMA&ADPCM,采样率计算公式如下:
& //采样率=CLKI/256*d;
//假设d=0,并2倍频,外部晶振为12.288M.那么Fc=(2*6*6=16Khz
//如果是线性PCM,采样率直接就写采样值&
&&& VS_WR_Cmd(SPI_BASS,0x0000);&&&&
& VS_WR_Cmd(SPI_AICTRL0,8000); //设置采样率,设置为8Khz
& VS_WR_Cmd(SPI_AICTRL1,agc);
//设置增益,0,自动增益.1024相当于1倍,512相当于0.5倍,最大值65535=64倍
& VS_WR_Cmd(SPI_AICTRL2,0);
//设置增益最大值,0,代表最大值65536=64X
& VS_WR_Cmd(SPI_AICTRL3,6);
//左通道(MIC单声道输入)
VS_WR_Cmd(SPI_CLOCKF,0X2000); //设置VS10XX的时钟,MULT:2倍频;ADD:不允许;CLK:12.288Mhz
VS_WR_Cmd(SPI_MODE,0x1804);
//MIC,录音激活&&&&
& delay_ms(5);
//等待至少1.35ms&
& VS_Load_Patch((u16*)wav_plugin,40);//VS1053的WAV录音需要plugin
}
//初始化WAV头.
void&recoder_wav_init(__WaveHeader*&wavhead)&//初始化WAV头
wavhead-&riff.ChunkID=0X; //&RIFF&
wavhead-&riff.ChunkSize=0;
//还未确定,最后需要计算
wavhead-&riff.Format=0X;& //&WAVE&
wavhead-&fmt.ChunkID=0X20746D66;& //&fmt&&
wavhead-&fmt.ChunkSize=16;&
//大小为16个字节
wavhead-&fmt.AudioFormat=0X01;&
//0X01,表示PCM;0X01,表示IMA&ADPCM
& wavhead-&fmt.NumOfChannels=1;
//单声道
& wavhead-&fmt.SampleRate=8000;
//16Khz采样率&采样速率
& wavhead-&fmt.ByteRate=wavhead-&fmt.SampleRate*2;//16位,即2个字节
& wavhead-&fmt.BlockAlign=2;
//块大小,2个字节为一个块
& wavhead-&fmt.BitsPerSample=16;
//16位PCM
&&& wavhead-&data.ChunkID=0X; //&data&
& wavhead-&data.ChunkSize=0;
//数据大小,还需要计算&&
}
///////////////////////////////////////////////////////////
//读取数据
w=VS_RD_Reg(SPI_HDAT1);
if((w&=256)&&(w&896))
while(idx&512)& //一次读取512字节
w=VS_RD_Reg(SPI_HDAT0);
tempval=(short)w;
if(tempval&0)tempval=-
if(maxval&tempval)maxval= &&&&
recbuf[idx++]=w&0XFF;
recbuf[idx++]=w&&8;
timecnt++;
if((timecnt%2)==0)
temp=recoder_vu_get(maxval);
if(temp&vulevel)vulevel=
else&if(vulevel)vulevel--;
recoder_vu_meter(11,200+5,vulevel);//显示vu&
if(rec_sta==0X80)//已经在录音了
res=f_write(f_rec,recbuf,512,&bw);//写入文件
printf(&err:%d\r\n&,res);
printf(&bw:%d\r\n&,bw);
//写入出错. &&
sectorsize++;//扇区数增加1,约为32ms &
}
/////////////////////////////////////////////////////////////
我的淘宝小店:
注册时间: 10:12
回复数: 171
主题数: 28
论坛积分:255
来自: 广东
回复【3楼】&wxm2280&:
---------------------------------
顶一下,学习了
VLSI 大陆区一级授权代理商,提供技术支持,QQ
VS1003 VS1053
VS1011 VS1005 VS1205
VS1033 VS8005
VS8053 VS1000
开发板借用,淘宝店铺/
注册时间: 17:36
论坛积分:9
来自: 江苏
回复【3楼】&wxm2280&:
---------------------------------
你后来问题如何解决的?我的需求跟你一样,也是VS1053模块采集完后zigbee发送出去,然后接收端解析后播放,现在也是出现声音不连续的现象,应该是在采集数据的时候进行了无线发送的操作,导致数据不连续。
注册时间: 17:36
论坛积分:9
来自: 江苏
回复【6楼】&fugushatu&:
---------------------------------
回复【5楼】&&:
---------------------------------
请至&/posts/list/0/24768.htm#143140&帮忙分析下问题,谢谢!
注册时间: 10:12
回复数: 171
主题数: 28
论坛积分:255
来自: 广东
回复【7楼】&fugushatu&:
---------------------------------
你这好多种原因啊
VLSI 大陆区一级授权代理商,提供技术支持,QQ
VS1003 VS1053
VS1011 VS1005 VS1205
VS1033 VS8005
VS8053 VS1000
开发板借用,淘宝店铺/
注册时间: 15:56
论坛积分:1
回复【楼主位】&wxm2280&:
请问您的问题解决了没,总体上,我跟您遇到了同样的问题
请选择一个版面...
STM32-F0/F1/F2专区
STM32-F3/F4专区
MSP430专区
ARM7/ARM9/ARM11专区
其他Cortex系列
uCOS & uCGUI & Emwin
trochili(飞鸟)操作系统
中国RTOS联盟
FPGA/CPLD/DSP专区
数字,模拟,高频电路
编程语言学习
蓝牙/WIFI/Zigbee等通信技术
开发工具专栏
UOL 单片机面向对象语言
DIY大赛专区
DIY项目资料专区
论坛建设区
二手交易专栏
& 开源电子网() |为什么我的单片机只能烧录一次程序 型号是stc12c2052ad 原装进口的_百度知道
为什么我的单片机只能烧录一次程序 型号是stc12c2052ad 原装进口的
第一次能烧录
然后正常工作
再就不能烧录了
提示“ 仍在连接中, 请给 MCU 上电...”
同时把芯片拔下来插在电路中还是可以正常工作
P10 P11接GND在试试
其他类似问题
单片机的相关知识
其他2条回答
stc单片机烧写程序要冷启动,就是完全断电后在重新上电才能烧录程序。
我的也是 我一连试过了6块这个单片机都是,是DIP封装的就会,贴片的就稍好,用了十几块,只有一个会这样,或者是MAX232下载不行,用USB下载程序的模块就好了,就能下载了,你可以买一个来试一试,淘宝上很便宜,不到十块钱,我用的下载程序挺好,只不过第一次买的是假货,被坑了一次
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁
说的太好了,我顶!
Copyright & 2014
Corporation, All Rights Reserved
Processed in 1.9906 second(s), 5 db_queries,
1 rpc_queries1990人阅读
上传&& 她的& 的 程序&& 24L01.h& 文件
//#include&intrins.h&
//#define uchar unsigned char
//#define uint unsigned int
//****************************************IO端口定义***************************************
MISO =P1^4;
MOSI =P1^0;
//*********************************************NRF24L01*************************************
#define TX_ADR_WIDTH
// 5 uints TX address width
#define RX_ADR_WIDTH
// 5 uints RX address width
#define TX_PLOAD_WIDTH
// 20 uints TX payload
#define RX_PLOAD_WIDTH
// 20 uints TX payload
uint const TX_ADDRESS[TX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01}; //本地地址
uint const RX_ADDRESS[RX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01}; //接收地址
//***************************************NRF24L01寄存器指令*******************************************************
#define READ_REG
// 读寄存器指令
#define WRITE_REG
// 写寄存器指令
#define RD_RX_PLOAD
// 读取接收数据指令
#define WR_TX_PLOAD
// 写待发数据指令
#define FLUSH_TX
// 冲洗发送 FIFO指令
#define FLUSH_RX
// 冲洗接收 FIFO指令
#define REUSE_TX_PL
// 定义重复装载数据指令
#define NOP
//*************************************SPI(nRF24L01)寄存器地址****************************************************
#define CONFIG
// 配置收发状态,CRC校验模式以及收发状态响应方式
#define EN_AA
// 自动应答功能设置
#define EN_RXADDR
// 可用信道设置
#define SETUP_AW
// 收发地址宽度设置
#define SETUP_RETR
// 自动重发功能设置
#define RF_CH
// 工作频率设置
#define RF_SETUP
// 发射速率、功耗功能设置
#define STATUS
// 状态寄存器
#define OBSERVE_TX
// 发送监测功能
#define CD
// 地址检测
#define RX_ADDR_P0
// 频道0接收数据地址
#define RX_ADDR_P1
// 频道1接收数据地址
#define RX_ADDR_P2
// 频道2接收数据地址
#define RX_ADDR_P3
// 频道3接收数据地址
#define RX_ADDR_P4
// 频道4接收数据地址
#define RX_ADDR_P5
// 频道5接收数据地址
#define TX_ADDR
// 发送地址寄存器
#define RX_PW_P0
// 接收频道0接收数据长度
#define RX_PW_P1
// 接收频道1接收数据长度
#define RX_PW_P2
// 接收频道2接收数据长度
#define RX_PW_P3
// 接收频道3接收数据长度
#define RX_PW_P4
// 接收频道4接收数据长度
#define RX_PW_P5
// 接收频道5接收数据长度
#define FIFO_STATUS
// FIFO栈入栈出状态寄存器设置
unsigned char TxBuf_nRF24L01[3]={0,1,2};
unsigned char RxBuf_nRF24L01[3]={0};
//**************************************************************************************
void Delay(unsigned int s);
void inerDelay_us(unsigned char n);
void init_NRF24L01(void);
uint SPI_RW(uint uchar);
uchar SPI_Read(uchar reg);
void SetRX_Mode(void);
uint SPI_RW_Reg(uchar reg, uchar value);
uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars);
uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars);
unsigned char nRF24L01_RxPacket(unsigned char* rx_buf);
void nRF24L01_TxPacket(unsigned char * tx_buf);
//*****************************************长延时*****************************************
void Delay(unsigned int s)
for(i=0; i&s; i++);
for(i=0; i&s; i++);
//******************************************************************************************
//状态标志
sbit RX_DR =sta^6;
sbit TX_DS =sta^5;
sbit MAX_RT =sta^4;
/******************************************************************************************
/*延时函数
/******************************************************************************************/
void inerDelay_us(unsigned char n)
for(;n&0;n--)
/****************************************************************************************
/*NRF24L01初始化
/***************************************************************************************/
void init_NRF24L01(void)
inerDelay_us(100);
// chip enable
// Spi disable
// Spi clock line init high
SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);
// 写本地地址
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址
SPI_RW_Reg(WRITE_REG + EN_AA, 0x00);
频道0自动 ACK应答允许
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);
允许接收地址只有频道0,如果需要多频道可以参考Page21
SPI_RW_Reg(WRITE_REG + RF_CH, 0);
设置信道工作为2.4GHZ,收发必须一致
SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为32字节
SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0f);
//设置发射速率为1MHZ,发射功率为最大值0dB
SetRX_Mode();
/****************************************************************************************************
/*函数:uint SPI_RW(uint uchar)
/*功能:NRF24L01的SPI写时序
/****************************************************************************************************/
uint SPI_RW(uint uchar)
for(bit_ctr=0;bit_ctr&8;bit_ctr++) // output 8-bit
MOSI = (uchar & 0x80);
// output 'uchar', MSB to MOSI
uchar = (uchar && 1);
// shift next bit into MSB..
// Set SCK high..
uchar |= MISO;
// capture current MISO bit
// ..then set SCK low again
return(uchar);
// return read uchar
/****************************************************************************************************
/*函数:uchar SPI_Read(uchar reg)
/*功能:NRF24L01的SPI时序
/****************************************************************************************************/
uchar SPI_Read(uchar reg)
uchar reg_
// CSN low, initialize SPI communication...
SPI_RW(reg);
// Select register to read from..
reg_val = SPI_RW(0);
// ..then read registervalue
// CSN high, terminate SPI communication
return(reg_val);
// return register value
/****************************************************************************************************/
/*功能:NRF24L01读写寄存器函数
/****************************************************************************************************/
uint SPI_RW_Reg(uchar reg, uchar value)
// CSN low, init SPI transaction
status = SPI_RW(reg);
// select register
SPI_RW(value);
// ..and write value to it..
// CSN high again
return(status);
// return nRF24L01 status uchar
/****************************************************************************************************/
/*函数:uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)
/*功能: 用于读数据,reg:为寄存器地址,pBuf:为待读出数据地址,uchars:读出数据的个数
/****************************************************************************************************/
uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)
uint status,uchar_
// Set CSN low, init SPI tranaction
status = SPI_RW(reg);
// Select register to write to and read status uchar
for(uchar_ctr=0;uchar_ctr&uchar_ctr++)
pBuf[uchar_ctr] = SPI_RW(0);
return(status);
// return nRF24L01 status uchar
/*********************************************************************************************************
/*函数:uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)
/*功能: 用于写数据:为寄存器地址,pBuf:为待写入数据地址,uchars:写入数据的个数
/*********************************************************************************************************/
uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)
uint status,uchar_
status = SPI_RW(reg);
for(uchar_ctr=0; uchar_ctr& uchar_ctr++) //
SPI_RW(*pBuf++);
return(status);
/****************************************************************************************************/
/*函数:void SetRX_Mode(void)
/*功能:数据接收配置
/****************************************************************************************************/
void SetRX_Mode(void)
SPI_RW_Reg(WRITE_REG + CONFIG, 0x2f);
// IRQ收发完成中断响应,16位CRC ,主接收
inerDelay_us(200);
/******************************************************************************************************/
/*函数:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
/*功能:数据读取后放如rx_buf接收缓冲区中
/******************************************************************************************************/
unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
unsigned char revale=0;
sta=SPI_Read(STATUS); // 读取状态寄存其来判断数据接收状况
// 判断是否接收到数据
SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
revale =1;
//读取数据完成标志
SPI_RW_Reg(WRITE_REG+STATUS,sta);
//接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志
SetRX_Mode();
/***********************************************************************************************************
/*函数:void nRF24L01_TxPacket(unsigned char * tx_buf)
/*功能:发送 tx_buf中数据
/**********************************************************************************************************/
void nRF24L01_TxPacket(unsigned char * tx_buf)
//StandBy I模式
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 装载接收端地址
SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH);
// 装载数据
SPI_RW_Reg(WRITE_REG + CONFIG, 0x2e);
// IRQ收发完成中断响应,16位CRC,主发送
//置高CE,激发数据发送
//重点注意!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
inerDelay_us(200);//重点注意!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//重点注意!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
SetRX_Mode();
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:90952次
积分:2684
积分:2684
排名:第4916名
原创:185篇
转载:58篇
评论:17条
(1)(11)(80)(52)(46)(50)(3)}

我要回帖

更多关于 24l01 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信