• Telink泰凌微TLSR8258蓝牙开发笔记(二)


    在开发过程中遇到了以下问题,记录一下

    1.在与ios手机连接后,手机app使能notify,设备与手机通过write和notify进行数据交换,但是在连接传输数据一端时间后,设备收到write命令后不能发出notify命令,打印错误码180 = 0xB4,GATT_ERR_DATA_PENDING_DUE_TO_SERVICE_DISCOVERY_BUSY,设备发送notify失败的原因是ios蓝牙master主机正在发现蓝牙服务,此时不允许发送notify数据。

    解决办法:出现这个错误后,将发送notify失败的数据保存到一个全局数组中,并保存数据长度,设置一个标记位为1,记录当前的系统时间,将此在主循环中轮询,如果检测到这个标记位为1且时间过了500ms,之后再重发一次之前notify失败的数据,就可以成功发送了。

    2.配置蓝牙串口唤醒口,cpu_set_gpio_wakeup (GPIO_WAKEUP_MODULE, Level_Low, 1);
    GPIO_WAKEUP_MODULE_HIGH;设置成低电平唤醒,上拉,每次进入睡眠都会IO抖动,造成毛刺,用逻辑分析仪抓TX、RX、CTS和RTS四根线,如下图:

    而如果配置成cpu_set_gpio_wakeup (GPIO_WAKEUP_MODULE, Level_High, 1);
    GPIO_WAKEUP_MODULE_LOW;,则不会出现这个问题

    但是我们的串口发送数据的时序已经确定是低电平唤醒,所以会遇到图一的问题,原因是上拉10K的控制中不要使用PC0~PC7,在deepsleep retention wakeup时会有短时间的抖动,产生毛刺,而我们用的串口IO和唤醒IO恰好是这几个。

     

    解决办法:如果在条件允许的情况下,更改硬件连线,需要将唤醒蓝牙的IO换成PA或者PB的IO口,不要用PC的IO口,如果不能修改硬件,那么就直接不用PM_DEEPSLEEP_RETENTION_ENABLE深度睡眠模式,将其定义改成0,从而使用suspend去做低功耗,功耗在50uA左右,深度睡眠模式功耗在5uA左右

  • 相关阅读:
    matlab做神经网络的步骤,用matlab实现神经网络
    『LeetCode|每日一题』---->二叉树剪枝
    macbook桌面文件丢失
    数学建模【多元线性回归模型】
    如何在Firewalld中为特定IP地址开放端口
    Java字符串常用操作
    守护健康之光 —— 小脑萎缩患者的生活指南
    安装Anaconda
    Sophon KG升级3.1:打破数据间壁垒,解放企业生产力
    Vue+iview 组件中通过v-for循环动态生成form表单进行表单校验
  • 原文地址:https://blog.csdn.net/zl374216459/article/details/133775738