可以设置一个标志位flag,定义的初始值为1,调用发送函数之前先判断该标志位是否为1,是则调用发送函数发送数据,否则不调用发送函数,每次调用发送函数之后就将该标志位清零。该标志位在发送完成的事件函数里置1,代码逻辑如下所示:
main.c ...... unsigned char flag = 1; void user_function(void) { ...... if(flag) { ble_nus_send_string(...); flag = 0; } ...... } ble_nus.c ...... extern unsigned char flag; void ble_nus_on_ble_evt(ble_evt_t const * p_ble_evt, void * p_context) { ...... case BLE_GATTS_EVT_HVN_TX_COMPLETE: ...... flag = 1; ...... break; ...... } ......
对于以上问题可以优先排除连接参数和代码逻辑问题,因为这些修改容易、成本低。如果问题依然存在就是天线、兼容性的问题了,后面再集中精力去解决。最后,如果有条件直接联系原厂的技术支持是最好的。