宏康HY19系列单片机之低功耗

一、前言

网上关于宏康单片机的资料非常的少,因为几个项目一直在用这个单片机,所以一直在 学习这个单片机,这款单片机有24bit的ADC和LCD驱动,还有就是低功耗,sleep模式手册上写的是2.5uA,现在的板子做到了50uA,还是比较低。

二、低功耗

手册上关于省电模式的介绍非常少,我一开始没看明白

宏康HY19系列单片机之低功耗_第1张图片

一直在测功耗,发现功耗小了,觉得自己可能搞对了,现在想想是非常不应该的,后面就仔细研究了一下。

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单片机价格便宜,使用调用函数库,总的来说还是比较简单,但是技术手册写的比较不详细。

要改掉自己得过且过的毛病,多测试,做到完美。


你可能感兴趣的:(单片机)