問題現(xiàn)象:
軟件設(shè)置使能HAL_SLEEP功能, 并且在初始化時(shí)使能了GPIO喚醒功能,GPIO開啟下降沿中斷功能。當(dāng)GPIO有中斷產(chǎn)生時(shí),有時(shí)軟件會(huì)復(fù)位,有時(shí)不會(huì)。如果不使能HAL_SLEEP功能, GPIO中斷不會(huì)導(dǎo)致軟件復(fù)位。
芯片型號(hào):CH582
軟件版本:
CH58x_BLE_LIB_V1.30
MESH_LIB_V1.5
問題現(xiàn)象:
軟件設(shè)置使能HAL_SLEEP功能, 并且在初始化時(shí)使能了GPIO喚醒功能,GPIO開啟下降沿中斷功能。當(dāng)GPIO有中斷產(chǎn)生時(shí),有時(shí)軟件會(huì)復(fù)位,有時(shí)不會(huì)。如果不使能HAL_SLEEP功能, GPIO中斷不會(huì)導(dǎo)致軟件復(fù)位。
芯片型號(hào):CH582
軟件版本:
CH58x_BLE_LIB_V1.30
MESH_LIB_V1.5
理論上不會(huì)出現(xiàn)這個(gè)問題,開啟HAL_SLEEP功能時(shí),芯片會(huì)被喚醒。默認(rèn)使用的是sleep模式,shutdown模式喚醒后芯片會(huì)復(fù)位。
1、下載官方最新的EVT例程;
2、PM例程有完整的GPIO喚醒,可以參考一下。同時(shí)使用PM的例程開啟相應(yīng)的睡眠模式,看看是否會(huì)喚醒;
3、可以打印一下復(fù)位狀態(tài)寄存器,看看相應(yīng)的值為多少。
這個(gè)問題我遇到過,而且可以復(fù)現(xiàn):
產(chǎn)生脈沖的源碼
以下是我的記錄
-------------------------------------------------------------------------------------------------------------
## 中斷IO測試工程
用于產(chǎn)生一個(gè)負(fù)脈沖給中斷IO,測試單片機(jī)是否復(fù)位
### 問題現(xiàn)象
IO配置成中斷模式,并在BLE peripheral例程中開啟HAL_SLEEP,給中斷IO一個(gè)us級(jí)的負(fù)脈沖,MCU立即復(fù)位
### 處理方法
關(guān)機(jī)前再配置IO中斷(正常工作時(shí)關(guān)閉中斷)。
我的也是使用的藍(lán)牙從機(jī),PA10作為IO下降沿喚醒,不開睡眠的時(shí)候,正常,開睡眠的時(shí)候,會(huì)出現(xiàn)重啟現(xiàn)象,重啟的寄存器R8_RESET_STATUS為0x01,上電復(fù)位。
檢查代碼是否為最新的,目前官網(wǎng)更新的最新為1.9版本。
先使用PM例程,配置SLEEP模式,其他睡眠模式屏蔽,并驗(yàn)證。
在peripheral例程測試的時(shí)候,只需要加上GPIO的配置函數(shù)即可,并開啟HAL_SLEEP。GPIO觸發(fā)的時(shí)候,注意喚醒后再將GPIO置為浮空的狀態(tài)。
我目前也遇到了按鍵芯片重啟這個(gè)問題,用ch592?peripheral例程測試的時(shí)候,加上GPIO的配置函數(shù)即可,并開啟HAL_SLEEP。
如果是作為遙控器使用,喚醒后gpio設(shè)置為浮空狀態(tài),還怎么檢測下降沿呢?
并且,這個(gè)重啟現(xiàn)象不一定什么時(shí)候出現(xiàn),隨機(jī)的。
我的意思是,按鍵的gpio如果設(shè)置為浮空狀態(tài),還如何進(jìn)入中斷呢?需要外部增加上拉電阻么?
目前我的遙控按鍵是設(shè)置為內(nèi)部上拉,下降沿中斷,在中斷中設(shè)置按鍵標(biāo)志位。
現(xiàn)在藍(lán)牙遙控器的基本功能都可以了,功耗也降下來了,就剩下這個(gè)按鍵復(fù)位的問題了。如果按鍵按的比較慢,芯片復(fù)位的機(jī)會(huì)小,因?yàn)榘存I有雙擊功能,會(huì)有多次快速按的時(shí)候,就很容易出現(xiàn)芯片復(fù)位。
您好,按鍵的GPIO設(shè)置為浮空輸入,是要實(shí)現(xiàn)什么樣的功能。作為按鍵,一般來講需要低電平表示按下,就內(nèi)部上拉;需要高電平表示按下,就內(nèi)部下拉,二選一。浮空輸入一般在采集ADC時(shí)使用。
如果一定要配置為浮空輸入,需要在休眠前固定電平為接近外部電平的狀態(tài),以減小漏電。喚醒后,在TMOS事件中重新配置為浮空輸入。EVT例程里懸空引腳一般固定為內(nèi)部上拉。
該按鍵有沒有被用作為休眠喚醒按鍵?
若使用了CH582,檢查代碼里有沒有啟用看門狗,按下按鍵復(fù)位時(shí),可能是由于IO不具備喚醒的條件,MCU無法進(jìn)入sleep休眠,導(dǎo)致進(jìn)入idle休眠,此時(shí)若啟用了看門狗,會(huì)引起看門狗復(fù)位。解決方法是在休眠前,判斷IO狀態(tài),比如說配置為下降沿喚醒,就在休眠前判斷IO是否已處于高電平的狀態(tài),若是則繼續(xù)休眠,若否則打斷休眠重新配置IO為內(nèi)部上拉再讀IO。
若使用了CH592,上述問題可以在配置R8_SLP_WAKE_CTRL I= RB_GPIO_WAKE_MODE后解決。
若該按鍵只是被用作按鍵中斷,檢查是否有代碼跑飛進(jìn)hard fault后復(fù)位的情況??梢园聪缕┛团挪椋?a >CH57x/CH58x/CH32V wch risc-v 芯片hardfault問題追蹤&程序卡死追蹤 - iot-fan - 博客園 (cnblogs.com)