1. 程式人生 > >巨集康HY19系列微控制器之低功耗

巨集康HY19系列微控制器之低功耗

一、前言

網上關於巨集康微控制器的資料非常的少,因為幾個專案一直在用這個微控制器,所以一直在 學習這個微控制器,這款微控制器有24bit的ADC和LCD驅動,還有就是低功耗,sleep模式手冊上寫的是2.5uA,現在的板子做到了50uA,還是比較低。

二、低功耗

手冊上關於省電模式的介紹非常少,我一開始沒看明白

一直在測功耗,發現功耗小了,覺得自己可能搞對了,現在想想是非常不應該的,後面就仔細研究了一下。

HY19系列的微控制器和STM32差不多,都是呼叫函式庫

在微控制器進入SLEEP MODE之前要設定能使其恢復 Active Mode 的中斷,我設定的外部按鍵中斷。

void Sleepscale(void)
{
	//setting IO
	DrvGPIO_Open(E_PT1,BIT7,E_IO_INPUT);    //SET PT1.7 AS INPUT FOR KEY
	DrvGPIO_Open(E_PT1,BIT7,E_IO_PullHigh); //enable PT1.7 PULL HIGH;

	//set ADC
	DrvADC_Disable();
	DrvADC_DisableInt();
	DrvPMU_VDDA_LDO_Ctrl(0);
	//set UART
	DrvUART_Close();
	DrvUART_ClrTxFlag();
	//setting timer B
	DrvTIMER_DisableInt(E_TMB); //disable the Timer B interrupt
	DrvTMB_Close(); 						//close timer B
	DrvTMB_ClearTMB(); 				  //clear the timer B counter
	DrvTIMER_ClearIntFlag(E_TMB); //clear the Timer B interrupt flag

	//enable IO interrupt
	DrvGPIO_IntTrigger(E_PT1,BIT7,E_N_Edge);  //setting edge trigger
	DrvGPIO_ClearIntFlag(E_PT1,BIT7);         //clear the interrupt flag;
	DrvGPIO_Open(E_PT1,BIT7,E_IO_IntEnable);  // enable the IO interrupt
	
	SYS_EnableGIE(7,0x1FF);
	
	DrvCLOCK_EnableLowOSC (E_EXTERNAL,130000); //低速頻率源選擇外部低速晶振
	DrvCLOCK_SelectMCUClock(1,0);
	DrvCLOCK_CloseIHOSC();
	//get into low power mode
	asm("nop");
	asm("nop");
	SYS_LowPower (SYS_SleepMode);//(SYS_WaitMode);
	asm("nop");
	asm("nop");
	while(!WarkUp_flag);
	WarkUp_flag = 0;
	//setting IC CPU clock
	DrvCLOCK_EnableHighOSC(E_INTERNAL,1);       // enable HAO
	DrvCLOCK_SelectMCUClock(0,0);
	DrvCLOCK_EnableLowOSC (E_EXTERNAL,130000); //低速頻率源選擇外部低速晶振
	//disable IO interrupt
	DrvGPIO_Close(E_PT1,BIT7,E_IO_IntEnable);  // disable the IO interrupt
	DrvGPIO_ClearIntFlag(E_PT1,BIT7);          //clear PT1 interrupt flag
	DrvGPIO_IntTrigger(E_PT1,BIT7,E_DisableGPIOInt);
	
	DrvUART_Close();
	DrvUART_Enable();                         //使能UART功能
	DrvUART_ClrRxFlag();
	DrvADC_Enable();
	//enable the timer B
	TimerBInit();

	SYS_EnableGIE(7,0x1FF);
}
總的來說分以下幾步:
1、關閉所有外設,定時器、ADC等,設定中斷喚醒引腳中斷
2、切換時鐘:關閉內部高速時鐘,MCU時鐘切換到外部低速(也可以是內部低速),我外部用了32768的晶震,內的低速用了之後發現如果頻繁的進入退出SLEEPMODE會出現無法喚醒的情況 3、設定標誌位,等待按鍵喚醒,這種方式的話,程式相當於死在while();這裡,總覺得會有問題,但是HY給出的一個例程中是這樣做的,測試之後發現還是比較穩定 4、按鍵喚醒後切換到內部高速時鐘、開啟外設繼續工作。 如果還需省電的話,可以把RS485的使能腳關閉,比如說18487的REN置高,DEN置低,實測的話可以省0.2個毫安。

三、總結

HY微控制器價格便宜,使用呼叫函式庫,總的來說還是比較簡單,但是技術手冊寫的比較不詳細。

要改掉自己得過且過的毛病,多測試,做到完美。