一个AVR新手蓝牙模块调试的心路历程
简介
我在最近做了一个蓝牙小车,选用的是ATmega128,串口调试软件是安卓端的SPP(在网上搜能下载到),在蓝牙模块的调试上出现了很多意想不到的情况,与大家进行分享,希望大家能够从我掉进去的坑中跳过去(别像我一样那么惨)
PS:如果想看我BB的继续看即可,只需要代码的见文底
遇到的问题1——网上的例程不好用
我在第一次蓝牙模块调试中我选用了网上找到的ATmega128串口通信例程(因为卖家给我的调试例程是ATM32的),我烧录进去根本屁用没有。然后我放弃了从网上寻找例程的想法,将注意力转移到了手册上给出的调试例程。
遇到的问题2——烧录串口与蓝牙通信串口共用导致乱码
然后我寻找了ATmega128中文手册上的中文例程,采用了ISP下载编程接口进行下载,然后在我的SPP上出现了一个100+字符的乱码,并且出现芯片无法擦除的情况,经过与淘宝卖家的两次沟通,最后发现是蓝牙通信串口与ISP下载线使用的串口共用,导致烧录的数据直接到了我SPP上的乱码。然而,经手册查询我发现仅仅USART0才能实现异步通信,不想编程同步通信的我打消了换用USART1的方式,选择改变代码烧写方式。
遇到的问题3——波特率导致乱码
最后我改变使用JTAG-ICE下载线,然而通信虽然正常了但内容依旧乱码,我将软件接收和发送的格式改为十六进制,发现有规律,百度了一下发现为波特率出错导致的,我的晶振是8MHz,采用非倍速模式即U2X=0,蓝牙模块选用的是HC-06,默认波特率为9600,可以看到手册所给出的建议设置是51
至此我开始了反复常识不同的波特率来使我的蓝牙不乱码。
调试成功
经过反复的调试我最终波特率寄存器选择了60。当然可能和你的不一样,自己调一调可能得到的结果和我不同。我调试的代码就是简单的接受主机发送来的信息将信息原封不动的传回来而已。调试成功的我激动的不行。前前后后半个月的时间,有想过放弃,最后正确的时候真的激动到不行。
代码
我选择的是ICCAVR+AVRstudio的组合
最后将我调试成功的代码奉上,祝各位蓝牙模块调试成功:)
#include <iom128v.h>
#i