2.4G收发

来源:互联网 发布:利润算法 编辑:程序博客网 时间:2024/05/22 16:05

        用MSP430G系列芯片控制24L01已经很长时间了,如此简单的功能,反反复复,拖拖拉拉搞了差不多半年的时间。可是悲剧的是,近日接到新的需求才发现,搞了这么久的东西,也只不过是调通了430控制24L01的发射部分,接收部分还从来没有涉足。不过还好,关于2.4G的收发之前在别的设备上有调试成功的经验,所以还是有例可循的。

       MSP430G2553控制24L01+的接收代码是在发射+SHT11温湿度传感器控制的基础上增加的功能,代码很快就修改完毕了,但是同样配置的代码,24LE1接收时成功的,但是2553的板子却始终不见任何接收的响应。仿真一步步跟踪,查找问题根本原因,只是发现了读到的状态寄存器值不正确,感觉像是24L01根本没有工作,可是之前调试它明明就是工作了啊。于是对了24LE1接收上每一次写操作的返回值查看2553每一次操作的返回值,是的,状态寄存器的值确实不正确。穷途末路的时候想到,看看之前G2212控制的24L01寄存器的状态是否正确,也是这样的灵机一动,给我了希望。单步跟踪的时候发现了问题所以,原来是在代码移植的时候忘记修改输入MISO管脚所对应的IO引脚了。突然就联想到了之前看过别人写的代码,为什么要多此一举专门将读某一个IO管脚的输入值设置为宏定义了,原来是为什么了避免对代码本身的修改,将所有的移植修改操作都放在了宏定义处。

       IO输入引脚改好了之后,看到了希望,因为状态寄存器的值正确了,但是程序还是很难进入24L01接收中断,再仔细对比代码,移植的代码中接收模式设置完成之后缺少一个DELAY(1)的操作,因为在发射函数的注释中看到这个操作主要是为了防止数据包发射不成功,就想当然的以为既然这个是接收设置的函数,而且也不希望发ACK包,这个操作的有无也就不那么重要了。把这个操作加上之后一切就顺利成章的走上正轨,终于可以接收了,迈出了成功的第一步。

        在调试接收功能的时候为了防止其他的操作对它的影响,把其他的功能全部都屏蔽了,接下来要进行的操作就是整理代码,向最终功能靠近。先是放开发射功能,这其中也出现了一些小插曲。因为代码希望屏蔽2.4G的自动回复功能,但是发射地址设置的函数中又同时设置了发射地址和用于接受自动回复数据包的数据通道0的地址,所以当两个功能同时打开时,接收功能就会收到阻碍。

        最后一步操作打开发射功能代码,知道这一步修改,之前的接收功能都是可是正常运行的。打开了发射功能之后,接收部分仍然可以正常工作,这是让人欣慰的,可是发射部分却无法正常工作了。又一次陷入痛苦的僵局,思考,仔细思考,对比,详细对比…………。又一个漫长的时间,原因浮出水面。每一次发射之前CE都需要置低,当所有发射前期操作准备就绪后才会将CE置高,将数据发出。然而结合了收发操作的程序,在每次接受模式设置完成后都将CE置高,而发射部分也没有在数据准备就绪前将CE置低,这个应该就是问题的原因所在了。

        这就是今天遇到的一系列问题,总之到目前为止还是卓有成效的,欣慰!!!