硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4096|回复: 5
收起左侧

[TIMER] 测试发现STM32H7的LPTIM1的中断可以唤醒停机模式,其它几个LPTIM2-5无法唤醒,邪门

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2019-1-5 18:22:40 | 显示全部楼层 |阅读模式
对于LPTIM1,各种中断方式都可以唤醒停机模式,比如PWM中断,超时中断等(含软件触发和外部触发)。

而LPTIM2-LPTIM5的各种中断方式却都无法唤醒停机模式,但不做唤醒使用,也都正常,邪门了,看勘误手册也没有这种bug。

邪门,备份下这个问题吧。

停机模式下使用的LSE或者LSI为LPTIM提供时钟。

LPTIM1软件触发超时中断方式。

程序里面配置了8分频,4秒后唤醒。

  1. LPTIM_HandleTypeDef             LptimHandle = {0};
  2. void bsp_InitLPTIM2(void)
  3. {
  4.         GPIO_InitTypeDef   GPIO_InitStruct = {0};
  5.         RCC_OscInitTypeDef RCC_OscInitStruct = {0};

  6.         /* ## - 1 - Enable LPTIM clock ############################################ */
  7.         __HAL_RCC_LPTIM1_CLK_ENABLE();
  8.         __HAL_RCC_LPTIM2_CLK_ENABLE();
  9.         
  10.         __HAL_RCC_GPIOE_CLK_ENABLE();
  11.         
  12.         GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  13.         GPIO_InitStruct.Pull = GPIO_PULLUP;
  14.         GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  15.         GPIO_InitStruct.Alternate = GPIO_AF1_LPTIM1;
  16.         GPIO_InitStruct.Pin = GPIO_PIN_0;
  17.         HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

  18.         RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE;
  19.         RCC_OscInitStruct.LSEState = RCC_LSE_ON;
  20.         RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;

  21.         if (HAL_RCC_OscConfig(&RCC_OscInitStruct)!= HAL_OK)
  22.         {
  23.         Error_Handler(__FILE__, __LINE__);
  24.         }      

  25.         RCC_PeriphCLKInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPTIM1;
  26.         RCC_PeriphCLKInitStruct.Lptim1ClockSelection = RCC_LPTIM1CLKSOURCE_LSE;
  27.         HAL_RCCEx_PeriphCLKConfig(&RCC_PeriphCLKInitStruct);

  28.         /* ### - 2 - Initialize the LPTIM peripheral ############################## */
  29.         LptimHandle.Instance = LPTIM1;

  30.         LptimHandle.Init.Clock.Source    = LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC;
  31.         LptimHandle.Init.Clock.Prescaler = LPTIM_PRESCALER_DIV8;
  32.         LptimHandle.Init.CounterSource   = LPTIM_COUNTERSOURCE_INTERNAL;
  33.         LptimHandle.Init.Trigger.Source  = LPTIM_TRIGSOURCE_SOFTWARE;
  34. //        LptimHandle.Init.Trigger.Source     = LPTIM_TRIGSOURCE_0;
  35. //        LptimHandle.Init.Trigger.ActiveEdge = LPTIM_ACTIVEEDGE_FALLING;
  36.         LptimHandle.Init.OutputPolarity  = LPTIM_OUTPUTPOLARITY_HIGH;
  37.         LptimHandle.Init.UpdateMode      = LPTIM_UPDATE_IMMEDIATE;
  38.         LptimHandle.Init.Input1Source    = LPTIM_INPUT1SOURCE_GPIO;
  39.         LptimHandle.Init.Input2Source    = LPTIM_INPUT2SOURCE_GPIO;

  40.         /* Initialize LPTIM peripheral according to the passed parameters */
  41.         if (HAL_LPTIM_Init(&LptimHandle) != HAL_OK)
  42.         {
  43.         Error_Handler(__FILE__, __LINE__);
  44.         }

  45.         /* Enable and set LPTIM Interrupt to the highest priority */
  46.         HAL_NVIC_SetPriority(LPTIM1_IRQn, 1, 0);
  47.         HAL_NVIC_EnableIRQ(LPTIM1_IRQn);
  48.         
  49.         /* ### - 3 - Start counting in interrupt mode ############################# */
  50.         if (HAL_LPTIM_TimeOut_Start_IT(&LptimHandle, 32768, 32768/2) != HAL_OK)
  51.         {
  52.         Error_Handler(__FILE__, __LINE__);
  53.         }
  54.         
  55. //        if (HAL_LPTIM_PWM_Start_IT(&LptimHandle, 32768, 32768/2) != HAL_OK)
  56. //         {
  57. //       Error_Handler(__FILE__, __LINE__);
  58. //         }
  59.         
  60.         /* ### - 4 - Enter in Stop mode ########################################### */
  61.         HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);

  62.         SystemClock_Config();  
  63. }

  64. void LPTIM1_IRQHandler(void)
  65. {
  66.         HAL_LPTIM_IRQHandler(&LptimHandle);
  67.         bsp_LedToggle(4);
  68. }
复制代码

同样的配置LPTIM2却不行,其它的LPTIM345也不行。但注释掉进入停机模式函数执行却又正常,就是无法唤醒停机模式。
  1. void bsp_InitLPTIM2(void)
  2. {
  3.         GPIO_InitTypeDef   GPIO_InitStruct = {0};
  4.         RCC_OscInitTypeDef RCC_OscInitStruct = {0};

  5.         /* ## - 1 - Enable LPTIM clock ############################################ */
  6.         __HAL_RCC_LPTIM1_CLK_ENABLE();
  7.         __HAL_RCC_LPTIM2_CLK_ENABLE();
  8.         
  9. //        __HAL_RCC_GPIOE_CLK_ENABLE();
  10.         
  11. //        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  12. //        GPIO_InitStruct.Pull = GPIO_PULLUP;
  13. //        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  14. //        GPIO_InitStruct.Alternate = GPIO_AF1_LPTIM1;
  15. //        GPIO_InitStruct.Pin = GPIO_PIN_0;
  16. //        HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);

  17.         RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE;
  18.         RCC_OscInitStruct.LSEState = RCC_LSE_ON;
  19.         RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;

  20.         if (HAL_RCC_OscConfig(&RCC_OscInitStruct)!= HAL_OK)
  21.         {
  22.         Error_Handler(__FILE__, __LINE__);
  23.         }      

  24.         RCC_PeriphCLKInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LPTIM2;
  25.         RCC_PeriphCLKInitStruct.Lptim2ClockSelection = RCC_LPTIM2CLKSOURCE_LSE;
  26.         HAL_RCCEx_PeriphCLKConfig(&RCC_PeriphCLKInitStruct);

  27.         /* ### - 2 - Initialize the LPTIM peripheral ############################## */
  28.         LptimHandle.Instance = LPTIM2;

  29.         LptimHandle.Init.Clock.Source    = LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC;
  30.         LptimHandle.Init.Clock.Prescaler = LPTIM_PRESCALER_DIV8;
  31.         LptimHandle.Init.CounterSource   = LPTIM_COUNTERSOURCE_INTERNAL;
  32.         LptimHandle.Init.Trigger.Source  = LPTIM_TRIGSOURCE_SOFTWARE;
  33. //        LptimHandle.Init.Trigger.Source     = LPTIM_TRIGSOURCE_0;
  34. //        LptimHandle.Init.Trigger.ActiveEdge = LPTIM_ACTIVEEDGE_FALLING;
  35.         LptimHandle.Init.OutputPolarity  = LPTIM_OUTPUTPOLARITY_HIGH;
  36.         LptimHandle.Init.UpdateMode      = LPTIM_UPDATE_IMMEDIATE;
  37.         LptimHandle.Init.Input1Source    = LPTIM_INPUT1SOURCE_GPIO;
  38.         LptimHandle.Init.Input2Source    = LPTIM_INPUT2SOURCE_GPIO;

  39.         /* Initialize LPTIM peripheral according to the passed parameters */
  40.         if (HAL_LPTIM_Init(&LptimHandle) != HAL_OK)
  41.         {
  42.         Error_Handler(__FILE__, __LINE__);
  43.         }

  44.         /* Enable and set LPTIM Interrupt to the highest priority */
  45.         HAL_NVIC_SetPriority(LPTIM2_IRQn, 1, 0);
  46.         HAL_NVIC_EnableIRQ(LPTIM2_IRQn);
  47.         
  48.         /* ### - 3 - Start counting in interrupt mode ############################# */
  49.         if (HAL_LPTIM_TimeOut_Start_IT(&LptimHandle, 32768, 32768/2) != HAL_OK)
  50.         {
  51.         Error_Handler(__FILE__, __LINE__);
  52.         }
  53.         
  54. //        if (HAL_LPTIM_PWM_Start_IT(&LptimHandle, 32768, 32768/2) != HAL_OK)
  55. //         {
  56. //       Error_Handler(__FILE__, __LINE__);
  57. //         }
  58.         
  59.         /* ### - 4 - Enter in Stop mode ########################################### */
  60.         HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);

  61.         SystemClock_Config();  
  62. }

  63. void LPTIM2_IRQHandler(void)
  64. {
  65.         HAL_LPTIM_IRQHandler(&LptimHandle);
  66.         bsp_LedToggle(4);
  67. }
复制代码





回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
 楼主| 发表于 2019-1-7 01:21:51 | 显示全部楼层
根据手册,其它定时器也是有唤醒触发功能的,但就是不起作用

1.jpg
2.jpg
回复

使用道具 举报

18

主题

321

回帖

375

积分

高级会员

积分
375
发表于 2020-3-30 17:38:35 | 显示全部楼层
勘误手册更新了,不知道有没有说明。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
 楼主| 发表于 2020-3-30 17:56:57 | 显示全部楼层
王海靖 发表于 2020-3-30 17:38
勘误手册更新了,不知道有没有说明。

还没有使用新版的库测试过,后面了试试
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
 楼主| 发表于 2020-3-31 11:01:23 | 显示全部楼层
王海靖 发表于 2020-3-30 17:38
勘误手册更新了,不知道有没有说明。

今天看了下勘误手册,还真是个bug

QQ截图20200331110814.png
回复

使用道具 举报

18

主题

321

回帖

375

积分

高级会员

积分
375
发表于 2020-3-31 13:17:55 | 显示全部楼层
eric2013 发表于 2020-3-31 11:01
今天看了下勘误手册,还真是个bug

下一版用户手册 可以加上了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-15 05:11 , Processed in 0.297471 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表