零死角玩转stm32-中级篇9、2.4G无线(NRF24L01)资料下载.pdf
- 文档编号:16121217
- 上传时间:2022-11-20
- 格式:PDF
- 页数:16
- 大小:1.04MB
零死角玩转stm32-中级篇9、2.4G无线(NRF24L01)资料下载.pdf
《零死角玩转stm32-中级篇9、2.4G无线(NRF24L01)资料下载.pdf》由会员分享,可在线阅读,更多相关《零死角玩转stm32-中级篇9、2.4G无线(NRF24L01)资料下载.pdf(16页珍藏版)》请在冰豆网上搜索。
W25X16-CSPA5-SPI1-SCK:
W25X16-CLKPA6-SPI1-MISO:
W25X16-DOPA7-SPI1-MOSI:
W25X16-DIO用到的库文件用到的库文件startup/start_stm32f10x_hd.cCMSIS/core_cm3.cCMSIS/system_stm32f10x.cFWlib/stm32f10x_gpio.cFWlib/stm32f10x_rcc.cFWlib/stm32f10x_usart.cFWlib/stm32f10x_spi.c用户编写的文件用户编写的文件USER/main.cUSER/stm32f10x_it.cUSER/usart1.cSPI_NRF.c野火STM32开发板2.4G无线模块接口图:
-第4页-9.2NRF24L01模块简介模块简介本实验采用的无线模块芯片型号为NRF24L01+,是工作在2.42.5GHz频段的,具备自动重发功能,6个数据传输通道,最大无线传输速率为2Mbits。
MCU可与该芯片通过SPI接口访问芯片的寄存器进行配置。
以下是该模块的硬件电路:
截图来自NRF24l01模块说明书.pdf,page3注意:
这个模块的工作电压为3.3V,实验时请把vcc接到板上的3v3接口,超过3.6v该模块会烧坏!
引脚说明及本实验中与开发板的连接:
PinNameDescription与开发板相连1CEChipEnableActivatesRXorTXmode排针P5的PA22CSNSPIChipSelect排针P3的PA13SCKSPIClock排针P5的PA54MOSISPISlaveDataInput排针P5的PA75MISOSPISlaveDataOutput,withtri-stateoption排针P5的PA66IRQMaskableinterruptpin.Activelow排针P5的PA37VDDPowerSupply(+1.9V-+3.6VDC)电源3v3-第5页-8VSSGround(0V)电源GND接口这个例程采用的是STM32的SPI1接口,但其中的硬件SPI1-CSN端口(用于片选)已经在2M-FLASH上采用,所以本实验用一个空闲端口PA1用作无线模块的片选,由软件产生片选信号。
请注意区分这个模块的CSN片选信号与CE使能信号的功能。
CSN端口是SPI通讯协议中的片选端。
多个SPI设备可以共用STM32的SCK,MISO,MOSI端口,不同的设备间就是用CSN来区分。
CE实际是NRF24L01的芯片使能端,通过配置CE可以使NRF24L01进进入不同的状态。
如下图示:
截图来自:
nRF24L01P(新版无线模块控制IC).PDF,page24.9.3代码分析代码分析这个实验用到两个代码,主机和从机的代码驱动是一样的,区别只是main中函数调用的流程不一样,从机接收模式的时候,相应的主机在发送模式。
附从机流程图:
-第6页-下面以的从机的代码为例进行分析。
首先要添加用的库文件,在工程文件夹下Fwlib下我们需添加以下库文件:
1.stm32f10x_gpio.c2.stm32f10x_rcc.c3.stm32f10x_usart.c4.stm32f10x_spi.c还要在stm32f10x_conf.h中把相应的头文件添加进来:
1.#includestm32f10x_gpio.h2.#includestm32f10x_spi.h3.#includestm32f10x_rcc.h4.#includestm32f10x_usart.h-第7页-进入main函数,边看代码边了解程序的流程:
1.intmain(void)2.3./*串口1初始化*/4.USART1_Config();
5.6./*SPI接口初始化*/7.SPI_NRF_Init();
8.9.printf(rn这是一个NRF24L01无线传输实验rn);
10.printf(rn这是无线传输从机端的反馈信息rn);
11.printf(rn正在检测NRF与MCU是否正常连接。
rn);
12.13./*检测NRF模块与MCU的连接*/14.status=NRF_Check();
15.if(status=SUCCESS)16.printf(rnNRF与MCU连接成功rn);
17.else18.printf(rn正在检测NRF与MCU是否正常连接。
19.20.while
(1)21.22.printf(rn从机端进入接收模式rn);
23.NRF_RX_Mode();
24.25./*等待接收数据*/26.status=NRF_Rx_Dat(rxbuf);
27.28./*判断接收状态*/29.if(status=RX_DR)30.31.for(i=0;
i4;
i+)32.33.printf(rn从机端接收到主机端发送的数据为:
%drn,rxbufi);
34./*把接收的数据+1后发送给主机*/35.rxbufi+=1;
36.txbufi=rxbufi;
37.38.39.printf(rn从机端进入自应答发送模式rn);
40.NRF_TX_Mode();
41.42./*不断重发,直至发送成功*/43.do44.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函数就不需要再调用啦,当然,再调用一次也是没问题的。
-第8页-关于USART1_Config()函数,是用来配置串口的,关于这两个函数的具体讲解可以参考前面的教程,这里不再详述。
接着进入SPI_NRF_Init()函数是怎样配置STM32的SPI接口的:
1.voidSPI_NRF_Init(void)2.3.SPI_InitTypeDefSPI_InitStructure;
4.GPIO_InitTypeDefGPIO_InitStructure;
5.6./*使能GPIOB,GPIOD,复用功能时钟*/7.RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO,ENABLE);
8.9./*使能SPI1时钟*/10.RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);
11.12./*配置SPI_NRF_SPI的SCK,MISO,MOSI引脚,GPIOA5,GPIOA6,GPIOA7*/13.GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
14.GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
15.GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
/复用功能16.GPIO_Init(GPIOA,&
GPIO_InitStructure);
17.18./*配置SPI_NRF_SPI的CE引脚,GPIOA2和SPI_NRF_SPI的CSN引脚:
NSSGPIOA1*/19.GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_1;
20.GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
21.GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
22.GPIO_Init(GPIOA,&
23.24./*配置SPI_NRF_SPI的IRQ引脚,GPIOA3*/25.GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
26.GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
27.GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
/上拉输入28.GPIO_Init(GPIOA,&
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;
/主模式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;
/第1个边沿有效,上升沿为采样时刻38.SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;
/NSS信号由软件产生39.SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_8;
/8分频,9MHz40.SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;
/高位在前41.SPI_InitStructure.SPI_CRCPolynomial=7;
42.SPI_Init(SPI1,&
SPI_InitStructure);
43.44./*EnableSPI1*/45.SPI_Cmd(SPI1,ENABLE);
46.-第9
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 死角 stm32 中级 2.4 无线 NRF24L01