你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

LPTIM无法唤醒STOP1

[复制链接]
罗德林 提问时间:2024-4-11 11:03 / 已解决

代码流程如下:


graph LR;

Init(初始化)-->StartLPTIM(启动LPTIM)-->EnterStopMode(进入Stop1模式)-->WakeUp(唤醒设备)-->Blink(LED灯闪烁)

理论情况下进入Stop1模式之后,触发LPTIM中断应该会唤醒设备,然后LED0和LED1会同时闪烁,但进入Stop1模式之后就无法唤醒设备了,如果不进入低功耗模式LED就正常闪烁。主要代码如下:


LPTIM_HandleTypeDef hlptim1;

int main()

{

    HAL_Init();

    SystemClock_Config();

    SystemPower_Config();

    MX_GPIO_Init();

    MX_ICACHE_Init();

    MX_LPTIM1_Init();



    HAL_LPTIM_TimeOut_Start_IT(&hlptim1,1000);

    HAL_PWREx_EnterSTOP1Mode(PWR_STOPENTRY_WFI);

    while (1)

    {

        HAL_Delay(1000);

        HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);

    }

}



void HAL_LPTIM_CompareMatchCallback(LPTIM_HandleTypeDef *hlptim)

{

    HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);

}

// LPTIM初始化

static void MX_LPTIM1_Init(void)

{

    hlptim1.Instance = LPTIM1;

    hlptim1.Init.Clock.Source = LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC;

    hlptim1.Init.Clock.Prescaler = LPTIM_PRESCALER_DIV32;

    hlptim1.Init.Trigger.Source = LPTIM_TRIGSOURCE_SOFTWARE;

    hlptim1.Init.UpdateMode = LPTIM_UPDATE_IMMEDIATE;

    hlptim1.Init.CounterSource = LPTIM_COUNTERSOURCE_INTERNAL;

    hlptim1.Init.Input1Source = LPTIM_INPUT1SOURCE_GPIO;

    hlptim1.Init.Input2Source = LPTIM_INPUT2SOURCE_GPIO;

    if (HAL_LPTIM_Init(&hlptim1) != HAL_OK)

    {

        Error_Handler();

    }

}



void HAL_LPTIM_MspInit(LPTIM_HandleTypeDef* hlptim)

{

    RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};

    if(hlptim->Instance==LPTIM1)

    {

        PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_LPTIM1;

        PeriphClkInit.Lptim1ClockSelection = RCC_LPTIM1CLKSOURCE_LSI;

        if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)

        {

            Error_Handler();

        }

        __HAL_RCC_LPTIM1_CLK_ENABLE();

        HAL_NVIC_SetPriority(LPTIM1_IRQn, 0, 0);

        HAL_NVIC_EnableIRQ(LPTIM1_IRQn);

    }

}
收藏 评论4 发布时间:2024-4-11 11:03

举报

4个回答
xmshao 回答时间:2024-4-11 17:20:15
你进STOP模式前记得先停掉SYSTICK,库里有相关函数。


  HAL_SuspendTick();


__HAL_RCC_PWR_CLK_ENABLE();


HAL_PWREx_EnterSTOP1Mode(PWR_STOPENTRY_WFI);


另外,注意为LPTIM选择合适的时钟源。
罗德林 回答时间:2024-4-11 19:11:38

xmshao 发表于 2024-4-11 17:20
你进STOP模式前记得先停掉SYSTICK,库里有相关函数。</p>
<p>

能进入STOP模式,只是不能够唤醒,LPTIM我用的是LSI,LSE我也试过也不行

罗德林 回答时间:2024-4-11 19:12:31

罗德林 发表于 2024-4-11 19:11
能进入STOP模式,只是不能够唤醒,LPTIM我用的是LSI,LSE我也试过也不行
...

用同样的配置lptim1、2、3、4里,lptim2可以唤醒stop模式,其他都不行

罗德林 回答时间:2024-4-22 09:43:12

在使用LPTIM1、3、4的时候需要在RCC_SRDAMR寄存器中设置LPTIMAMEN位,以在STOP下启用自主模式,__HAL_RCC_LPTIM1_CLKAM_ENABLE()来操作。

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版