abcd
abcd - 认证专家
我只是个路过的老年人~

注册于 3 年前

回答
156
文章
11
关注者
2

fields 这个变量的结构体定义 struct ble_hs_adv_fields 里除了 uuids16 外也有 name, 直接替换成 name 比较就可以, 要注意的是, 有些 server 的 name 是直接放在广播里的, 这种用被动扫描就可以, 有些是放在 response 里的, 这种就需要主动扫描来获取, tls_ble_gap_scan 的第一参数来设置主动还是被动扫描. 发送可以用 ble_gattc_write_flat 这个接口, 在 wm_ble_client_api_multi_conn_demo. c 里就是一个 client 连接多个 server 的 demo, 可以参考.

和其他外部 flash 是一样的, 理论值 10 万次擦写

可以, 如果是测试可以用标准固件, 然后通过串口 0 发送 AT 指令测试, AT+BTEN=1, 0 使能蓝牙系统, 然后发送 AT+ONESHOT=4 开启蓝牙配网服务, 然后用手机小程序配网就行了.

demo 目录下 wm_uart_demo. c
src/app/bleapp 目录下 wm_ble_server_api_demo. c

注释要表达的意思是, PB6~PB11 在 W800 和 W801 上都有封装出来, 所以都可以用作 sdio 功能, 而 PA9~PA14 只有 W801 上封装出来了, 在 W800 上没有, 所以 PA9~PA14 对应的 case1: 情况只有在使用 W801 时才能生效. 使用 W801 时具体用 PA9~PA14 还是 PB6~PB11, 可根据需求自行决定.

for (; ; )
{

tls_bitband_write (HR_GPIO_DATA,  11,  0) ; 
tls_bitband_write (HR_GPIO_DATA,  11,  1) ; 

}

image. png
image. png
image. png

测试可以进中断, 因为设置的打印延时时间是 1s, 远远大于定时器定时时间 5ms, 所以打印出来的值只能看到 4 和 5 很正常.

收发的最大长度是双方协商的 mtu 值, 可以在 ble_gap_evt_cb 连接成功 BLE_GAP_EVENT_CONNECT 调用 tls_bt_async_proc_func (BleServerConnExchangeMtu, NULL, 600) ; 主动发起 mtu 协商, 然后看下协商的结果是多少. image. png

片选软控制, 并不是用任何一个 IO 来拉高拉低, 需要用__HAL_AFIO_REMAP_SPI_CS 配置有片选功能的 pin 脚为 cs 后, 调用__HAL_SPI_SET_CS_LOW, __HAL_SPI_SET_CS_HIGH 来使用.

底层代码改了之后需要执行 make lib 编译才会生效, 然后再 make

AT+BTEN=1, 0, 第一个参数 1, 代表的就是串口 1, 如果是用串口 1 发送的 at 指令, 那发送后, 串口 1 就被设置成蓝牙 log 输出口了, 所以再发其他 at 指令就没办法识别了, 可以试下 AT+BTEN=255, 0, 或者其他串口号, 只要不是 1 就行.

可以看下 wm_ble_server_api_demo. c 里 wm_ble_server_demo_conn_param_update_slave 这个接口, 可以设置连接时间参数, 另外如果只用到蓝牙而没用到 wifi 功能的情况下, 还可以调用 tls_bt_ctrl_sleep 来使能蓝牙的 sleep 模式

发布
问题