在进行开发之前,首先确保Zephyr SDK和相关环境已经准备完成

并且成功导入到VS Code中的Repository里面

新建工程
在//zsdk/samples/wireless下面新建一个蓝牙透传的文件夹(bluetooth_1s_tx),在此文件夹中新建相关的源码工程。
工程结构如下:


其中main.c是主要的源码,其余的是一些配置文件,可以参考SDK中的例程
主要代码如下:
int main(void)
{
uint32_t tx_count = 0U;
int err;
printk("Bluetooth 1s TX sample startn");
printk("Payload: %sn", TX_PAYLOAD);
bt_conn_cb_register(&conn_callbacks);
err = bt_nus_cb_register(&nus_callbacks, NULL);
if (err) {
printk("Failed to register NUS callbacks: %dn", err);
return err;
}
err = bt_enable(NULL);
if (err) {
printk("Bluetooth init failed: %dn", err);
return err;
}
printk("Bluetooth initializedn");
err = start_advertising();
if (err) {
return err;
}
while (true) {
k_sleep(TX_INTERVAL);
if (!notifications_enabled) {
continue;
}
err = bt_nus_send(NULL, TX_PAYLOAD, strlen(TX_PAYLOAD));
if (err == 0) {
printk("Sent packet %un", tx_count++);
} else if ((err != -EAGAIN) && (err != -ENOTCONN)) {
printk("Failed to send packet: %dn", err);
}
}
return 0;
}
一气呵成,编译,下载,调试,报错……
打印的日志如下:
*** Booting Zephyr OS build nxp-v4.3.0 ***
Bluetooth 1s TX sample start
Payload: NXP BLE 1s data
ASSERTION FAIL [err == 0] @ WEST_TOPDIR/zephyr/subsys/bluetooth/host/hci_core.c:504
Controller unresponsive, command opcode 0xfc22 timeout with err -11
r0/a1: 0x00000003 r1/a2: 0x100124c7 r2/a3: 0x50039000
r3/a4: 0x00000003 r12/ip: 0x00000000 r14/lr: 0x100023a3
xpsr: 0x29000000
Faulting instruction address (r15/pc): 0x100023b2
这是因为在FRDM-MCXW71这个双核无线芯片上,NBU固件是给无线核使用的独立镜像,需要根据使用的无线协议栈来烧录对应的固件,所以想要成功差一步,烧写NBU固件。
在SDK中可以找到这个固件//modules/hal/nxp/zephyr/blobs/mcxw71/mcxw71_nbu_ble.sb3,只需要烧录进行即可,在烧录前需要将板子设置成ISP模块,因此在上电的时候按住SW3(ISP)
打开CMD,进入到SDK的根目录中,输入以下烧录命令如下:
C:\Users\XXX\.mcuxpressotools\.mcux-venv-3.12\Scripts\blhost.exe -p COMyyy -- receive-sb-file modules\hal\nxp\zephyr\blobs\mcxw71\mcxw71_nbu_ble.sb3
其中XXX更换成自己电脑的用户名,yyy更换为开发板对应的端口。
然后重新运行,发现就不会提示错误了,并且等待蓝牙的连接,当手机成功连接后,就开始定时发送数据了,若手机端手动断开连接也会提示断开了。
*** Booting Zephyr OS build nxp-v4.3.0 ***
Bluetooth 1s TX sample start
Payload: NXP BLE 1s data
Bluetooth initialized
Advertising as Z_BLE_1S_TX
Connected: 76:03:6D:56:C9:BA (random)
NUS notifications enabled
Sent packet 0
Sent packet 1
Sent packet 2
Sent packet 3
Sent packet 4
Sent packet 5
Sent packet 6
Sent packet 7
Sent packet 8
NUS notifications disabled
Disconnected: 76:03:6D:56:C9:BA (random), reason 0x13
Advertising failed to start: -12
需要注意的是,要将接收的UUID设置成6e400003-b5a3-f393-e0a9-e50e24dcca9e




我要赚赏金
