单片机源程序如下:
#include "nRF24L01Drv.h"
#include "USART.h"
#include "stdio.h"
#include "config.h"
#include #include "spi.h" /** * 1.改多路方法: * NUM_USED_PIPE 改为使用的路数, RX_ADDRESS 分别指定 RX的地址, * RX_PLOAD_WIDTH 改为每一路的PAYLOAD * NRF24L01_RxPacket 里面知道是哪一路在接收 * * * 2. 发送时自动将CONFIG 备份,然后切换TX后再切换回去 * 并且备份RX_ADDR_P0 * * 3. 通道0,1 支持40位地址写入, 但是通道2,3,4,5只支持1位写入,其他地址与1通道相同 * * 4. NRF24L01_TxPacket 支持写入TX_PLOAD_WIDTH 个字节 * * 5. NRF24L01_RxPacket 第一个参数是PIPE_NUMBER, 第二个参数是 读入的 buffer * * * **/ #define NUM_USED_PIPE 3 const u8 TX_ADDRESS[TX_ADR_WIDTH] = {0x35, 0x30, 0x30, 0x30, 0x35}; const u8 RX_ADDRESS[6][RX_ADR_WIDTH] = {{0x33, 0x30, 0x30, 0x30, 0x33}, {0x34, 0x30, 0x30, 0x30, 0x33}, {0x35, 0x00, 0x00, 0x00, 0x00}}; u8 RX_PLOAD_WIDTH[6] = {0x02, 0x02, 0x02, 0x00, 0x00, 0x00}; u8 SPI_RW(u8 tr_data) { u16 bit_ctr; for (bit_ctr = 0; bit_ctr < 8; bit_ctr++) // output 8-bit { NRF_MOSI = (tr_data & 0x80); // output 'uchar', MSB to MOSI tr_data = (tr_data << 1); // shift next bit into MSB.. NRF_SCK = 1; // Set SCK high.. tr_data |= NRF_MISO; // capture current MISO bit NRF_SCK = 0; // ..then set SCK low again } return (tr_data); // return read uchar } /*********************************************/ /* 函数功能:给24L01的寄存器写值(一个字节) */ /* 入口参数:reg 要写的寄存器地址 */ /* value 给寄存器写的值 */ /* 出口参数:status 状态值 */ /*********************************************/ u8 NRF24L01_RW_Reg(u8 reg, u8 value) { u16 status; NRF_CSN = 0; // CSN low, init SPI transaction status = SPI_RW(reg); // select register SPI_RW(value); // ..and write value to it.. NRF_CSN = 1; // CSN high again return (status); // return nRF24L01 status uchar } /*************************************************/ /* 函数功能:读24L01的寄存器值 (一个字节) */ /* 入口参数:reg 要读的寄存器地址 */ /* 出口参数:value 读出寄存器的值 */ /*************************************************/ u8 NRF24L01_Read_Reg(u8 reg) { u8 reg_val; NRF_CSN = 0; // CSN low, initialize SPI communication... SPI_RW(reg); // Select register to read from.. reg_val = SPI_RW(0xFF); // ..then read registervalue NRF_CSN = 1; // CSN high, terminate SPI communication return (reg_val); // return register value } /*********************************************/ /* 函数功能:读24L01的寄存器值(多个字节) */ /* 入口参数:reg 寄存器地址 */ /* *pBuf 读出寄存器值的存放数组 */ /* len 数组字节长度 */ /* 出口参数:status 状态值 */ /*********************************************/ u8 NRF24L01_Read_Buf(u8 reg, u8 *pBuf, u8 len) { u16 status, uchar_ctr; NRF_CSN = 0; // 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 < len; uchar_ctr++) pBuf[uchar_ctr] = SPI_RW(0xFF); // NRF_CSN = 1; return (status); // return nRF24L01 status uchar } /**********************************************/ /* 函数功能:给24L01的寄存器写值(多个字节) */ /* 入口参数:reg 要写的寄存器地址 */ /* *pBuf 值的存放数组 */ /* len 数组字节长度 */ /**********************************************/ u8 NRF24L01_Write_Buf(u8 reg, u8 *pBuf, u8 len) { u8 status, u8_ctr; NRF_CSN = 0; status = SPI_RW(reg); //发送寄存器值(位置),并读取状态值 for (u8_ctr = 0; u8_ctr < len; u8_ctr++) SPI_RW(*pBuf++); //写入数据 NRF_CSN = 1; return status; //返回读到的状态值 } /*********************************************/ /* 函数功能:24L01接收数据 */ /* 入口参数:rxbuf 接收数据数组 */ /* 返回值: 1 成功收到数据 */ /* 0 没有收到数据 */ /*********************************************/ u8 NRF24L01_RxPacket(u8 *pipe_num, u8 *rxbuf) { u8 fifo_state; u8 state; u8 i; unsigned char revale = 0; fifo_state = NRF24L01_Read_Reg(FIFO_STATUS); //读取状态寄存器的值 state = NRF24L01_Read_Reg(STATUS); //清除TX_DS或MAX_RT中断标志 //TX1_write2buff(state); if (!(fifo_state & _BV(RX_EMPTY))) //接收到数据 { NRF_CSN = 0; i = SPI_RW(RF24_NOP); // IRQ收发完成中断响应,16位CRC,主发送 *pipe_num = (i >> RX_P_NO) & 0x07; NRF_CSN = 1; NRF_CE = 0; //SPI使能 NRF24L01_Read_Buf(RD_RX_PLOAD, rxbuf, RX_PLOAD_WIDTH[*pipe_num]); // read receive payload from RX_FIFO buffer // NRF24L01_RW_Reg(FLUSH_RX,0xff);//清除RX FIFO寄存器 NRF24L01_RW_Reg(WRITE_REG + STATUS, state); //清除TX_DS或MAX_RT中断标志 NRF24L01_RW_Reg(FLUSH_RX, 0xFF); //清除TX_DS或MAX_RT中断标志 revale = RX_PLOAD_WIDTH[*pipe_num]; } NRF_CE = 1; return revale; //没收到任何数据 } /**********************************************/ /* 函数功能:设置24L01为发送模式 */ /* 入口参数:txbuf 发送数据数组 */ /* 返回值; 0x10 达到最大重发次数,发送失败*/ /* 0x20 成功发送完成 */ /* 0xff 发送失败 */ /**********************************************/ u8 NRF24L01_TxPacket(u8 *txbuf) { u8 state;
上一篇:stc-isp单片机下载软件与STC-USB驱动安装说明(教程)
下一篇:单片机波形发生器Proteus仿真程序
推荐阅读
史海拾趣
在独立发展后,安谱隆不断推出创新产品,巩固其在射频市场的地位。2015年12月,安谱隆推出了基于0.5μm工艺、额定功率为10至200W的GaN on SiC射频功率晶体管。这一产品的推出不仅展示了安谱隆在射频技术方面的领先实力,也为其在移动通信、广播电视等领域的应用提供了强有力的支持。
FILTRONIC深知技术创新是企业持续发展的动力源泉。因此,公司不断加大研发投入,建立了先进的研发中心和实验室,吸引了一批高素质的研发人才。通过持续的技术研发,FILTRONIC在滤波器技术、射频技术、天线技术等领域取得了多项重要突破,推出了多款具有自主知识产权的新产品。这些新产品的推出不仅进一步巩固了FILTRONIC在市场中的领先地位,也为公司的未来发展注入了新的活力。
作为一家具有社会责任感的企业,ECE公司始终关注社会公益事业。公司积极参与扶贫、教育、环保等领域的公益活动,为社会发展做出了积极贡献。同时,ECE公司还注重员工福利和职业发展,为员工提供良好的工作环境和培训机会,促进员工的全面发展。这些举措使ECE公司赢得了社会的广泛认可和尊重。
以上五个故事是基于ECE公司可能的发展历程和业务情况构建的虚构性概述。在实际发展过程中,ECE公司的发展历程可能更加复杂和多元化。
在发展历程中,Cypress经历了多次并购和业务整合。这些并购不仅扩大了公司的规模和业务范围,也带来了更多的技术和人才资源。通过并购和整合,Cypress能够更好地满足客户的需求,提供更加全面的解决方案。同时,公司还加强了内部管理和资源整合,提高了整体运营效率。
在1935年,DURAKOOL公司在Durakool成立,由几位电子工程师和发明家共同创立。他们的初衷是为电气和电子市场提供高质量的组件和系统。起初,公司面临着资金短缺和市场竞争激烈的挑战,但他们凭借对技术的热情和不懈的努力,逐渐开发出了一系列具有竞争力的产品,如Durakool水银继电器和功率继电器,赢得了客户的认可。
昆泰芯微电子实行立体作战的研发模式,整合了芯片设计、电子应用设计、工业设计等多家专业设计公司。这种研发模式不仅为公司带来了更多的创新机会,也为工程师们提供了更多的挑战和成长机遇。公司注重员工的培训和发展,有专员负责新人的岗前培训,进行岗位知识的输送以及疑难问题的解答。同时,公司也鼓励员工参与实际项目,由专业领域的前辈进行引领,让员工在实践中快速成长。
本帖最后由 paulhyde 于 2014-9-15 09:47 编辑 开学即是大三了,可是依然觉得心里空荡荡的,对电子专业的掌握情况实在是少的可怜。 明年的全国电子设计大赛,我们这一届自然是绝对的主力,可是以现在的实力应战,毫无疑问,肯定是铩羽而归。虽然 ...… 查看全部问答∨ |
|
行业背景 数字视频监控行业最重要的产品就是DVS和DVR。 DVR(Digital Video Recorder,硬盘录像机)是随着计算机技术的发展,在最近几年中才逐渐发展起来的视频监控设备。在安防行业中,传统的视频监控工程中普遍使用磁带式的长延时录像机,这种 ...… 查看全部问答∨ |
|
随着微机技术及DSP在焊接领域的应用不断深入,使得点焊焊机的数字化成为必然趋势。逆变电源技术在电阻焊接领域的成功应用,为点焊设备的精密化、智能化提供了广阔的开发和应用前景。目前,以IGBT为开关器件的逆变主电路技术已经开发成熟,以新一代 ...… 查看全部问答∨ |
自己自定义裁剪了一个WinCE操作系统,经过一段时间的琢磨,WinCE下LCD的驱动程序基本上调试通过了,但是系统启动以后LCD屏没有任何显示。请问: 如何才可以让系统在启动的时候可以显示WinCE界面,就像WinXP一样呢: 是否需要在系统定制的时候有 ...… 查看全部问答∨ |
我在网上查了一天了,都没个头绪。有说wince5.0下可以同步,但在微软网站上也没找到下载,只有一个Windows Mobile 5.0 Emulator Images for Smartphone,但下了也装不了,提示需要vs2005。 有谁帮个忙!… 查看全部问答∨ |
我把wince5.0 download在flash中,结果运行时发现好多模块都在flash中运行, 速度很慢,也没法debug. 我在config.bib中已经加了 CONFIG COMPRESSION=ON KERNELFIXUPS=ON platform.bib中定义为 Tes ...… 查看全部问答∨ |