STM32
直播中

张虎豹

7年用户 1611经验值
私信 关注
[问答]

STM32L431RCT6关机模式使用Wakeup唤醒遇到的疑问求解

根据STM32L431手册,“具有从待机/关机唤醒能力的I/O为:PA0,PC13,PE6,PA2,PC5。” L431没有PE端口,那么就有PA0,PC13,PA2,PC5,想把这四个脚都配置成关机模式下WAKEUP唤醒,根据官方例程序。(所有资料都是配置的PA0)。
代码如下:
GPIO_InitStruct.Pin = EXti0_Pin|EXTI2_Pin;   //PA0,PA2GPIO_InitStruct.Mode = GPIO_MODE_INPUT;GPIO_InitStruct.Pull = GPIO_PULLUP;
HAL_GPIO_Init(GPIOA,  GPIO_InitStruct);
HAL_PWREx_DisableGPIOPullUp(PWR_GPIO_A, PWR_GPIO_BIT_0|PWR_GPIO_BIT_2);HAL_PWREx_EnablePullUpPullDownConfig();
HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1);  //PA0HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN4); // PA2
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);        // 清除待机标志__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);        // 清除全部wakeup pin标志HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1_LOW);        // wakeup pin 1 PA0HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN4_LOW); // PA2
(按照手册上的顺序和Cubemx配置 PA2为WAKEUP_PIN4)
这样的配置,PA0能在低电平唤醒,但PA2无法唤醒。有用过这几个脚唤醒的吗?能否指点下,谢谢

回帖(1)

郭大

2024-7-3 16:56:45
在STM32L431RCT6中,您想要使用四个GPIO引脚(PA0, PC13, PA2, PC5)在关机模式下作为唤醒源。首先,我们需要了解STM32L431的数据手册,以确保这些引脚确实支持关机模式下的唤醒功能。

根据STM32L431的数据手册,具有从待机/关机唤醒能力的I/O为:PA0,PC13,PE6,PA2,PC5。但是,您提到L431没有PE端口,所以我们可以忽略PE6。现在我们需要配置PA0, PC13, PA2, 和 PC5。

以下是配置这些引脚的步骤:

1. 配置GPIO引脚模式和上拉/下拉电阻:
   在您的代码中,您已经配置了PA0和PA2。现在我们需要添加PC13和PC5的配置。

   ```c
   GPIO_InitTypeDef GPIO_InitStruct;

   GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_2; // PA0, PA2
   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
   GPIO_InitStruct.Pull = GPIO_PULLUP;
   HAL_GPIO_Init(GPIOA, GPIO_InitStruct);

   GPIO_InitStruct.Pin = GPIO_PIN_13; // PC13
   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
   GPIO_InitStruct.Pull = GPIO_PULLUP;
   HAL_GPIO_Init(GPIOC, GPIO_InitStruct);

   GPIO_InitStruct.Pin = GPIO_PIN_5; // PC5
   GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
   GPIO_InitStruct.Pull = GPIO_PULLUP;
   HAL_GPIO_Init(GPIOC, GPIO_InitStruct);
   ```

2. 禁用GPIO上拉电阻:
   使用HAL_PWREx_DisableGPIOPullUp函数禁用PA0和PA2的上拉电阻。

   ```c
   HAL_PWREx_DisableGPIOPullUp(PWR_GPIO_A, PWR_GPIO_BIT_0 | PWR_GPIO_BIT_2);
   ```

3. 配置EXTI中断:
   配置EXTI中断,以便在这些引脚上的事件触发时唤醒MCU。

   ```c
   EXTI_HandleTypeDef EXTI_InitStruct;

   EXTI_InitStruct.Line = EXTI_LINE_0; // PA0
   EXTI_InitStruct.Type = EXTI_TYPE_EDGE;
   EXTI_InitStruct.Mode = EXTI_MODE_INTERRUPT;
   HAL_EXTI_Init(&EXTI_InitStruct);

   EXTI_InitStruct.Line = EXTI_LINE_2; // PA2
   HAL_EXTI_Init(&EXTI_InitStruct);

   EXTI_InitStruct.Line = EXTI_LINE_13; // PC13
   HAL_EXTI_Init(&EXTI_InitStruct);

   EXTI_InitStruct.Line = EXTI_LINE_5; // PC5
   HAL_EXTI_Init(&EXTI_InitStruct);
   ```

4. 配置NVIC(可选):
   如果需要处理中断,您可能需要配置NVIC以允许中断。

5. 进入关机模式:
   使用HAL_PWR_EnterSLEEPMode函数使MCU进入关机模式。

   ```c
   HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
   ```

请注意,这些步骤仅提供了一个基本的配置示例。您可能需要根据您的具体需求进行调整。在实际应用中,您可能还需要考虑其他因素,如电源管理、时钟设置等。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分