0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >工业控制 > 基于stm32f103zet6之NRF905无线模块的学习设计方案

基于stm32f103zet6之NRF905无线模块的学习设计方案

来源: elecfans
2021-10-21
类别:工业控制
eye 21
文章创建人 拍明

原标题:基于stm32f103zet6之NRF905无线模块的学习设计方案

  stm32f103zet6简介

  STM32F系列属于中低端的32位ARM微控制器,该系列芯片是意法半导体(ST)公司出品,其内核是Cortex-M3。

  该系列芯片按片内Flash的大小可分为三大类:小容量(16K和32K)、中容量(64K和128K)、大容量(256K、384K和512K)。

  芯片集成定时器,CAN,ADC,SPI,I2C,USB,UART,等多种功能。

  NRF905简介

  nRF905是挪威Nordic公司推出的一款单片射频发射器芯片,采用32引脚5mm&TImes;5mm QFN封装,工作于433、868、915MHz 3个ISM(工业、科学和医学)频道,其中国内433频段可以免费使用。nRF905由频率合成器、接收解调器、功率放大器晶体振荡器、调制器等功能组成,不需要外加声表滤波器也可以有良好的通信效果。nRF905使用SPI接口可以和任何MCU进行通信,其中地址、输出功率和通信频道可通过程序进行配置,所以可以用于多机通信。

  nRF905融合了ShockBurstTM技术,可以自动处理数据包字头,且内置CRC校验功能,确保数据可靠传输。nRF905功耗很低,在以-10dBm的功率发射时,工作电流也只有11mA;而对应接收机的工作电流只有12.5 mA,芯片可以软件设置空闲模式、关机模式,易于节能设计。适合工业数据采集、无线报警及安全系统等诸多领用。

  

image.png


  基于stm32f103zet6之NRF905无线模块的学习

  一、硬件

  nrf905这个芯片小编们就不谈了,涉及到高频、射频是比较复杂,主要针对如何使用这个模块谈一谈

  

基于stm32f103zet6之NRF905无线模块的学习


  这是涉及到小编们编程的引脚图, 其中uclk在这里不用,下面请看管脚图

  

基于stm32f103zet6之NRF905无线模块的学习


  总结一下这个管脚表的比较重要的信息如下:

  1、nrf905和单片机通信使用的是SPI协议,小编这里用的是软件模拟spi,硬件spi有其他用途

  2、电源3.3V没有问题,IO口电压完全兼容匹配,输出电流也是没有问题的

  3、CD是载波检测信号,意思是当小编们的模块作为接收的时候,一旦它接收到发射模块同一个频段的信号时,该引脚会被nrf905置高,平常为低!

  4、AM是地址匹配的意思,当作为接收模块的时候,当接收地址和发射地址匹配的时候,那么该引脚会被nrf905置高,平常为低!

  5、DR表示数据接收或者发送成功!当一个正确的数据包接收完毕, RF905自动移去字校验位,然后把DR引脚置高,平常为低!

  注意了:CD、AM、DR3个引脚的状态在小编们调试的时候是非常重要的,所以充分利用这几个引脚的功能!

  硬件方面需要注意的地方小编们已经说完了,接下来分析小编的程序!

  二、软件

  首先是发送流程:

  1、当微控制器有数据要发送时,通过SPI协议将地址和要发送的数据送传给RF905,SPI接口的速率在通信协议和器件配置时确定;

  2、微控制器置高TRX_CE和TX_EN,这就设置为了发送数据模式

  3、RF905发送流程:

  (1) 射频寄存器自动开启;

  (2) 数据打包(加字头和CRC校验

  (3) 发送数据包;

  (4) 当数据发送完成,

  (1)(2)俩步自动完成!

  4、AUTO_RETRAN被置高,RF905不断重发,直到TRX_

  5、当TRX_CE被置低,RF905发送过程完成,自动进入空闲模式。

  注意:ShockBurstTM工作模式保证,一旦发送数据的过程开始,无论

  TRX_EN和TX_EN引脚是高或低,发送过程都会被处理完。只有在前一

  个数据包被发送完毕,RF905才能接受下一个发送数据包。

  然后是接收流程:

  1、当 TRX_CE 为高、TX_EN 为低时,RF905 进入 ShockBurstTM 接收模式;

  2、650us 后,RF905 不断监测,等待接收数据;

  3、当 RF905 检测到同一 频段的载波时,载波检测引脚被置高;

  4、当接收到一个相匹配的地址,AM 引脚被置高;

  5、当一个正确的数据包接收完毕, RF905 自动移去字头、地址和 CRC校验位,然后把 DR 引脚置高

  6、微控制器把 TRX_CE 置低,nRF905 进入空闲模式;

  7、 微控制器通过 SPI 口,以一定的速率把数据移到微控制器内;

  8、 当所有的数据接收完毕,nRF905 把 DR 引脚和 AM 引脚置低;

  9、nRF905 此时可以进入 ShockBu rstTM 接收模式、ShockBurstTM 发送模式或关机模式。 当正在接收一个数据包时,TRX_CE 或 TX_EN 引脚的状态发生改变,

  RF905 立即把其工作模式改变,数据包则丢失。

  需要注意的是:小编们设置接收模式的时候,是需要先把数据写入nrf905模块,然后才使能发送引脚的!!!

  接下来就是拿具体的程序来分析了

  A、首先看小编的主函数,很简单

  

基于stm32f103zet6之NRF905无线模块的学习


  注意这个模式

  B、然后就是这个配置NRF905的函数,这个可是关键啊,具体数据的选择,最好是能看一下芯片手册,这里小编把代码贴出来

  

基于stm32f103zet6之NRF905无线模块的学习


  其实简单来说给它发的内容就是:

  

基于stm32f103zet6之NRF905无线模块的学习


  这就是根据寄存器的格式含义来的,其实也没有什么好说的,但是小编总是怀疑芯片手册上有些问题,那个应该是433.0MHZ

  C、接下来看小编们是怎么实现发送数据的吧,小编把小编的代码贴出来,然后对着分析就好了。

  

基于stm32f103zet6之NRF905无线模块的学习


  上述的printf函数都是小编加上的打印函数,方便调试的!

  大家可能好奇之前的模式设置是不是出问题了,心想,当设置为发送的时候应该是两个都选择为高啊,但是这里要告诉你,传输数据的时候,小编是这样理解的,选择模式的时候

  先将EN失能。然后当小编们通过SPI写入了数据之后才使用这句

  

基于stm32f103zet6之NRF905无线模块的学习


  这样就是为了消除干扰吧,小编是这样想的。

  D、最后贴上部分驱动函数

  

基于stm32f103zet6之NRF905无线模块的学习


  

基于stm32f103zet6之NRF905无线模块的学习


  

基于stm32f103zet6之NRF905无线模块的学习


  

基于stm32f103zet6之NRF905无线模块的学习


  

基于stm32f103zet6之NRF905无线模块的学习


责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯

方案推荐
基于MC33771主控芯片的新能源锂电池管理系统解决方案

基于MC33771主控芯片的新能源锂电池管理系统解决方案

AMIC110 32位Sitara ARM MCU开发方案

AMIC110 32位Sitara ARM MCU开发方案

基于AMIC110多协议可编程工业通信处理器的32位Sitara ARM MCU开发方案

基于AMIC110多协议可编程工业通信处理器的32位Sitara ARM MCU开发方案

基于展讯SC9820超低成本LTE芯片平台的儿童智能手表解决方案

基于展讯SC9820超低成本LTE芯片平台的儿童智能手表解决方案

基于TI公司的AM437x双照相机参考设计

基于TI公司的AM437x双照相机参考设计

基于MTK6580芯片的W2智能手表解决方案

基于MTK6580芯片的W2智能手表解决方案