是不是我TMOS任務(wù)定的太頻了,現(xiàn)在是外部每次會(huì)給一個(gè)250ms的GPIO中斷,每次中斷跑一次TMOS。
之前也有這種狀況,但那時(shí)候是因?yàn)檎加昧薘TC中斷,去掉之后藍(lán)牙能連接上,然后斷開藍(lán)牙讓它放著跑一段時(shí)間拿數(shù)據(jù),等再次想連藍(lán)牙的時(shí)候就會(huì)超時(shí)連接不上,只能重新上電才能進(jìn)一次藍(lán)牙。
是不是我TMOS任務(wù)定的太頻了,現(xiàn)在是外部每次會(huì)給一個(gè)250ms的GPIO中斷,每次中斷跑一次TMOS。
之前也有這種狀況,但那時(shí)候是因?yàn)檎加昧薘TC中斷,去掉之后藍(lán)牙能連接上,然后斷開藍(lán)牙讓它放著跑一段時(shí)間拿數(shù)據(jù),等再次想連藍(lán)牙的時(shí)候就會(huì)超時(shí)連接不上,只能重新上電才能進(jìn)一次藍(lán)牙。
注意不要在中斷函數(shù)中調(diào)用TMOS任務(wù),并且在中斷也不要處理過(guò)多的事件,可以中斷置標(biāo)志然后TMOS查詢進(jìn)行處理執(zhí)行任務(wù)。
其次如果有任務(wù)執(zhí)行時(shí)間比較長(zhǎng)的, 可以適當(dāng)?shù)膶⑦B接間隔給拉大一些,確保任務(wù)時(shí)長(zhǎng)小于連接間隔的一半。
BLE廣播間隔和連接間隔(CH582) - SweetTea_lllpc - 博客園 (cnblogs.com)
中斷只有一個(gè)gpio,用來(lái)給標(biāo)志觸發(fā),然后主循環(huán)檢測(cè)到標(biāo)志觸發(fā)TMOS任務(wù)。
用的外部晶振,現(xiàn)在發(fā)現(xiàn)的一個(gè)問(wèn)題是,用hal_sleep后,上電過(guò)幾秒后功耗會(huì)突然下降,我懷疑是這個(gè)原因?qū)е滤{(lán)牙連接不上。
找到問(wèn)題了,外部晶振在進(jìn)入休眠后再喚醒外部晶振沒(méi)起振
目前使用的喚醒方式有GPIO喚醒和RTC喚醒,使用內(nèi)外部晶振均可進(jìn)行喚醒的。
如使用藍(lán)牙功能則直接宏開啟HAL_SLEEP進(jìn)入睡眠即可。