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

来源:互联网 发布:qq空间推广淘宝店铺 编辑:程序博客网 时间:2024/05/13 23:25

一、前言

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

二、低功耗

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

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

HY19系列的单片机和STM32差不多,都是调用函数库

在单片机进入SLEEP MODE之前要设置能使其恢复 Active Mode 的中断,我设置的外部按键中断。

void Sleepscale(void){//setting IODrvGPIO_Open(E_PT1,BIT7,E_IO_INPUT);    //SET PT1.7 AS INPUT FOR KEYDrvGPIO_Open(E_PT1,BIT7,E_IO_PullHigh); //enable PT1.7 PULL HIGH;//set ADCDrvADC_Disable();DrvADC_DisableInt();DrvPMU_VDDA_LDO_Ctrl(0);//set UARTDrvUART_Close();DrvUART_ClrTxFlag();//setting timer BDrvTIMER_DisableInt(E_TMB); //disable the Timer B interruptDrvTMB_Close(); //close timer BDrvTMB_ClearTMB();   //clear the timer B counterDrvTIMER_ClearIntFlag(E_TMB); //clear the Timer B interrupt flag//enable IO interruptDrvGPIO_IntTrigger(E_PT1,BIT7,E_N_Edge);  //setting edge triggerDrvGPIO_ClearIntFlag(E_PT1,BIT7);         //clear the interrupt flag;DrvGPIO_Open(E_PT1,BIT7,E_IO_IntEnable);  // enable the IO interruptSYS_EnableGIE(7,0x1FF);DrvCLOCK_EnableLowOSC (E_EXTERNAL,130000); //低速频率源选择外部低速晶振DrvCLOCK_SelectMCUClock(1,0);DrvCLOCK_CloseIHOSC();//get into low power modeasm("nop");asm("nop");SYS_LowPower (SYS_SleepMode);//(SYS_WaitMode);asm("nop");asm("nop");while(!WarkUp_flag);WarkUp_flag = 0;//setting IC CPU clockDrvCLOCK_EnableHighOSC(E_INTERNAL,1);       // enable HAODrvCLOCK_SelectMCUClock(0,0);DrvCLOCK_EnableLowOSC (E_EXTERNAL,130000); //低速频率源选择外部低速晶振//disable IO interruptDrvGPIO_Close(E_PT1,BIT7,E_IO_IntEnable);  // disable the IO interruptDrvGPIO_ClearIntFlag(E_PT1,BIT7);          //clear PT1 interrupt flagDrvGPIO_IntTrigger(E_PT1,BIT7,E_DisableGPIOInt);DrvUART_Close();DrvUART_Enable();                         //使能UART功能DrvUART_ClrRxFlag();DrvADC_Enable();//enable the timer BTimerBInit();SYS_EnableGIE(7,0x1FF);}

总的来说分以下几步:

1、关闭所有外设,定时器、ADC等,设置中断唤醒引脚中断

2、切换时钟:关闭内部高速时钟,MCU时钟切换到外部低速(也可以是内部低速),我外部用了32768的晶震,内的低速用了之后发现如果频繁的进入退出SLEEPMODE会出现无法唤醒的情况
3、设置标志位,等待按键唤醒,这种方式的话,程序相当于死在while();这里,总觉得会有问题,但是HY给出的一个例程中是这样做的,测试之后发现还是比较稳定
4、按键唤醒后切换到内部高速时钟、打开外设继续工作。
如果还需省电的话,可以把RS485的使能脚关闭,比如说18487的REN置高,DEN置低,实测的话可以省0.2个毫安。

三、总结

HY单片机价格便宜,使用调用函数库,总的来说还是比较简单,但是技术手册写的比较不详细。

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


0 0
原创粉丝点击