我看几款手指机器人都是采用BK3432方案,决定深入了解一下,结果在网上找到的资料甚少,按照我的印象一个堂堂国际公司不应该这么保守呢,结果该芯片原厂是上海博通(Beken)和博通(Broadcom)并没有任何关系,只是重名,着实令人汗颜,不过开头的疑惑就说得通了,国产IC厂商资料都相对封闭。

LYBB1S3模组

模组 唯一资料

在淘宝上购买过这个模组,卖家居然说没有任何资料,根据标签上的名称搜索到了一个引脚图,我真感觉我误入了某个神秘领域,这么多年少有购买一个模块完全0资料提供的。

资料仓库

资料都在Gitee这个仓库中:https://gitee.com/shenzhen_bo_core/BK3432_BLE_SDK_public

类别 文件名 说明 备注
串口烧录软件 bk_uart_writer_v1.57.rar    
HID烧录软件 BekenProgramV2.5.4.exe Hid Download Tool  
数据手册 BK3432使用快速入门 .pdf    
烧录说明 BK3432 Download By UART User’s Guide.pdf    

串口烧录

Gitee仓库中给的烧录工具是1.57,但是一直烧录失败,同一个Bin文件换成1.45就可以烧录了。

1.45 1.57
烧录成功 烧录成功

烧录地址到底是0x00002010还是0x00001010呢?串口更新手册上写的是前者,但是网上搜索到视频教程《bk3432最小系统_博通蓝牙BLE开发》是后者,而我成功烧录+并能正常运行的地址确实也是后者。

烧录成功 启动日志

经人指点,这两个地址都没有错,因为都是不同的boot指定的地址,不同的boot烧录地址不同,如下:

不同的烧录地址

SPI烧录

硬件链接 硬件链接
选择带merge的bin,因为其带bootloader否则启动不起来
配置信息
烧录中…
烧录成功

此时拔掉SPI烧录器,按RESET启动即可。

烧录板载例子ble_app_gpio_key_led

固件路径

bk3432_system_sw_v1.2/projects/ble_app_gpio_key_led/output/app/bk3432_ble_app_stack.bin

BLE连接控制

根据MAC地址确认搜索到该设备 连接 App控制数据示例

注:App控制数据示例8E000B00090A0A1E016443211234B3

接收代码部分

启动日志

app_sec_env.bonded = 0
motor_init
led_init
button_init
beep_pwm_init
beep_pwm_close
date:Mar 16 2025 
time:11:25:22  
system start 
power on or system reset
read_system_restart_num
system_restart_num_ have save to flash
now system_restart_num=3
RESTART_NUM_FLASH:
ff:ff:ff:ff:03:00:00:00:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:
app_oad_add_oads
app_oad_add_oads d = 9,s = 5
create_db status = 0
EnQueue value=1
sysState=LED_TEST
DeQueue eventType=STATE_CHANGE_EVENT
sysState:LED_TEST
appm_start_advertising_begin
appm_start_advertising_success
info.host.adv_data:
03ffff00
info.host.adv_data_len:4
info.host.adv_intv:100
ke_msg_send(cmd);
wdt_enable
16383

[21:25:41.550]收←◆app_test_and_printf_handler
EnQueue value=5
DeQueue eventType=TIMEOUT
led_open
h:17 ,m:9 ,s:0 ,w:4

烧录例子app_wechat

固件路径

BK3432_DesignKit_V17_0C0A\SDK\projects\ble_app_wechat\output\app\bk3432_ble_app_stack.bin

其它路径的不能启动,看来必须带stack

串口启动日志 App搜索到该设备

烧录例子ble_app_gatt_scan_advertising

固件路径

BK3432_DesignKit_V17_0C0A\SDK\projects\ble_app_gatt_scan_advertising\output\app\bk3432_ble_app_stack.bin

没有任何反应,启动不起来的样子。

关于MAC地址

采用SPI方式烧录时,因为默认会擦除所有空间,导致MAC地址变成默认的36:34:24:62:A2:6B,如果采用以下方式烧录程序可以保留Mac地址。

保留Mac地址烧录方式

至于默认Mac地址为何是36:34:24:62:A2:6B,目前还没有找到原因,只是观察到了这种现象。

我最终采用提自动烧录MAC地址:

烧录MAC地址方式

至于27ff0的来历,从串口烧录软件和代码中找出端倪

烧录MAC地址方式

Armino

估计能频繁看到这个词汇,但是还是故意装作看不到吧,因为它不支持BK3432。Armino 是博通集成推出的物联网开发框架,旨在支持博通集成 2022 年之后推出的各种物联网芯片, 同时兼容各种主流物联网操作系统,如 RT-Thread,AliOS,HarmoneyOS 等,Armino 默认支持 FreeRTOS。

PWM3

例子中启动了PWM0,这里是启动PWM3的改动内容

diff --git a/fml/fml_beep.c b/fml/fml_beep.c
index 425818e..c93353d 100644
--- a/fml/fml_beep.c
+++ b/fml/fml_beep.c
@@ -65,7 +65,7 @@
 
 PWM_DRV_DESC timer_desc;
 
-
+#define PWM_CH 3// 0 for p10  3 for p13
 
 void beep_pwm_init(void)
 {
@@ -77,21 +77,22 @@ void beep_pwm_init(void)
 //	icu_set_sleep_mode(1);
 	rwip_prevent_sleep_set(BK_DRIVER_TIMER_ACTIVE);
 
-	timer_desc.channel = 0; //p10           				  
+	timer_desc.channel = PWM_CH; //p10           				  
     timer_desc.mode    = 1<<0 | 1<<1 | 0<<2 | 0<<4;   
 	timer_desc.pre_divid    = 0; 
 	
     timer_desc.end_value  = 16;//32; 2k                      
-    timer_desc.duty_cycle = 8;//   占空比50%
+    timer_desc.duty_cycle = timer_desc.end_value/2;//   占空比 50%
 	
 //	timer_desc.end_value  = 8;//32; 2k                      
 //    timer_desc.duty_cycle = 4;//   占空比50%
 	
 //   timer_desc.p_Int_Handler = user_timer_cb;  	
 
-	REG_AHB0_ICU_PWMCLKCON |= (1<<1);
-    REG_AHB0_ICU_PWMCLKCON &= ~(7<<12);
-    REG_AHB0_ICU_PWMCLKCON |= (8<<12);	
+	// ??PWM3??
+	REG_AHB0_ICU_PWMCLKCON |= (1<<3);
+	REG_AHB0_ICU_PWMCLKCON &= ~(7<<18);
+	REG_AHB0_ICU_PWMCLKCON |= (8<<18);
 }
 
 void beep_pwm_open(void)
@@ -108,7 +109,7 @@ void beep_pwm_close(void)
 	UART_PRINTF("%s\r\n",__func__);	
 	
 	rwip_prevent_sleep_clear(BK_DRIVER_TIMER_ACTIVE);
-	pwm_disable(0);//p10
+	pwm_disable(PWM_CH);//p10
 
 	gpio_config(BEEP_PIN, OUTPUT, PULL_HIGH);	
 	gpio_set(BEEP_PIN, 1);	//蜂鸣器关闭时,设置引脚为上拉输出高电平,消除嗓音
diff --git a/fml/fml_beep.h b/fml/fml_beep.h
index 312e839..e9c613c 100644
--- a/fml/fml_beep.h
+++ b/fml/fml_beep.h
@@ -6,7 +6,7 @@
 #define BEEP_H_
 
 
-#define BEEP_PIN	0x10//p10
+#define BEEP_PIN	0x13//p10
 
 #define BEEP_EN 	1