接触cc1101这款无线模块刚好一个月的时间了,从最开始的无从下手,到慢慢可以套用一点程序,读写一个寄存器,再到收发数据,实在不易。回头看看和老师的聊天记录,以及和唐的一些学习,也是他们一步步的指导我如何调试,这一小段学习经历,必须记录下来,这是对自我的反思,也为了以后遇到问题时,能够回来看看获取灵感。
在这过程有个问题是,遇到问题不跟老师说,也可以说自己不知道该如何去问所遇到的问题,这是最不可有的。
一、无从下手
当老师让我来调试usb电路板时,我是没有任何信心的,为什么呢?因为我那时连一个流水灯都得看示例程序(现在才有些领悟要想写一个程序,先得明白它的工作流程再去写)而现在突然让我做难了好几个级别的项目,这不是强行写程序嘛。这我肯定写不了,当时心里就有种被吓到的感觉。所以也如了自己心意,做了好几天,没有任何进展,而师父那几天又催促,实在没辙了,找上了唐。
在找唐之前,我连这个模块最重要的spi都没弄懂,对工作流程也是一知半解。经过和他的几天学习之后,工作流程逐渐的清晰起来。也知道了怎样调用函数。
二、读写寄存器
了解一些工作流程后,就开始读写寄存器,在这过程遇到了很多问题,消耗了大概十天时间,下面把在读写寄存器中遇到的问题和解决方法列出来。
遇到问题:如何读写寄存器?
解决方法:调用读写寄存器函数,如下图:
读写寄存器遇到问题:寄存器读到的值为255
如何解决:如果读出来总是255,可能spi数据输入管脚miso有问题。查看miso引脚,在程序运行的时候,mosi有变化,而miso一直是高电平。原来是miso在端口初始化程序里定义成输出管脚了。最终读写寄存器问题总算解决。
反思:要一步步的查找原因,查看各种不正常的现象,而不是一顿乱搞。
三、spi模块给usb模块发送数据
遇到问题:在主程序内调用了发送数据程序,但一直在程序里的两条语句循环,如下图
循环解决方法:一步一步设置断点进行调试,如:断点设在最后那个halspistobe可以运行到不?那就是能够跳出这个while,运行到到下面的halspistrobe?师父是从这几条断点,判断发送正常。
遇到问题:总算是能收到数据,但收到的数据出现乱码。这个问题在店家的资料有程序说明,之前有看过几遍,但当时没有想到这点。
解决方法:根据卖家的格式修改,自己模块发送数据成功。
四、自己模块接收买的模块的数据
接收程序是一大坑,坑了师父,师父在一开始提醒了我可能接收的格式和发送格式要一致。
遇到问题:接收和发送一样,又在两条语句循环。如图
自己模块接收如何解决:师父让我读一个寄存器,这个函数是读模块状态,非常好用,可以根据它来看程序是否有问题。进入接收后,你加这个函数看看无线模块是否处于接收状态。halSpiReadStatus(CCxxx0_MARCSTATE)CCxxx0_MARCSTATE为0x35,读该状态寄存器的返回值的bit4:0为CC1101当前状态(0x00:SLEEP 0x01:IDLE 0x0D:RX 0x13:TX)
加进去上面那条函数后,看到返回值为13,一开始以为是进去了发送状态,其实是13十进制显示,十六进制是0d,状态没毛病。
然后我调用函数后,想用字母a来读这个函数返回值,其实错了。师父说:函数括号内必须是寄存器地址,不能随便写0。a=那行可以不要,上面那行前直接加个a=,就可以了。
遇到问题:接收不到数据
如何解决:读寄存器函数read写成了rend。这个函数定义错了,不是halspirendreg,应该是halspireadreg,改过来。改过来后用自己的两个模块能互发了。哎,以后一定要注意这种低级错误。
在这个问题出现的时候,我十分消极,没有任何积极性,觉得是我解决不了的,有师父帮忙就交给师父,我想办法肯定比不上他,干脆也就不想了,懒散了,而师父,一直都没放弃。
遇到问题:用买的模块发送数据,自己的模块还是接收不到。
如何解决:换了台电脑,可以接受到,但有些乱码。更改和发送数据一样的格式,可以正常接收。
无线模块收发总算搞完,耗费时间一整月。虽然不易,但内心很是开心,这也许是成功一小步的原因吧。下面开始新的学习,调试电子桌牌。成功只是把遇到的问题不断去解决而已。
发送的数据是可变长度,调用这个函数,始终运行不了。
反思:大部分问题都是自己的粗心啊,坑了老师
网友评论