加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

STM8L101活躍停機(AWU)編程教學(xué)

03/22 07:34
1807
閱讀需 7 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

雖然在網(wǎng)上找到很多STM8活躍停機的編程方法,但是STM8的型號不一樣,程序也是有差異的,我找了一圈沒有找到STML101的程序,本來還想著偷一下懶的,無奈之下只好自己看手冊和庫函數(shù),花了一點時間終于調(diào)試成功了。好了,接下來我就給大家講一下活躍停機模式的代碼要怎么寫,希望對你有幫助。

整體的流程是:

1、打開AWU的時鐘
2、設(shè)定計時的時間
3、使能AWU
4、進入停機模式
5、定時喚醒后清除標志

1、打開AWU的時鐘。

這個簡單,直接調(diào)用下面這個函數(shù)就行。這個函數(shù)在stm8l10x_clk.c里面。

CLK_PeripheralClockConfig(CLK_Peripheral_AWU, ENABLE);//初始化AWU的時鐘

2、設(shè)定計時的時間。

這個直接調(diào)用下面這個函數(shù)就行,AWU_Init()函數(shù)在stm8l10x_awu.c里面,AWU_Timebase_30s在stm8l10x_awu.h,這個定時的時間有17種選擇,最大30s。如果想定時更長的時間,只能在喚醒之后馬上進入睡眠,反復(fù)多次,直到達到需要定時的時間為止。

AWU_Init(AWU_Timebase_30s);//設(shè)定計時時間,最大30s

注:如果對定時的時間要求很嚴格的話,在調(diào)用AWU_Init()函數(shù)之前需要先調(diào)用AWU_LSICalibrationConfig()函數(shù)校準,這個就比較復(fù)雜了,網(wǎng)上也有相關(guān)的程序,我就不多說了。

3、使能AWU。

直接調(diào)用就行了。

AWU_Cmd(ENABLE); 

4、進入停機模式。

直接調(diào)用面這個函數(shù)就行了。定時器是在進入停機模式之后才開始計時的。

halt();

5、定時喚醒后清除標志。

INTERRUPT_HANDLER()函數(shù)在stm8l10x_it.c里面。

INTERRUPT_HANDLER(AWU_IRQHandler,4)
{
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */ 
    AWU_GetFlagStatus();//清除標志
}

完整的代碼段:
//我這里是定時5分鐘喚醒

//主函數(shù)
void main(void)
{
	u8 wakeuptime = 0;
	
	CLK_MasterPrescalerConfig(CLK_MasterPrescaler_HSIDiv1);	//系統(tǒng)時鐘1分頻,16MHz
	
	//外設(shè)模塊初始化,懸空的引腳輸出低以降低功耗,根據(jù)你自己的需要寫,不詳細說了
	HarDriver_Init();
	
	//配置AWU
	CLK_PeripheralClockConfig(CLK_Peripheral_AWU, ENABLE);//初始化AWU的時鐘
	AWU_Init(AWU_Timebase_30s);//設(shè)定計時時間,最大30s
	AWU_Cmd(ENABLE); 
	
	while(1)
  	{
        if(AWU_Status_Flag == 1)
        {
            AWU_Status_Flag = 0;
            wakeuptime ++;
            if(wakeuptime >= 10) //實際測試10次只能定時4分40秒            
			{//計時時間到
                wakeuptime = 0;   
                LED_ON;
                Delay_ms(500);
				LED_OFF; 

				//取消定時喚醒,我這里不需要一直用活躍停機。如果是每間隔一段時間就喚醒,不需要加下面的代碼
				//AWU_DeInit();//反初始化
				//CLK_PeripheralClockConfig(CLK_Peripheral_AWU, DISABLE);
				//AWU_Cmd(DISABLE);    
			}
		}
		halt();//進入休眠
	}
}

//中斷服務(wù)函數(shù),在stm8l10x_it.c里面。
INTERRUPT_HANDLER(AWU_IRQHandler,4)
{
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */ 
    AWU_GetFlagStatus();
    AWU_Status_Flag = 1;
}

好了,到這里就配置完成了,其實stm8的活躍停機是真的挺簡單的,但是如果你以前沒用過,可能就無從下手了,希望這篇文章能夠幫到你。如果還有什么問題,可以聯(lián)系我。如果文中有誤,請一定要指正,謝謝?。?/p>

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
RSE-32.768-12.5-H14-TR-10PPM 1 Raltron Electronics Corporation Parallel - Fundamental Quartz Crystal, 0.032768MHz Nom,
暫無數(shù)據(jù) 查看
NX2012SA-32.768K-STD-MUB-1 1 Nihon Dempa Kogyo Co Ltd Parallel - Fundamental Quartz Crystal, 0.032768MHz Nom, ROHS COMPLIANT PACKAGE-2
$7.18 查看
PLR135/T5P 1 Everlight Electronics Co Ltd Receiver, 16Mbps, Panel Mount, ROHS COMPLIANT PACKAGE-3
$2.4 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜