2.4G无线射频通信模块nRF24L01+开发笔记(基于MSP430RF6989与STM32f0308)(1.(2)有错误,详见更正)
根据网上的nRF24L01+例程和TI提供的MSP430RF6989的硬件SPI总线例程编写程序,对硬件MSP-EXP430RF6989 Launch Pad+nRF24L01P射频模块(淘宝购买)进行调试。
1. nRF24L01+初始化寄存器配置失败的原因(2015年12月20日)(第2点是错误的)
(1) SPI总线的配置要和配对设备一致,详见《MSP430中SPI总线的两种实现方式》。
(2) 在nRF24L01+初始化寄存器配置的过程中,部分寄存器总出现写入失败(ENAA、RF_CH、CONFIG),保持缺省值的情况,而且情况不稳定,有时候可以成功。论坛里的网友反映是电源电压不稳造成的,为射频模块提供独立电源供电可以解决。
(本段结论错误)进一步测试发现,如果把CONFIG寄存器的配置放在其他nRF24L01+初始化寄存器配置之前,寄存器配置都可以成功,(林新华的《nRF24L01 试用实录》中的例程是这样的顺序,这样做功耗略大,但是并不明显)。研究Datasheet提供的nRF24L01+状态机发现,CONFIG寄存器不同于其他寄存器,它与CE信号可以共同控制nRF24L01+的工作模式。原参考例程中初始化配置的最后一步配置CONFIG使nRF24L01+工作在Standby-1模式下,而之前其他寄存器的配置都是在Power Down模式下完成的,而林新华例程的寄存器配置都是在Standby-1模式下完成的。由Datasheet可知,Power Down模式的工作电流是0.9uA,而Standby-1的模式工作电流是26uA。初步判断,在单片机和射频模块共用电源的情况下,Power Down模式的微弱工作电流极容易被单片机影响(或电源纹波本身影响),所以容易出现寄存器写入失败的情况。有待进一步在射频模块独立供电的状态下进行测试。
2、nRF24L01+初始化寄存器配置失败的原因(2015年12月22日)(更正)
进一步测试发现,一、2的结论是错误的。寄存器配置不成功的真正原因是MSP430的SPI总线的配置与nRF24L01+的规定不符。根据nRF24L01+的Datasheet中的SPI总线时序图,时钟信号在非活动状态下为低电平,而MSP430错误地设置为了非活动状态高电平。只要改写USCI_A的控制寄存器的对应控制位就可以改变这个设置。对于MSP430RF6989,USCI_A控制寄存器为UCA0CTLW0,控制位为UCCKPL,置0代表非活动状态低电平。
3、STM32下载失败( 报错There were warnings during download)的原因(2015年12月22日)
现象:STM32下载报错:There were warnings during download. 调试无法进入函数,程序在HAL_Tick程序中执行while循环。
原因:Flash loader未使能。之前调试中为了进行软件仿真,将Debugger->Setup选择为Simulator,之后再选回ST-LINK后,Flash loader使能自动取消了。
解决方法:IAR->Project option->Debugger->Download->"Use flash loade6r" 钩上。
4. IAR的C/C++ Compiler中的Optimization设置
程序编译优化选项,当希望程序不被优化时把Level选为None。
不希望被优化的情况:1)通过赋值语句精确延时 2)监控可能被优化的变量 3)停在可能被优化的断点。
5. RX_IRQ置位的时候STATUS寄存器读取的值保持0,原因未知。
6. 关于MSP430的IO口配置
(1)概述
After a BOR reset, all port pins are high-impedance with Schmitt triggers and their module functions
disabled to prevent any cross currents. The application must initialize all port pins including unused ones
(Section 10.3.2) as input high impedance, input with pulldown, input with pullup, output high, or output low
according to the application needs by configuring PxDIR, PxREN, PxOUT, and PxIES accordingly.
(2) 配置结束后的“PM5CTL0 &= ~LOCKLPM5; ”语句功能
This initialization takes effect as soon as the LOCKLPM5 bit in the PM5CTL register (described in the PMM
chapter) is cleared; until then, the I/Os remain in their high-impedance state with Schmitt trigger inputs
disabled.
Note that this is usually the same I/O initialization that is required after a wake-up from LPMx.5.
After clearing LOCKLPM5 all interrupt flags should be cleared (note, this is different to the wake-up from
LPMx.5 flow). Then port interrupts can be enabled by setting the corresponding PxIE bits.
(3) 配置时机
After a POR or PUC reset all port pins are configured as inputs with their module function being disabled.
Also here to prevent floating inputs all port pins including unused ones (Section 10.3.2) should be
configured according to the application needs as early as possible during the initialization procedure.
7. Watch窗口数组有一些元素显示为空
可能是Watch窗口没有刷新的原因,右键对应数组→任意切换Format,解决。(由于怀疑是数组没有赋值Debug了半天最终竟然是这个原因,心中一万只草泥马奔腾而过。)
8. nRF24L01+对电源的要求
经测试发现,nRF24L01+对电源要求比较高,要求电源电压噪声小。测试中使用MSP430FR6989的3.3V电源供电,在接收状态下出现将近一半概率的误码,在发送状态下可以成功发送。分析可能是接收状态下信号弱,解调过程中要求电源噪声小。在nRF24L01+模块的电源和地之间加一个1uf的电容可以大大改善,但是在5包32Bytes数据连续发送的情况下还是会偶然出现1~3个Bytes的误码,误码一般只有一位错误。使用独立电源供电(STM32的电源)可以完全解决。实际应用中应重点考虑nRF24L01+的供电电压噪声。
9. CRC校验
在10米左右的通信距离进行测试,打开CRC校验后,误码率为0,丢包率为3%左右。但打开CRC校验后发送一包的数据的时间比原来有所增加,大于600us,未进行详细测试。
10. 状态机+定时器模式
程序中采用定时器置位状态机标志位TimeFrame,再有main函数中的if语句轮询各个TimeFrame的值。这种模式下,如果主程序下某TimeFrame取值分支中的程序执行时间大于状态机时间,会产生错误。
11. USB串口底板+NRF24L01P与MCU+NRF24L01P通信的问题
由于USB串口底板的底层代码并不是开放的,所以应用了许多缺省设置,MCU程序中对NRF24L01P的设置必须完全一致才可以。比如我用的这一款底板把NRF24L01P设置为ACK使能,即EN_AA=0x01才可以通信。
2.4G无线射频通信模块nRF24L01+开发笔记(基于MSP430RF6989与STM32f0308)(1.(2)有错误,详见更正)的更多相关文章
- IOS开发笔记 - 基于SDWebImage的网络图片加载处理
前言: 在IOS下通过URL读一张网络图片并不像Asp.net那样可以直接把图片路径放到图片路径的位置就ok, 而是需要我们通过一段类似流的方式去加载网络图片,接着才能把图片放入图片路径显示. 这里找 ...
- Yocto开发笔记之《Tip-stdlib库函数strtod返回nan错误》(QQ交流群:519230208)
2015.04-imx_v2015.04_3.14.38_6ul_ga+g5d63276 (Jan 04 2016 - 18:07:08) FSL Community BSP : https://co ...
- iOS开发笔记 基于wsdl2objc调用asp.net WebService
1.准备 先下载待会要用到的工具 WSDL2ObjC-0.6.zip WSDL2ObjC-0.7-pre1.zip 我用的是WSDL2ObjC-0.6.zip 1.1搭建asp.net WebServ ...
- IOS开发笔记 - 基于wsdl2objc调用webservice
为了方便在ios下调用webserivce,找来了wsdl2objc这样一个开源的框架来解析webservice方便在ios下引用. 下面做个小例子. 1.首先是用Asp.net搭建一个测试的webs ...
- RF无线射频电路设计干货分享
1.概述:射频(RF)PCB设计,在目前公开出版的理论上具有很多不确定性,常被形容为一种“黑色艺术”.通常情况下,对于微波以下频段的电路(包括低频和低频数字电路),在全面掌握各类设计原则前提下的仔细规 ...
- [Openwrt 项目开发笔记]:Openwrt平台搭建(一)
[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 最近开始着手进行Openwrt平台的物联网网关设 ...
- 安卓开发笔记——自定义广告轮播Banner(实现无限循环)
关于广告轮播,大家肯定不会陌生,它在现手机市场各大APP出现的频率极高,它的优点在于"不占屏",可以仅用小小的固定空位来展示几个甚至几十个广告条,而且动态效果很好,具有很好的用户& ...
- [Openwrt 项目开发笔记]:Openwrt平台搭建(一)补遗
[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 昨晚上熬夜写了[Openwrt项目开发笔记]:O ...
- Hi3516开发笔记(一):海思HI3516DV300芯片介绍,入手开发板以及Demo测试
前言 目前主流国产芯片为RV11XX.RK33XX.Hi35XX系列,本系列开启Hi3516系列的开发教程. Hi3516DV300芯片介绍 Hi3516DV300为专业行Smart IP ...
随机推荐
- 160个crackme-之Acid burn.exe
工具: Ollydbg(OD) 中文版 运行: 我们拿到一个小程序时,总要看看它到底有什么功能,或者说它阻碍了我们什么,也就是寻找突破口! 这就是程序运行后的主界面 我们进入Serial/Name后, ...
- MySQL5.5绿色版1067
mysql的绿色安装版,按照很多文章进行配置,会出现 配置文件里面添加了 [client] default-character-set=utf8 [mysqld] default-character- ...
- 驱动插ring3线程执行代码
近日有在写一个小东西 需要在内核态中运行一个WIN32程序 之前提到的插入APC可以满足部分要求 但是一到WIN7 x86平台下就崩溃了WIN7下只能插入第三方的进程 一插入系统进程就崩溃,但是这样满 ...
- python类型转换、数值操作
类型转换 代码 1 函数 描述 2 int(x [,base ]) 将x转换为一个整数 3 long(x [,base ]) ...
- 字符串匹配的KMP算法
~~~摘录 来源:阮一峰~~~ 字符串匹配是计算机的基本任务之一. 举例来说,有一个字符串”BBC ABCDAB ABCDABCDABDE”,我想知道,里面是否包含另一个字符串”ABCDABD”? 许 ...
- MD5使用
MD5加密算法,即"Message-Digest Algorithm 5(信息-摘要算法)",它由MD2.MD3.MD4发展而来的一种单向函数算法(也就是HASH算法),它是国际著 ...
- Memcached(1)-----基本介绍
memcached memcached概述 memcached是LiveJournal旗下Danga Interactive公司开发的一款软件.memcached是一个高性能,分布式内存对象缓存系统, ...
- php 常用数组操作
php常用的数组操作函数,包括数组的赋值.拆分.合并.计算.添加.删除.查询.判断.排序等 array_combine 功能:用一个数组的值作为新数组的键名,另一个数组的值作为新数组的值 <?p ...
- C++重载流运算符,将存储结构体的vector直接写入文件
我们知道,当vector很大的时候,如果使用循环的方式将其中的元素写入文件将非常费时,因此有没有办法将vector一次性写入文件呢? 采用流运算符重载的方法可以做到,不仅基本类型的vector可以一次 ...
- jquery点击获取子元素ID值
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...