是不是我TMOS任务定的太频了,现在是外部每次会给一个250ms的GPIO中断,每次中断跑一次TMOS。
之前也有这种状况,但那时候是因为占用了RTC中断,去掉之后蓝牙能连接上,然后断开蓝牙让它放着跑一段时间拿数据,等再次想连蓝牙的时候就会超时连接不上,只能重新上电才能进一次蓝牙。
是不是我TMOS任务定的太频了,现在是外部每次会给一个250ms的GPIO中断,每次中断跑一次TMOS。
之前也有这种状况,但那时候是因为占用了RTC中断,去掉之后蓝牙能连接上,然后断开蓝牙让它放着跑一段时间拿数据,等再次想连蓝牙的时候就会超时连接不上,只能重新上电才能进一次蓝牙。
注意不要在中断函数中调用TMOS任务,并且在中断也不要处理过多的事件,可以中断置标志然后TMOS查询进行处理执行任务。
其次如果有任务执行时间比较长的, 可以适当的将连接间隔给拉大一些,确保任务时长小于连接间隔的一半。
BLE广播间隔和连接间隔(CH582) - SweetTea_lllpc - 博客园 (cnblogs.com)
中断只有一个gpio,用来给标志触发,然后主循环检测到标志触发TMOS任务。
用的外部晶振,现在发现的一个问题是,用hal_sleep后,上电过几秒后功耗会突然下降,我怀疑是这个原因导致蓝牙连接不上。
找到问题了,外部晶振在进入休眠后再唤醒外部晶振没起振
目前使用的唤醒方式有GPIO唤醒和RTC唤醒,使用内外部晶振均可进行唤醒的。
如使用蓝牙功能则直接宏开启HAL_SLEEP进入睡眠即可。