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

stm32进入stop模式被莫名其妙唤醒(应该是systick)但是无法被WKUP引脚唤醒。

[复制链接]
Lee_Corle 提问时间:2024-11-22 14:04 / 未解决

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
  HAL_UART_Transmit(&huart1, ("Hello"), sizeof("Hello"), 0xff);
  HAL_Delay(1000);
  HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
    SystemClock_Config();
    HAL_UART_Transmit(&huart1, ("Hello"), sizeof("Hello"), 0xff);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

这是我的main()函数。当进入stop模式按道理应该是已经关闭了systick的,但是根据串口注释看hello一直在被发送。

image.png


image.pngimage.png这是我的WKUP引脚的配置,当我按下这个按钮的时候,依然无法唤起stm32.这是为什么

收藏 评论3 发布时间:2024-11-22 14:04

举报

3个回答
xmshao 回答时间:2024-11-22 17:45:02
在进入STOP模式前,先将SYSTICK停掉。按照下面操作即可:
      SysTick->CTRL &=(~SysTick_CTRL_ENABLE_Msk);


唤醒后,再启动systick计数器。可以像下面一样操作:


    SysTick->CTRL |=(SysTick_CTRL_ENABLE_Msk); //唤醒后恢复SYSTICK计数的使能


当然,你调用库函数也可以。


HAL_SuspendTick(void);

HAL_ResumeTick(void);


至于,WKUP脚的唤醒,没啥特别的。芯片可能有多个WKUP脚,配置时别选错脚了。


  /* Disable used wakeup source: PWR_WAKEUP_PINx */
  HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PINx );


  /* Clear all related wakeup flags */
  __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
   
  /* Enable wakeup pin WKUP1 */
  HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1_HIGH);


触发极性的选择,软硬件要匹配。


。。。。。。进入低功耗模式。。。。。。
Lee_Corle 回答时间:2024-11-22 17:59:38

xmshao 发表于 2024-11-22 17:45
在进入STOP模式前,先将SYSTICK停掉。按照下面操作即可:
SysTick->CTRL &=(~SysTick_CTRL_ENABLE_Ms ...

我设置为进入stop模式,应该是不需要失能systick的,但是为什么systick会频繁触发中断唤醒设备。而且我的mcu在stop模式下可以直接烧录。太奇怪了

知足- 回答时间:2024-11-25 08:47:48

我用过外部中断唤醒的方式,在进入STOP模式前,清除所有外部中断标志位,其他(比如systick)不做处理,是正常没问题的。另外可以检查下WAKE_UP引脚的上下拉状态,是不是一直处于唤醒电平。

所属标签

相似问题

官网相关资源

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