完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在许多的工业与消费类应用中,越来越多的需要使用低功耗功能,使用定时唤醒,停机减低功耗。灵动微电子推出的MM32F0270系列,支持多种灵活的低功耗模式,还支持LPtiM和LPUART的外设。 本文介绍了如何使用 MM32F0270的LPTIM来实现定时1s从STOP方式的低功耗模式中唤醒。实现使用LPTIM1,在低功耗stop模式下定时1s,1s后将MM32F0270从stop模式唤醒,并且点亮LED灯。 01 MM32F0270 LPTIM的简要介绍 LPTIM即低功耗定时器,得益于其定时器的低功耗。由于 LPTIM 的时钟源具有多样性,因此 LPTIM 能够在所有电源模式(待机模式除外)下保持运行状态。 即使没有内部时钟源, LPTIM 也能运行,可将其用作“脉冲计数器”,这种脉冲计数器在一些特定的应用中十分有用。 LPTIM 可以支持MCU从低功耗STOP模式唤醒,非常适合实现“超时功能”,而且功耗极低。 LPTIM是低功耗产品在低功耗功耗模式下定时的最佳选择。 图1 LPTIM的功能框图
02LPTIM 的功能特性 2.1 MM32的LPTIM具有以下特性: 16 位递增计数器 3-bit 异步时钟预分频器,对应的分频系数分别为 1、2、4、8、16、32、64、128时钟源可选: 内部时钟源:LSI_CLK 和 PCLK 外部时钟源:LSE_CLK 16-bit 比较寄存器和目标值寄存器 触发源可选:硬件触发、软件触发 输入极性可选 外部脉冲计数(无时钟时) 低功耗超时唤醒功能 PWM 输出 2.2 MM32F0270 LPTIM中断 LPTIM 的中断包括:外部触发中断,比较匹配中断, 计数器溢出中断, 当相应的中断使能位打开,发生相应的事件时,产生相应的中断。 需要使用唤醒时,需要使能相应的中断外,还需配置EXTI使能相关的功能。 相关的寄存器与控制状态位的控制与查询,可以参考用户手册。 03LPTIM 从STOP模式唤醒的软硬件设计 LPTIM是如何控制配置实现定时1s唤醒STOP 模式的呢? 3.1 在库函数版本的样例中可以通过如下顺序初始化LPTIM a. 使能LPTIM外设时钟; RCC_APB2PeriphClockCmd(RCC_APB2ENR_LPTIM1, ENABLE); b. 配置LPTIM的LPTIM_TimeBaseInit_TypeDef结构体中指定的参数;选择时钟源为LSE 32.768KHz; 选择计数模式为连续计数模式; 时钟分频为DIV1; LPTIM_TimeBaseStructInit(&init_struct); //Setting LPTIM base init_struct.ClockSource = LPTIM_LSE_Source;//LPTIM_PCLK_Source;//LPTIM_LSI_Source;// init_struct.CountMode = LPTIM_CONTINUOUS_COUNT_Mode; init_struct.OutputMode = LPTIM_NORMAL_WAV_Mode; init_struct.Waveform = LPTIM_AdjustPwmOutput_Mode; init_struct.Polarity = LPTIM_Positive_Wave; init_struct.ClockDivision = LPTIM_CLK_DIV1; c. 开启LSE 32.768KHz的时钟,等待稳定; if(init_struct.ClockSource == LPTIM_LSE_Source) { RCC_APB1PeriphClockCmd(RCC_APB1ENR_PWR | RCC_APB1ENR_BKP, ENABLE); //RCC->BDCR |= 1 << 24; PWR_BackupAccessCmd(ENABLE); RCC_LSEConfig(RCC_LSE_ON); DelayNop_Ms(1000); while(!RCC_GetFlagStatus(RCC_FLAG_LSERDY)); LPTIM_CLKConfig(LPTIM1, LPTIM_LSE_Source); } d. 调用函数LPTIM_TimeBaseInit设置参数及比较器值与目标值; LPTIM_TimeBaseInit(LPTIM1, &init_struct); LPTIM_SetCompare(LPTIM1, arr / 2 - 1); LPTIM_SetTarget(LPTIM1, arr); 在这设定结合时钟源时钟,分频系数与Target值,得到定时1s的定时值。 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闪灯程序。 Demo程序可登录MindMotion的官网:https://www.mindmotion.com.cn/pr ... instream/MM32F0270/ 下载MM32F0270 lib_Samples,工程路径如下: ~ MM32F0270_SamplesLibSamplesLPTIM |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
2253个成员聚集在这个小组
加入小组灵动微电子MM32全系列MCU产品应用手册,库函数和例程和选型表
11843 浏览 3 评论
【MM32 eMiniBoard试用连载】+基于OLED12864的GUI---U8G2
5980 浏览 1 评论
【MM32 eMiniBoard试用连载】移植RT-Thread至MM32L373PS
11127 浏览 0 评论
【MM32 eMiniBoard测评报告】+ 开箱 + 初探
4598 浏览 1 评论
灵动微课堂(第106讲) | MM32 USB功能学习笔记 —— WinUSB设备
4333 浏览 1 评论
[MM32软件] MM32F002使用内部flash存储数据怎么操作?
1340浏览 1评论
859浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 13:00 , Processed in 0.420735 second(s), Total 38, Slave 30 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号