ch57xEvt的板子, 官方demo, 低功耗模式最低66uA, 與官方手冊相差太多, 求助工程師

板子是ch57XEvt? 191121, 上邊的ch330、1117等元件已經(jīng)去掉, 發(fā)光二極管也去掉了, 直接3.3v供電, 程序下載的是?CH579EVT\EVT\EXAM\PM下的demo程序, 萬用表測得各個(gè)模式中最低的耗電為0.066mA, 與手冊上的掉電模式0.2uA相差太大, 請問需要怎樣處理才能達(dá)到低于2uA的效果?


1621494735200711.jpg

1621494735184231.jpg



熱門產(chǎn)品 : USB3.0 HUB控制器:CH634

icon_pdf.gifCH57x原理圖.pdf

這是板子的原理圖


沒人嗎? 在線等回答


您好,可以參考:https://bbs.21ic.com/icview-2892728-1-1.html

所有的IO口初始化了嗎?可以參考EVT內(nèi)的PM文件夾例子。


就是用的EVT內(nèi)PM文件夾的例子



下邊是原理圖與電路板照片 ,紅色部分的均已移除

1621498790866758.png

1621498790615247.png



最新版的官方例程,?21ic帖子里面的配置都已具備

//--------------------------------------------
//Main.c?
//--------------------------------------------


void?DebugInit(void)		
{
????GPIOA_SetBits(GPIO_Pin_9);
????GPIOA_ModeCfg(GPIO_Pin_9,?GPIO_ModeOut_PP_5mA);
????UART1_DefInit();
}

int?main()
{
????DelayMs(2);?
????SetSysClock(?CLK_SOURCE_HSE_32MHz?);????????????//?設(shè)置外部32M做主頻
????GPIOA_ModeCfg(?GPIO_Pin_All,?GPIO_ModeIN_PU?);
????GPIOB_ModeCfg(?GPIO_Pin_All,?GPIO_ModeIN_PU?);
	
????GPIOB_SetBits(GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14);
????

/*?配置串口調(diào)試?*/???
????DebugInit();
????PRINT(?"Start?@ChipID=%02x\n",?R8_CHIP_ID?);
????DelayMs(200);?

#if?1????
????/*?配置喚醒源為?GPIO?-?PA6&PA5?*/
????GPIOA_ModeCfg(?GPIO_Pin_6|GPIO_Pin_5,?GPIO_ModeIN_PU?);
????GPIOA_ITModeCfg(?GPIO_Pin_6|GPIO_Pin_5,?GPIO_ITMode_FallEdge?);????????//?下降沿喚醒
????NVIC_EnableIRQ(?GPIO_IRQn?);
????PWR_PeriphWakeUpCfg(?ENABLE,?RB_SLP_GPIO_WAKE?);
#endif????
????
#if?1
????PRINT(?"IDLE?mode?sleep?\n");???
????DelayMs(1);
????LowPower_Idle();
????PRINT(?"wake..?\n");?
????DelayMs(500);
#endif????
????
#if?1
????PRINT(?"Halt_1?mode?sleep?\n");???
????DelayMs(1);
????LowPower_Halt_1();
/*
使用HSI/5=6.4M睡眠,喚醒時(shí)間大概需要?2048Tsys≈330us
HSE起振一般不超過1.2ms(500us-1200us),所以切換到外部HSE,需要?1.2ms-330us?這個(gè)時(shí)間可以保證HSE足夠穩(wěn)定,一般用于藍(lán)牙
DelayUs()函數(shù)時(shí)基于32M時(shí)鐘的書寫,此時(shí)主頻為6.4M,所以?DelayUs((1200-330)/5)????
*/
????if(!(R8_HFCK_PWR_CTRL&RB_CLK_XT32M_PON))?{?????//?是否HSE上電
????????PWR_UnitModCfg(?ENABLE,?UNIT_SYS_HSE?);???//?HSE上電
????????DelayUs((1200)/5);
????}
????else?if(!(R16_CLK_SYS_CFG&RB_CLK_OSC32M_XT)){???//?是否選擇?HSI/5?做時(shí)鐘源
????????DelayUs((1200-330)/5);
????}?
????HSECFG_Current(?HSE_RCur_100?);?????//?降為額定電流(低功耗函數(shù)中提升了HSE偏置電流)
????DelayUs(5/5);???????????????????????//?等待穩(wěn)定?1-5us
????SetSysClock(?CLK_SOURCE_HSE_32MHz?);
????PRINT(?"wake..?\n");?
????DelayMs(500);????
#endif????
????
#if?1
????PRINT(?"Halt_2?mode?sleep?\n");???
????DelayMs(1);
????LowPower_Halt_2();
/*
使用HSI/5=6.4M睡眠,喚醒時(shí)間大概需要?2048Tsys≈330us
HSE起振一般不超過1.2ms(500us-1200us),所以切換到外部HSE,需要?1.2ms-330us?這個(gè)時(shí)間可以保證HSE足夠穩(wěn)定,一般用于藍(lán)牙
DelayUs()函數(shù)時(shí)基于32M時(shí)鐘的書寫,此時(shí)主頻為6.4M,所以?DelayUs((1200-330)/5)????
*/
????if(!(R8_HFCK_PWR_CTRL&RB_CLK_XT32M_PON))?{?????//?是否HSE上電
????????PWR_UnitModCfg(?ENABLE,?UNIT_SYS_HSE?);???//?HSE上電
????????DelayUs((1200)/5);
????}
????else?if(!(R16_CLK_SYS_CFG&RB_CLK_OSC32M_XT)){???//?是否選擇?HSI/5?做時(shí)鐘源
????????DelayUs((1200-330)/5);
????}?
????HSECFG_Current(?HSE_RCur_100?);?????//?降為額定電流(低功耗函數(shù)中提升了HSE偏置電流)
????DelayUs(5/5);???????????????????????//?等待穩(wěn)定?1-5us
????SetSysClock(?CLK_SOURCE_HSE_32MHz?);
????PRINT(?"wake..?\n");?
????DelayMs(500);????
#endif????

#if?1
????PRINT(?"sleep?mode?sleep?\n");???
????DelayMs(1);
????LowPower_Sleep(?RB_PWR_RAM14K|RB_PWR_RAM2K?);???????//只保留14+2K?SRAM?供電
/*
使用HSI/5=6.4M睡眠,喚醒時(shí)間大概需要?2048Tsys≈330us
HSE起振一般不超過1.2ms(500us-1200us),所以切換到外部HSE,需要?1.2ms-330us?這個(gè)時(shí)間可以保證HSE足夠穩(wěn)定,一般用于藍(lán)牙
DelayUs()函數(shù)時(shí)基于32M時(shí)鐘的書寫,此時(shí)主頻為6.4M,所以?DelayUs((1200-330)/5)????
*/
????if(!(R8_HFCK_PWR_CTRL&RB_CLK_XT32M_PON))?{?????//?是否HSE上電
????????PWR_UnitModCfg(?ENABLE,?UNIT_SYS_HSE?);???//?HSE上電
????????DelayUs((1200)/5);
????}
????else?if(!(R16_CLK_SYS_CFG&RB_CLK_OSC32M_XT)){???//?是否選擇?HSI/5?做時(shí)鐘源
????????DelayUs((1200-330)/5);
????}?
????HSECFG_Current(?HSE_RCur_100?);?????//?降為額定電流(低功耗函數(shù)中提升了HSE偏置電流)
????DelayUs(5/5);???????????????????????//?等待穩(wěn)定?1-5us
????SetSysClock(?CLK_SOURCE_HSE_32MHz?);
????PRINT(?"wake..?\n");??????
????DelayMs(500);
#endif

#if?1
????PRINT(?"shut?down?mode?sleep?\n");???
????DelayMs(1);
????LowPower_Shutdown(?NULL?);??????????????????????????//全部斷電,喚醒后復(fù)位
/*?
???此模式喚醒后會(huì)執(zhí)行復(fù)位,所以下面代碼不會(huì)運(yùn)行,
???注意要確保系統(tǒng)睡下去再喚醒才是喚醒復(fù)位,否則有可能變成IDLE等級(jí)喚醒?
*/
/*
使用HSI/5=6.4M睡眠,喚醒時(shí)間大概需要?2048Tsys≈330us
HSE起振一般不超過1.2ms(500us-1200us),所以切換到外部HSE,需要?1.2ms-330us?這個(gè)時(shí)間可以保證HSE足夠穩(wěn)定,一般用于藍(lán)牙
DelayUs()函數(shù)時(shí)基于32M時(shí)鐘的書寫,此時(shí)主頻為6.4M,所以?DelayUs((1200-330)/5)????
*/
????if(!(R8_HFCK_PWR_CTRL&RB_CLK_XT32M_PON))?{?????//?是否HSE上電
????????PWR_UnitModCfg(?ENABLE,?UNIT_SYS_HSE?);???//?HSE上電
????????DelayUs((1200)/5);
????}
????else?if(!(R16_CLK_SYS_CFG&RB_CLK_OSC32M_XT)){???//?是否選擇?HSI/5?做時(shí)鐘源
????????DelayUs((1200-330)/5);
????}?
????HSECFG_Current(?HSE_RCur_100?);?????//?降為額定電流(低功耗函數(shù)中提升了HSE偏置電流)
????DelayUs(5/5);???????????????????????//?等待穩(wěn)定?1-5us
????SetSysClock(?CLK_SOURCE_HSE_32MHz?);
????PRINT(?"wake..?\n");
????DelayMs(500);
#endif

????while(1);????
}


void?GPIO_IRQHandler(void)
{
????GPIOA_ClearITFlagBit(?GPIO_Pin_6|GPIO_Pin_5?);
}
//--------------------------------------------
//ch57x_init.c?
//--------------------------------------------
/*******************************************************************************
*?Function?Name??:?LowPower_Shutdown
*?Description????:?低功耗-Shutdown模式。
???????????????????此低功耗切到HSI/5時(shí)鐘運(yùn)行,喚醒后需要用戶自己重新選擇系統(tǒng)時(shí)鐘源
???????????????????注意調(diào)用此函數(shù),DCDC功能強(qiáng)制關(guān)閉,喚醒后可以手動(dòng)再次打開
*?Input??????????:?rm:
????????????????????RB_PWR_RAM2K	-	最后2K?SRAM?供電
???????????????????NULL	-	以上單元都斷電
*?Return?????????:?None
*******************************************************************************/
//__attribute__((section("NMICode")))
void?LowPower_Shutdown(?UINT8?rm?)
{	
????UINT8??x32Kpw,?x32Mpw;
????
????x32Kpw?=?R8_XT32K_TUNE;
????x32Mpw?=?R8_XT32M_TUNE;
????x32Mpw?=?(x32Mpw&0xfc)|0x03;????????????//?150%額定電流
????if(R16_RTC_CNT_32K>0x3fff){?????//?超過500ms
????????x32Kpw?=?(x32Kpw&0xfc)|0x01;????????//?LSE驅(qū)動(dòng)電流降低到額定電流
????}
????
????R8_SAFE_ACCESS_SIG?=?SAFE_ACCESS_SIG1;		
????R8_SAFE_ACCESS_SIG?=?SAFE_ACCESS_SIG2;
????R16_POWER_PLAN?=?RB_PWR_PLAN_EN		????\
????????????????????|RB_PWR_MUST_0010		\
????????????????????|rm;
????R8_SAFE_ACCESS_SIG?=?0;?

????R8_SAFE_ACCESS_SIG?=?SAFE_ACCESS_SIG1;		
????R8_SAFE_ACCESS_SIG?=?SAFE_ACCESS_SIG2;
????R8_BAT_DET_CTRL?=?0;????????????????//?關(guān)閉電壓監(jiān)控
????R8_XT32K_TUNE?=?x32Kpw;
????R8_XT32M_TUNE?=?x32Mpw;
????R16_CLK_SYS_CFG?=?5;		????????//?降頻?HSI/5=6.4M????
????R8_SAFE_ACCESS_SIG?=?0;????

	SCB?->?SCR?|=?SCB_SCR_SLEEPDEEP_Msk;				//deep?sleep
????__WFI();
????R8_SAFE_ACCESS_SIG?=?0;

????/*?開啟電壓監(jiān)控??*/
		R8_SAFE_ACCESS_SIG?=?SAFE_ACCESS_SIG1;		
		R8_SAFE_ACCESS_SIG?=?SAFE_ACCESS_SIG2;
		R8_BAT_DET_CFG?=?1;?????????????????????//?2.05V?-?2.33V
		R8_BAT_DET_CTRL?=?RB_BAT_DET_EN;
		R8_SAFE_ACCESS_SIG?=?0;?
		__nop();	__nop();
		R8_SAFE_ACCESS_SIG?=?SAFE_ACCESS_SIG1;		
		R8_SAFE_ACCESS_SIG?=?SAFE_ACCESS_SIG2;
		R8_BAT_DET_CTRL?=?RB_BAT_LOW_IE|RB_BAT_LOWER_IE|RB_BAT_DET_EN;??
		R8_SAFE_ACCESS_SIG?=?0;?
}

/////////////////////////////////////////////////////////


@zpf_wch? 你好, 用剛剛你給的鏈接中的的demo程序, 依然是66uA的電流



CH579 芯片的GPIO的內(nèi)部上下拉典型的電阻為50K,而你測出來是66uA,當(dāng)3.3v供電時(shí)候,內(nèi)部上下拉有一個(gè)電平不對,就是66uA.

由于該板子不是官方板子,我們這邊無法掌握品控,不排除可能存在的硬件問題.

建議在休眠前,把PA,PB的port寄存器打印出來,看是否全都是0xffff,以確定是否由于板子硬件問題,導(dǎo)致上拉漏電.




感謝tech46,? 經(jīng)測量發(fā)現(xiàn)一個(gè)引腳為低電平(板子沒有把此引進(jìn)接地), 把這個(gè)引腳設(shè)置為高阻輸入或下拉輸入后, 電流變?yōu)?0uA 。但是10uA仍然不是正常電流, 按手冊應(yīng)該是0.2uA 至少應(yīng)該2uA一下的


已經(jīng)降到0.2uA , 原來是板子上cpu引腳PA12與地短路了, 重新焊接cpu后此問題消失


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频