新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM8L探索套件學(xué)習(xí)筆記-低功耗模式(十二)

STM8L探索套件學(xué)習(xí)筆記-低功耗模式(十二)

作者: 時(shí)間:2016-11-24 來(lái)源:網(wǎng)絡(luò) 收藏
官方給的例程當(dāng)中,使用PE6作為IDD_WAKUP,將系統(tǒng)從低功耗中喚醒,
STM8L有5種低功耗模式,降低功耗的方法還可以將系統(tǒng)時(shí)鐘降低或者關(guān)閉沒(méi)有使用的外設(shè)。

今天我們就使用U3這個(gè)14階脈動(dòng)進(jìn)位計(jì)數(shù)器M74HC4060進(jìn)行HALT模式喚醒,從原理圖可以看到Q14腳輸出的反向連接到T2模擬開(kāi)關(guān),控制PE6端口。因?yàn)榻?jīng)過(guò)兩個(gè)反向器,使用Q14的邏輯等于PE6的邏輯。U3的時(shí)鐘頻率為30KHZ,Q14的脈沖周期為2的14次方除以30KHZ,約等于0.5s,也就是說(shuō)Q14輸出的脈沖是周期大約為1秒,占空比為1:1的方波。所以PE6的電平變化也是周期大約為1秒,占空比為1:1的方波。代碼設(shè)計(jì)如下:
void main(void)
{
GPIO_Init(LED3_PORT,LED3_PIN,GPIO_Mode_Out_PP_High_Fast);
//輸出低電平-高速10M
GPIO_Init(LED4_PORT,LED4_PIN,GPIO_Mode_Out_PP_High_Fast);
//輸出低電平-高速10M
GPIO_Init(CNT_EN_PORT,CNT_EN_PIN,GPIO_Mode_Out_PP_High_Fast);
GPIO_Init(WAKEUP_PORT,WAKEUP_PIN,GPIO_Mode_In_FL_IT);//PE6
LCD_GLASS_Init();
LCD_GLASS_DisplayString("M74HC");
/* Enable Rising edge port PE6 for wake up conter */
//EXTI->CR2 = 0x10;
//上升沿或者下載沿都可以
EXTI_SetPinSensitivity(EXTI_Pin_6, EXTI_Trigger_Rising);
/* Enable Interrupts */

enableInterrupts();
GPIO_ResetBits(GPIOC,GPIO_Pin_4);//使能U3計(jì)數(shù)器
/* Infinite loop */
while (1)
{
GPIO_ToggleBits(LED3_PORT,LED3_PIN);


halt();//進(jìn)入HALT模式,外部中斷能夠喚醒
}
}
程序開(kāi)始初始化板上的LED3/LED4,LCD顯示測(cè)試M74HC計(jì)數(shù)器的功能。PE6為上升沿觸發(fā)。進(jìn)入while后,進(jìn)入HALT模式,CPU關(guān)閉,將不會(huì)執(zhí)行。只有當(dāng)外部中斷發(fā)生后才能執(zhí)行。
中斷函數(shù):
INTERRUPT_HANDLER(EXTI6_IRQHandler, 14)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
sim()
GPIO_ToggleBits(GPIOC,GPIO_Pin_7);
/* Clear Interrupt pending bit */
EXTI_ClearITPendingBit(EXTI_IT_Pin6);
rim()
}
現(xiàn)象是板上的LED3和4交替,周期1s閃爍,說(shuō)明CPU在HALT模式和工作模式交替進(jìn)行。


評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉