零死角玩转stm32-中级篇9、2.4G无线(NRF24L01)
nRF24L01 无线模块 说明书

nRF24L01 无线模块用户手册目录产品概述 (3)基本特性 (3)引脚接口说明 (4)模块尺寸 (6)nRF2401工作模式 (7)Enhanced ShockBurstTM收发模式 (7)Enhanced ShockBurstTM数据发送流程 (8)空闲模式 (9)关机模式 (9)nRF24L01模块参数设置 (9)主要参数设置 (10)程序设计分析 (10)nRF24L01初始化 (10)nRF24L01SPI写操作 (11)nRF24L01 SPI读操作 (11)nRF24L01写寄存器函数 (12)nRF24L01连续读多个寄存器函数 (12)nRF24L01连续写多个寄存器函数 (12)nRF24L01接收模式设置 (13)nRF24L01接收数据流程 (13)nRF24L01发送数据流程 (13)无线应用注意事项 (14)我们的承诺 (15)产品概述nRF24L01是挪威NordicVLSI公司出品的一款新型射频收发器件,采用4 mm×4 mm QFN20封装;nRF24L01工作在ISM频段:2.4~2.524 GHz。
且内置频率合成器、功率放大器、晶体振荡器、调制器等功能,并融合增强型ShockBurst技术,其中地址、输出功率和通信频道可通过程序进行配置,适合用于多机通信。
nRF24L01功耗很低,在以-6 dBm的功率发射时,工作电流也只有9 mA;而对应接收机的工作电流只有12.3 mA,多种低功率工作模式(掉电模式和空闲模式)使节能设计更方便。
nRF24L01在业界领先的低功耗特点使其特别适合采用钮扣电池供电的2.4G应用,整个解决方案包括链路层和MultiCeiver功能提供了比现有的 nRF24XX 更多的功能和更低的电源消耗,与目前的蓝牙技术相比在提供更高速率的同时,而只需花更小的功耗基本特性(1) 2.4Ghz全球开放ISM 频段免许可证使用(2) 最高工作速率2Mbps,高效GFSK调制,抗干扰能力强(3) 125频道,满足多点通信和跳频通信需要(4) 内置硬件CRC 检错和点对多点通信地址控制(5) 低功耗1.9 - 3.6V 工作,适合电池供电应用(6) 待机模式下状态为22uA;掉电模式下为900nA(7) 模块可软件设地址,只有收到本机地址时才会输出数据(提供中断指示),可直接接各种单片机使用,软件编程非常方便(8) 内置专门稳压电路,即使开关电源也有很好的通信效果(9) 标准DIP间距接口,便于嵌入式应用(10)具有自动应答机制,和CRC校验,数据通讯稳定可靠。
nrf24l01(2.4G模块)

NRF24L01(2.4G模块)一、模块简介(1)2.4GHz全球开放ISM频段免许可证使用。
(2)最高工作速率2Mbps,高效GFSK调制,抗干扰能力强。
(3)126频道,满足多点通信和跳频通信需要。
(4)内置硬件CRC检错,和点对点通信地址控制。
(5)低功耗,1.9-3.6V工作,待机模式下22uA;掉电模式900nA。
(6)内置2.4GHz天线,体积小巧:15mm×29mm。
(7)模块可软件设置地址,只有收到本机地址时才会输出数据(提供中断提示),可直接接各种单片机使用,软件编程非常方便。
(8)内稳压电路,使用各种电源包括DC/DC开关电源均有很好的通道效果。
(9)2.54mm间距接口,DIP封闭。
(10)工作于Enhanced ShockBurst具有Automatic packet handling,Auto packet transaction handling,具有可选的内置包应答机制,极大地降低丢包率。
(11)与51单片机P0口连接的时候,需要加10K的上拉电阻,与其余口连接不需要。
(12)其他系列的单片机,如果是5V的,请参考该系列单片机IO口输出电流大小,如果超过10mA,需要串联电阻分压,否则容易烧毁模块!如果是3.3V的,可以直接和RF24L01模块的IO口线连接。
比如AVR系列单片机。
如果是5V的一般串接2K的电阻。
二、接口电路说明:1)VCC脚接电压范围为:1.9V-3.6V,不能在这个敬意之外,超过3.6V将会烧毁模块。
推荐电压3.3左右。
2)除电源VCC和接地端,其余脚都可以直接和普通的5V单片机IO口直接相连,无需转换。
当然对3V左右的单片机更加适用了。
3)硬件上面没有SPI的单片机也可以控制本模块,用普通单片机IO口模拟SPI,不需要单片机真正的串口介入,只需要普通的单片机IO口就可以了,当然用串口也可以。
4)如果需要其他封装接口,比如密脚插针,或者其他形式的接口,可联系我们定做。
STM32驱动NRF24L01

STM32驱动NRF24L01
1. 简介
NRF24L01 是nordic 的无线通信芯片,它具有以下特点:
1)2.4G 全球开放的ISM 频段(2.400 - 2.4835GHz),免许可证使用;
2)最高工作速率2Mbps,高校的GFSK 调制,抗干扰能力强;
3)125 个可选的频道,满足多点通信和调频通信的需要;
4)内置CRC 检错和点对多点的通信地址控制;
5)低工作电压(1.9~3.6V),待机模式下状态为26uA;掉电模式下为
900nA;
6)可设置自动应答,确保数据可靠传输;
7)工作于EnhancedShockBurst 具有Automatic packet handling,Auto packet transaction handling ,可以实现点对点或是 1 对 6 的无线通信,速度可以达
到2M(bps),具有可选的内置包应答机制,极大的降低丢包率。
8)通过SPI 总线与单片机进行交互,最大通信速率为10Mbps;
1.1 结构框图
如图右侧为六个控制和数据信号,分别为CSN、SCK、MISO、MOSI、IRQ、CE。
信号线功能
CSN 芯片的片选线,CSN 为低电平芯片工作
SCK 芯片控制的时钟线(SPI 时钟)
MISO 芯片控制数据线(Master input slave output)
MOSI 芯片控制数据线(Master output slave input)
IRQ 中断信号。
无线通信过程中MCU 主要是通过IRQ 与NRF24L01 进。
nRF24L01的工作原理

nRF24L01的工作原理nRF24L01是一款广泛应用于无线通信领域的低功耗收发器。
它采用2.4GHz频段,支持多种通信协议,如SPI、I2C等。
本文将详细介绍nRF24L01的工作原理。
1. 引言nRF24L01是一款集成了收发功能的无线模块,广泛应用于物联网、无线传感器网络等领域。
它具有低功耗、长距离传输和高可靠性等特点,是许多无线通信系统的首选。
2. 工作频率nRF24L01的工作频率为2.4GHz,这是一个无线电频段,被称为ISM频段(Industrial, Scientific and Medical)。
这个频段被许多无线通信技术所使用,如Wi-Fi、蓝牙等。
3. 收发原理nRF24L01采用了GFSK调制技术(Gaussian Frequency Shift Keying),它通过改变载波频率来传输数字信号。
具体来说,当发送端要发送一个1时,它会将载波频率提高;当发送端要发送一个0时,它会将载波频率降低。
接收端通过检测载波频率的变化来还原发送端发送的数字信号。
4. 工作模式nRF24L01有两种工作模式:发送模式和接收模式。
在发送模式下,nRF24L01将数据发送给接收端;在接收模式下,nRF24L01接收来自发送端的数据。
5. 数据包结构nRF24L01使用数据包来传输数据。
每个数据包由多个字节组成,包括地址字节、有效载荷字节和校验字节。
地址字节用于标识发送端和接收端的地址,有效载荷字节用于存储要传输的数据,校验字节用于验证数据的完整性。
6. 通信协议nRF24L01支持多种通信协议,如SPI(Serial Peripheral Interface)和I2C(Inter-Integrated Circuit)。
SPI是一种串行通信协议,它使用四根信号线(时钟线、数据线、主从选择线和片选线)进行通信。
I2C是一种串行通信协议,它使用两根信号线(时钟线和数据线)进行通信。
7. 功耗管理nRF24L01具有优秀的功耗管理功能。
nRF24LE1芯片简单介绍

nRF24LE1芯片简单介绍NRF24LE1特性NRF24LE1采用了NORDIC最新的无线和超低功耗技术,在一个极小封装中集成了包括2.4G无线传输,增强型51 FLASH高速单片机,丰富外设及接口等的单片FLASH芯片,是一个综合了性能及成本的完美结合,很适合应用于各种2.4G的产品设计。
NRF24LE1=2.4GHz+Flash51+ADC+PWM+I2C+RTC+WDT+RNG+AES++COMP+UART+SPI….应用:无线鼠标,无线键盘,无线摇杆,PC外设,玩具,RFID,无线遥控,医学参数监测,线数字语音,工业控制及无线数据采集主要特性:1、内嵌 2.4GHz低功耗无线收发内核NRF24L01+, 250kbps,1Mbps,2Mbps空中速率2、高性能51内核,16kbytes Flash,1Kbyte data RAM,1Kbyte NVRAM3、具有丰富的外设资源,内置128bit AES硬件加密,32位硬件乘除处理器,6-12位ADC,两路PWM,I2C,UART,硬件随机数产生器件,WDT,RTC,模拟比较器4、提供QFN24,QFN32,QFN48多种封装,提供灵活应用选择5、灵活高效的开发手段,支持Keil C,ISP下载,是开发无线外设,RFID,消费产品,无线数传等有力工具及平台。
带Gazell协议Gazell协议是NORDIC专为2.4G无线桌面和其他无线应用设计推出的无线通信协议,配合NRF24LE1/NRF24LU1P使用,客户可以专注于应用设计,无需花费大量的精力在无线链路上。
低功耗Gazell协议是低功耗协议,可设计为纽扣电池供电的应用。
抗干扰性Gazell协议完成自动跳频及抗干扰的无线通信,具有在复杂环境下优异的抗干扰性能。
低延时Gazell协议充分利用NRF高速通信的特性,具有低延时特性,特别满足PC周边及其他应用。
高安全性Gazell协议具有AES 128bit 高强度加密,确保数据传输的安全可靠。
nRF24L01主要参数及电路图

nRF24L01 主要参数及电路图
nRF24L01 是由NORDIC 生产的工作在2.4GHz~2.5GHz 的ISM 频段的单片无线收发器芯片。
无线收发器包括:频率发生器、增强型SchockBurst 模式控制器、功率放大器、晶体振荡器、调制器和解调器。
输出功率频道选择和协议的设置可以通过SPI 接口进行设置。
几乎可以连接到各种单片机芯片,并完成无线数据传送工作。
极低的电流消耗:当工作在发射模式下发射功率为0dBm 时电流消耗为11.3mA ,接收模式时为12.3mA,掉电模式和待机模式下电流消耗更低。
nRF24L01 性能参数
小体积,QFN20 4x4mm 封装
宽电压工作范围,1.9V~3.6V,输入引脚可承受5V 电压输入。
nRF24L01的工作原理
nRF24L01的工作原理nRF24L01是一款低功耗、高性能的2.4GHz无线收发模块,广泛应用于无线通信领域。
它采用射频(RF)技术,能够在2.4GHz频段进行无线数据传输。
本文将详细介绍nRF24L01的工作原理。
1. 无线通信原理:无线通信是通过无线电波在空间中传播信息的一种通信方式。
nRF24L01利用射频信号进行无线通信,通过调制和解调技术实现数据的传输和接收。
2. nRF24L01的硬件结构:nRF24L01由射频前端、基带处理器和SPI接口组成。
射频前端负责射频信号的发送和接收,基带处理器负责数据的调制和解调,SPI接口用于与主控制器进行通信。
3. 工作模式:nRF24L01有两种工作模式:发送模式和接收模式。
在发送模式下,它将数据通过射频信号发送给接收端。
在接收模式下,它接收来自发送端的射频信号,并解调出原始数据。
4. 发送端工作原理:发送端首先将要发送的数据通过SPI接口发送给nRF24L01的基带处理器。
基带处理器将数据进行调制,将其转换为射频信号。
射频前端将射频信号发射出去,经过空间传播后到达接收端。
5. 接收端工作原理:接收端的射频前端接收到发送端发射的射频信号。
射频前端将射频信号经过放大和滤波处理后送给基带处理器。
基带处理器将接收到的射频信号进行解调,得到原始数据。
6. 通信协议:nRF24L01采用自己的通信协议,包括数据包格式、通信速率、信道选择等。
发送端和接收端需要使用相同的通信协议才干正常通信。
7. 功耗管理:nRF24L01具有低功耗设计,可以通过设置工作模式、发送功率和休眠模式等来控制功耗。
在不需要进行通信时,可以将nRF24L01设置为休眠模式,以节省能源。
8. 技术特点:nRF24L01具有以下技术特点:- 工作频率:2.4GHz- 通信距离:可达100米- 数据传输速率:最高2Mbps- 工作电压:1.9V至3.6V- 工作温度:-40℃至85℃9. 应用领域:nRF24L01广泛应用于无线数据传输领域,例如无线遥控、无线传感器网络、物联网等。
NRF24L01详细教程
先来看接口电路,使用的IO 口不是唯一的哦,可随意定义接口,当然是在使用IO 口模拟SPI 且IRQ 中断引脚不使用的使用查询方法判断接收状态的情况下了。
作为初探我们就是用简单的IO 模拟SPI 的方法了,中断使用查询的方式。
那么该教程讲解的接口与单片机的连接如下:首先您需要了解NRF24L01,请参阅“NRF24L01 芯片中文资料”或者“NRF24L01 芯片英文资料”。
我们的教程是以一个简单的小项目为大家展示NRF24L01 的使用方法与乐趣。
我们所写教程均是以这种方式的呢,让您在学习的时候明白它能做什么,使您学起来不至于枯燥无味。
作为简易的教程,我们只需要知道它是怎么使用的就够了,我们本教程的目的是用NRF24L01 发送数据和接收数据,且接收方会对比发送的数据与接收的数据,若完全相同则控制LED 闪烁一次,并且把接收到的数据通过串口发送到PC 端,通过串口工具查看接收到的数据。
具体的要求如下:1、具备发送和接收的能力。
2、发送32 个字节的数据,接收方接收到正确数据之后给予提示,通过LED 闪烁灯形式。
3、把接收到的数据传送到PC 进行查看。
4、发送端每隔大约1.5 秒发送一次数据,永久循环。
以上是程序的要求,若您想自行设计出硬件接口,您也是可以添加一条呢:使用DIY 方式设计NRF24L01 的接口板,且包含含单片机平台,使用PCB 方式或者万用板方式均可。
如果您想让自己学的很扎实,那么推荐您自行做出接口板子呢。
当然若您的能力不足,那么我们不推荐自行做板呢,因为这样会增加您学习的难度,反而起到了反效果呢。
我们知道NRF24L01 的供电电压是1.9V~3.6V 不能超过这个范围,低了不工作,高了可能烧毁NRF24L01 芯片。
我们常用的STC89C52 的单片机的供电电压是5V,我们不能直接给24L01 这个模块供电,我们需要使用AMS1117-3.3V 稳压芯片把5V 转成3.3V 的电压为24L01 模块供电。
2.4G无线传输模块 NRF24L01
NRF24L01无线反射接收模块1.所需材料a)单片机最小系统b)液晶(显示状态作用)c)NRF24L01无线模块2.基本须知a)引脚i.b)NRF24L01状态机(主要有一下几个状态)i.Power Down Mode:掉电模式ii.Tx Mode:发射模式iii.Rx Mode:接收模式iv.Standby-1Mode:待机1模式v.Standby-2Mode:待机2模式c)对模块的固件编程的基本思路如下:i.置CSN为低,是能芯片,配置芯片各个参数。
配置参数在Power Down状态中完成ii.如果是Tx模式,填充Tx FIFOiii.配置完成以后,通过CE与CONFIG中的PWR_UP与PRIM_RX参数确定NRF24L01要切换到的状态。
Tx Mode:PWR_UP=1;PRIM_RX=0;CE=1(保持超过10us就可以)Rx Mode:PWR_UP=1;PRIM_RX=1;CE=1iv.IRQ引脚会在以下三种情况变低:1.Tx FIFO发完并且收到ACK(使能ACK情况下)2.RxFIFO收到数据3.达到最大重发次数将IRQ接到外部中断输入引脚,通过中断程序进行处理d)模块通信中的相互识别,是通过定义发送地址和本机地址(如)地址可以自定义3.实现思路a)使用SPI通信与NRF24L01进行相互通信,需要编写基本通信模块的代码(需要用到读写数据时序图)b)操作NRF24L01模块需要控制其内部的寄存器,因此要在程序中宏定义模块内部需要使用的寄存器的地址。
c)使用模块之前需要对模块内的相应寄存器进行初始化设置,同理,其他各个模式也有相应的初始化设置。
d)若接收到数据,IQR引脚会被拉低,此时可以通过SPI通信模块程序读取相应寄存器的值,读取出所接收到的数据。
e)。
nRF24L01无线模块讲解解析
增强型的ShockBurst TM 模式
• nRF24L01配置为增强型的ShockBurst TM 模式 下时,只 要MCU有数据要发送,nRF24L01就会自动启动 ShockBurst TM模式来发送数据。在发送完数据后 nRF24L01转到接收模式,并等待终端的应答信号。如果 没有收到应答信号,nRF24L01将重发相同的数据包,直 到收到应答信号或重发次数超过SETUP_RETR_ARC寄 存器中设置的值为止,如果重发次数超过了设定值,则产 生MAX_RT中断。 • 只要接收到确认信号,nRF24L01就认为最后一包数据已 经发送成功(接收方已经收到数据),把TX FIFO中的数 据清除掉并产生TX_DS中断(IRQ引脚置高)。
增强型ShockBurstTM 接收模式
• 1、 ShockBurstTM 接收模式是通过设置寄存器中 PRIM_RX 位为高来选择的。准备接收数据的通道必须被 使能(EN_RXADDR 寄存器),所有工作在增强型 ShockBurstTM 模式下的数据通道的自动应答功能是由 (EN_AA 寄存器)来使能的,有效数据宽度是由 RX_PW_Px 寄存器来设置的。地址的建立过程见增强型 ShockBurstTM 发送章节。 • 2、 接收模式由设置CE 为高来启动。 • 3、 130us 后nRF24L01 开始检测空中信息。
数据通道
• 数据通道0 是唯一的一个可以配置为40 位自身地址的数据通道。1~5 数据通道都为8 位自身地址和32 位公用地址。所有的数据通道都可以 设置为增强型ShockBurst 模式。
寄存器配置
• nRF24L01所有的寄存器都是通过SPI口进行配置的(寄存器配置详见 附件)。CSN为低后,SPI接口等待指令执行。每一条指令都必须通 过一次CSN由高到低的变化。 • SPI指令格式:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《零死角玩转 STM32》系列教程由初级篇、中级篇、高级篇、系统篇、 四个部分组成,根据野火 STM32 开发板旧版教程升级而来,且经过重新深入编 写,重新排版,更适合初学者,步步为营,从入门到精通,从裸奔到系统,让 您零死角玩转 STM32。M3 的世界,与野火同行,乐意惬无边。
另外,野火团队历时一年精心打造的《STM32 库开发实战指南》将于今 年 10 月份由机械工业出版社出版,该书的排版更适于纸质书本阅读以及更有利 于查阅资料。内容上会给你带来更多的惊喜。是一本学习 STM32 必备的工具 书。敬请期待!
PA6-SPI1-MISO : W25X16-DO
用到的库文件
PA7-SPI1-MOSI : W25X16-DIO startup/start_stm32f10x_hd.c
CMSIS/core_cm3.c
CMSIS/system_stm32f10x.c
FWlib/stm32f10x_gpio.c
FWlib/stm32f10x_rcc.c
-第 7 页-
关于 USART1_Config()函数,是用来配置串口的,关于这两个函数的具体讲解 可以参考前面的教程,这里不再详述。
接着进入 SPI_NRF_Init()函数是怎样配置 STM32 的 SPI 接口的:
1. void SPI_NRF_Init(void)
2. {
3. SPI_InitTypeDef SPI_InitStructure;
本实验采用的无线模块芯片型号为 NRF24L01+,是工作在 2.4~2.5GHz 频段的,具备自动重发功能,6 个数据传输通道,最大无线传输速率为 2Mbits。MCU 可与该芯片通过 SPI 接口访问芯片的寄存器进行配置。
以下是该模块的硬件电路:
截图来自《NRF24l01 模块说明书.pdf》,page3
//
主模式
35. SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
//
数据大小 8 位
36. SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
//
时钟极性,空闲时为低
37. SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI Chip Select
排针 P3 的 PA1
3
SCK
SPI Clock
排针 P5 的 PA5
4
MOSI
SPI Slave Data Input
排针 P5 的 PA7
5
MISO
SPI Slave Data Output, with tri-state option 排针 P5 的 PA6
6
IRQ
14. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; 15. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用功能
16. GPIO_Init(GPIOA, &GPIO_InitStructure);
29. 30. /* 这是自定义的宏,用于拉高 csn 引脚,NRF 进入空闲状态 */
31. NRF_CSN_HIGH();
32.
33. SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; / /双线全双工
34. SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
-第 6 页-
进入 main 函数,边看代码边了解程序的流程:
1. int main(void)
2. {
3. /* 串口 1 初始化 */
4.
USART1_Config();
5.
6. /*SPI 接口初始化*/
7. SPI_NRF_Init();
8.
9.
printf("\r\n 这是一个 NRF24L01 无线传输实验 \r\n");
34.
/*把接收的数据+1 后发送给主机*/
35.
rxbuf[i]+=1;
36.
txbuf[i] = rxbuf[i];
37.
}
38. }
39.
printf("\r\n 从机端 进入自应答发送模式\r\n");
40.
NRF_TX_Mode();
41.
42.
/*不断重发,直至发送成功*/
43.
do
44.
截图来自:《nRF24L01P(新版无线模块控制 IC).PDF》,page24.
9.3 代码分析
这个实验用到两个代码,主机和从机的代码驱动是一样的,区别只是 main 中函数调用的流程不一样,从机接收模式的时候,相应的主机在发送模式。
附从机流程图:
-第 5 页-
下面以的从机的代码为例进行分析。
首先要添加用的库文件,在工程文件夹下 Fwlib 下我们需添加以下库文 件:
{
45.
status = NRF_Tx_Dat(txbuf);
46.
}while(status == MAX_RT);
47. }
48. }
报告野火,这个代码错了,没有调用 SystemInit()函数来设置时钟!是的, 大家熟悉的 SystemInit()函数不见了,但这样并没有出错,原因是这个例程的库 是 3.5 版本的!在 3.5 版本的库中 SystemInit()函数在启动文件 startup_stm32f10x_hd.d 中已用汇编语句调用了,设置的时钟为默认的 72M。 所以在 main 函数就不需要再调用啦,当然,再调用一次也是没问题的。
17. 18. /*配置 SPI_NRF_SPI 的 CE 引脚,GPIOA^2 和 SPI_NRF_SPI 的 CSN 引
脚: NSS GPIOA^1*/
19. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_1;
20. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
请注意区分这个模块的 CSN 片选信号与 CE 使能信号的功能。
CSN 端口是 SPI 通讯协议中的片选端。多个 SPI 设备可以共用 STM32 的 SCK,MISO,MOSI 端口,不同的设备间就是用 CSN 来区分。
CE 实际是 NRF24L01 的芯片使能端,通过配置 CE 可以使 NRF24L01 进入不同的状态。如下图示:
//
第 1 个边沿有效,上升沿为采样时刻
38. SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
//
NSS 信号由软件产生
39. SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8; //8 分频,9MHz
1. stm32f10x_gpio.c 2. stm32f10x_rcc.c 3. stm32f10x_usart.c 4. stm32f10x_spi.c
还要在 stm32f10x_conf.h 中把相应的头文件添加进来:
1. #include "stm32f10x_gpio.h" 2. #include "stm32f10x_spi.h" 3. #include "stm32f10x_rcc.h" 4. #include "stm32f10x_usart.h"
注意:这个模块的工作电压为 3.3V,实验时请把 vcc 接到板上的 3v3 接 口,超过 3.6v 该模块会烧坏!
引脚说明及本实验中与开发板的连接:
Pin
Name
Description
与开发板相连
1
CE
Chip Enable Activates RX or TX mode
排针 P5 的 PA2
2
CSN
16.
printf("\r\n
NRF 与 MCU 连接成功\r\n");
17.
else
18.
printf("\r\n 正在检测 NRF 与 MCU 是否正常连接。。。\r\n");
19.
20. while(1)
21. {
22.
printf("\r\n 从机端 进入接收模式\r\n");
23. NRF_RX_Mode();
8. 9. /*使能 SPI1 时钟*/
10. RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
11. 12. /*配置 SPI_NRF_SPI 的 SCK,MISO,MOSI 引脚,GPIOA^5,GPIOA^6,GPIOA^7 */
13. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
26. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; 27. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ; //上拉输入
28. GPIO_Init(GPIOA, &GPIO_InitStructure);
4. GPIO_InitTypeDef GPIO_InitStructure;
5. 6. /*使能 GPIOB,GPIOD,复用功能时钟*/