零死角玩转stm32-中级篇9、2.4G无线(NRF24L01).pdf

上传人:b****3 文档编号:3213121 上传时间:2022-11-20 格式:PDF 页数:16 大小:1.04MB
下载 相关 举报
零死角玩转stm32-中级篇9、2.4G无线(NRF24L01).pdf_第1页
第1页 / 共16页
零死角玩转stm32-中级篇9、2.4G无线(NRF24L01).pdf_第2页
第2页 / 共16页
零死角玩转stm32-中级篇9、2.4G无线(NRF24L01).pdf_第3页
第3页 / 共16页
零死角玩转stm32-中级篇9、2.4G无线(NRF24L01).pdf_第4页
第4页 / 共16页
零死角玩转stm32-中级篇9、2.4G无线(NRF24L01).pdf_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

零死角玩转stm32-中级篇9、2.4G无线(NRF24L01).pdf

《零死角玩转stm32-中级篇9、2.4G无线(NRF24L01).pdf》由会员分享,可在线阅读,更多相关《零死角玩转stm32-中级篇9、2.4G无线(NRF24L01).pdf(16页珍藏版)》请在冰豆网上搜索。

零死角玩转stm32-中级篇9、2.4G无线(NRF24L01).pdf

-第2页-00、友情提示、友情提示零死角玩转零死角玩转STM32系列教程由初级篇初级篇、中级篇中级篇、高级篇高级篇、系统篇、系统篇、四个部分组成,根据野火STM32开发板旧版教程升级而来,且经过重新深入编写,重新排版,更适合初学者,步步为营,从入门到精通,从裸奔到系统,让您零死角玩转STM32。

M3的世界,与野火同行,乐意惬无边。

另外,野火团队历时一年精心打造的STM32库开发实战指南库开发实战指南将于今年10月份由机械工业出版社机械工业出版社出版,该书的排版更适于纸质书本阅读以及更有利于查阅资料。

内容上会给你带来更多的惊喜。

是一本学习STM32必备的工具书。

敬请期待!

-第3页-99、2.4G2.4G无线(无线(NRF24L01+NRF24L01+)9.1实验描述及工程文件清单实验描述及工程文件清单实验描述实验描述利用NRF24L01+无线模块,使两块STM32开发板实现无线传输数据。

用串口输出实验结果到pc。

硬件连接硬件连接PA4-SPI1-NSS:

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是否正常连接。

rn);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,&GPIO_InitStructure);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,&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;/主模式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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 财务管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1