近日参加新唐活动,获得了最新蓝牙单片机M032BT系列的开发板首发体验活动。非常开心,感谢新唐。
以下是厂家提供的手册上的图片,跟M032BT开发板的外观看起来几乎一模一样。
刚收到板子没有开发资料,无从下手,默认的程序也没看到有蓝牙信号,以为板子有问题或者手机有问题呢。
今天收到了官方提供的开发资料,烧录后发现还是不行,竟然报错了。
In Hard Fault Handler
r0 = 0x0
r1 = 0xf5
r2 = 0x40061000
r3 = 0x3e
r12 = 0xffffffff
lr = 0x4a69
pc = 0x3548
psr = 0x21000015
我粗略看了一下程序,觉得没毛病啊。而且debug除错操作发现进入了
/* Initialize RF PHY */
RF_Init();
产生的错误,而产生这个错误是在BLE.lib的,我就急不可耐的给新唐技术通过官网的渠道发了咨询。
然后才认真的看芯片的技术手册和BLE操作的相关说明文档,然后对照程序一步一步的看,发现了问题所在。新唐的BLE.lib是绝对没问题的。
是我错以为这是新唐针对M032BT的例子了,原来不是,是针对M031BT的,我被下面三行代码迷惑了
#define _CHIP_M031BT 0
#define _CHIP_M032BT 1
#define _CHIP_SELECTION_ _CHIP_M031BT
以为厂家提供的代码已经在第二行设置为1了,没想到第三行才是坑。
需要修改成
#define _CHIP_M031BT 0
#define _CHIP_M032BT 1
#define _CHIP_SELECTION_ _CHIP_M032BT
根据技术手册,蓝牙模块是挂载在SPI0内部端口的
而该端口的初始化如下所示,如果默认是M031BT,则编译对应的M031BT的管脚,而这两个型号的内部管脚是不同的地址。因此需要做如上修改。
修改后,保存,重新编译烧录
串口打印消息:
----------------------------------
BLE demo: LED control start...
----------------------------------
BLE device address from UID: c0:00:b5:a1:47:09
Advertising...
这个时候打开手机蓝牙,发现已经可以看到我使用的这个工程的名字了:nuvoton_LED
安装新唐提供的APK软件,扫描,然后找到上面的蓝牙信号名字,单击连接,然后就可以控制LED的开关了。
在连接和开关断开的时候串口还打印出了相关信息
Disconnected, ID:0, Reason:0x13
Advertising...
Status=0, Connected to 78:77:f6:7d:a1:08
Connection updated
Status: 0, Interval: 6, Latency: 0, Supervision Timeout: 500
Connection updated
Status: 0, Interval: 39, Latency: 0, Supervision Timeout: 500
结合厂家提供的测试例程,可以看出通过蓝牙进行数据收发非常简单,这大大降低了基于蓝牙的单片机应用开发难度,非常完美的一款具备蓝牙收发功能的单片机。
奉上该例程的main.c以供欣赏。
|