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,芯片可以软件设置空闲模式、关机模式,易于节能设计。适合工业数据采集、无线报警及安全系统等诸多领用。
基于stm32f103zet6之NRF905无线模块的学习
一、硬件
nrf905这个芯片小编们就不谈了,涉及到高频、射频是比较复杂,主要针对如何使用这个模块谈一谈
这是涉及到小编们编程的引脚图, 其中uclk在这里不用,下面请看管脚图
总结一下这个管脚表的比较重要的信息如下:
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、首先看小编的主函数,很简单
注意这个模式
B、然后就是这个配置NRF905的函数,这个可是关键啊,具体数据的选择,最好是能看一下芯片手册,这里小编把代码贴出来
其实简单来说给它发的内容就是:
这就是根据寄存器的格式含义来的,其实也没有什么好说的,但是小编总是怀疑芯片手册上有些问题,那个应该是433.0MHZ
C、接下来看小编们是怎么实现发送数据的吧,小编把小编的代码贴出来,然后对着分析就好了。
上述的printf函数都是小编加上的打印函数,方便调试的!
大家可能好奇之前的模式设置是不是出问题了,心想,当设置为发送的时候应该是两个都选择为高啊,但是这里要告诉你,传输数据的时候,小编是这样理解的,选择模式的时候
先将EN失能。然后当小编们通过SPI写入了数据之后才使用这句
这样就是为了消除干扰吧,小编是这样想的。
D、最后贴上部分驱动函数