STM32L151C8T6进入停止模式,引脚PB5和PC13初始化及外部中断唤醒,HAL库代码
时间: 2024-02-20 15:01:52 浏览: 132
下面是使用HAL库的STM32L151C8T6进入停止模式,引脚PB5和PC13初始化及外部中断唤醒的代码:
```c
/* 定义唤醒引脚 */
#define WAKEUP_Pin GPIO_PIN_13
#define WAKEUP_GPIO_Port GPIOC
#define WAKEUP_EXTI_IRQn EXTI15_10_IRQn
/* 定义引脚PB5为输出 */
#define LED_Pin GPIO_PIN_5
#define LED_GPIO_Port GPIOB
/* 进入停止模式 */
void EnterStopMode(void)
{
/* 关闭唤醒引脚的时钟 */
__HAL_RCC_GPIOC_CLK_DISABLE();
/* 配置唤醒引脚为下降沿触发中断 */
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = WAKEUP_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(WAKEUP_GPIO_Port, &GPIO_InitStruct);
/* 使能唤醒引脚的时钟 */
__HAL_RCC_GPIOC_CLK_ENABLE();
/* 使能唤醒引脚中断 */
HAL_NVIC_SetPriority(WAKEUP_EXTI_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(WAKEUP_EXTI_IRQn);
/* 配置引脚PB5为输出 */
GPIO_InitStruct.Pin = LED_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct);
/* 进入停止模式 */
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
}
/* 唤醒引脚中断处理函数 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
/* 熄灭LED灯 */
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
}
```
在这个代码中,我们首先关闭了唤醒引脚的时钟,然后配置唤醒引脚为下降沿触发中断,并使能唤醒引脚的时钟和中断。接着,我们配置引脚PB5为输出,并进入停止模式。当唤醒引脚检测到下降沿时,会触发中断处理函数,在这个函数中我们熄灭LED灯。
阅读全文