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

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

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

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

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

整體的流程是:

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

1、打開AWU的時(shí)鐘。

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

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

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

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

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

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

3、使能AWU。

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

AWU_Cmd(ENABLE); 

4、進(jìn)入停機(jī)模式。

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

halt();

5、定時(shí)喚醒后清除標(biāo)志。

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();//清除標(biāo)志
}

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

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

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

//中斷服務(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;
}

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

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
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 查看
AT24C256C-SSHL-B 1 Microchip Technology Inc IC EEPROM 256KBIT 1MHZ 8SOIC
$0.74 查看
LAN9303I-ABZJ 1 SMSC Ethernet Transceiver, 8 X 8 MM, ROHS COMPLIANT, QFN-56
$8.26 查看

相關(guān)推薦

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