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