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

2019-04-15 18:22发布

一、前言 网上关于宏康单片机的资料非常的少,因为几个项目一直在用这个单片机,所以一直在 学习这个单片机,这款单片机有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单片机价格便宜,使用调用函数库,总的来说还是比较简单,但是技术手册写的比较不详细。 要改掉自己得过且过的毛病,多测试,做到完美。