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

注册于 3 年前

回答
125
文章
10
关注者
3

和其他外部 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 模式

wm_psram_config (1) ; psram_init (PSRAM_QPI) ; 初始化只需要调用这两个接口就行了, wm_psram_config 根据实际使用的 io 选择哪一组, 使用的时候, 起始地址是 0x30000000, 由于没有做到内存管理里, 所以无法向普通内存一样动态申请释放, 需要单独指定地址, 自己管理, 其他的操作就和普通内存一样了, 比如 memcpy, memset 之类的.

发布
问题