e. 设定NVIC 参数与EXTI参数;
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_DeInit(); //set EXTI as WFI
EXTI_InitStructure.EXTI_Line = EXTI_Line23 ;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt ;
EXTI_InitStructure.EXTI_trigger = EXTI_Trigger_Rising_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
EXTI_ClearITPendingBit(EXTI_Line23);
NVIC_InitStructure.NVIC_IRQChannel = LPTIMER1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
} f. 中断相应处理函数void LPTIMER1_IRQHandler(void)
{
if(LPTIM_GetITStatus(LPTIM1, LPTIF_OVIF)) {
LPTIM_ClearITPendingBit(LPTIM1, LPTIF_COMPIF | LPTIF_TRIGIF | LPTIF_OVIF);
EXTI_ClearITPendingBit(EXTI_Line23);
LPTIM_ITConfig(LPTIM1, LPTIE_COMPIE | LPTIE_TRIGIE | LPTIE_OVIE, DISABLE);
}
}3.2 实现Demo功能的主要函数代码:void MCU_EnterSTOP_WFI(void)
{
PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);
}
void LPTIM_Function_Demo(void)
{
int i;
DelayNop_Init();
LPTIM1_Init(32768 - 1);
NVIC_Configuration();
LED1_OFF();
LED1_TOGGLE();
LED1_TOGGLE();
for(i = 0; i < 10; i++) {
__NOP();//
DelayNop_Ms(2);
LED1_TOGGLE();
}
LED1_OFF();
LPTIM_ITConfig(LPTIM1, LPTIE_OVIE, ENABLE);
for(i = 0; i < 10; i++) {
__NOP();//
DelayNop_Ms(1);
LED2_TOGGLE();
}
LED1_OFF();
MCU_EnterSTOP_WFI();
SystemInit();
while (1) {
LED3_TOGGLE();
__NOP();//
DelayNop_Ms(4);
}
}
配置好初始化LPTIM与LED闪灯的初始化操作后,执行翻转5次LED灯的操作;
进入STOP 模式。
延时1S后,定时从STOP模式唤醒。
唤醒后继续执行LED闪灯程序。
通过上述的步骤,简单的演示了MM32F0270的LPTIM 定时1s唤醒的功能。
Demo程序可登录MindMotion的官网:https://www.mindmotion.com.cn/pr ... instream/MM32F0270/
下载MM32F0270 lib_Samples,工程路径如下:
~ MM32F0270_Samples\LibSamples\LPTIM\
|