Air001外部中断/事件控制器
- ✨对于外部中断,一般单片机基本标配的硬件功能,使用方法也没有什么特别的地方,对于事件控制器,用于停机模式下唤醒单片机功能,但是使用起来很简单,只需配置其引脚模式即可。
- 🔖
目前只看到该芯片的数据手册,没有看到参考手册,也没法具体了解其机制原理。 - 🔰Stop mode(停机模式):该模式下 SRAM 和寄存器的内容保持,HSI 和 HSE 关闭,VDD 域下大部分模块的时钟都被停掉。GPIO,COMP output,LPTIM 可以唤醒 stop 模式。
注: 在进入停机式时,IWDG和对应的时钟不会被停止。
📓外部中断/事件控制器(EXTI)数据手册描述语:
外部中断/事件控制器包含19个边沿检测器,用于产生中断/事件请求。每个中断线都可以独立地配置它的触发事件(上升沿或下降沿或双边沿),并能够单独地被屏蔽;有一个挂起寄存器维持所有中断请求的状态。18个通用I/O口连接到16个外部中断线。
👉🏻外部中断注意事项
- ⚡在外部中断触发后,需要在中断函数中,再次使能对应引脚的外部中断,否则无法响应第二次中断。这和STM32有所差异。
🌻配置外部中断
static void APP_ConfigureExti(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Pin = GPIO_PIN_2;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
HAL_NVIC_EnableIRQ(EXTI2_3_IRQn);
HAL_NVIC_SetPriority(EXTI2_3_IRQn, 0, 0);
}
void EXTI2_3_IRQHandler(void)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2);
}
🌼引脚事件配置
- 🌿只需将引脚模式配置为对应的事件触发模式即可,没有中断服务函数
static void APP_ConfigureEXTI(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitStruct.Mode = GPIO_MODE_EVT_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Pin = GPIO_PIN_6;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
#include "main.h"
#include "usart.h"
#include "gpio.h"
#include "Button.h"
static void APP_ConfigureEXTI(void);
int main(void)
{
HAL_Init();
MX_GPIO_Init();
BSP_PB_Init(BUTTON_KEY, BUTTON_MODE_GPIO);
APP_ConfigureEXTI();
HAL_SuspendTick();
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
while(BSP_PB_GetState(BUTTON_KEY) == 0)
{
}
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
HAL_PWR_EnterSTOPMode(1, PWR_SLEEPENTRY_WFE);
HAL_ResumeTick();
while(1)
{
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
HAL_Delay(500);
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
HAL_Delay(500);
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_3);
HAL_Delay(500);
}
}
static void APP_ConfigureEXTI(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitStruct.Mode = GPIO_MODE_EVT_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Pin = GPIO_PIN_6;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
📚Air001外部中断和停机模式事件唤醒个人测试例程
- 🌿从SDK例程资源移植出来的,工程无需配置可独立编译。如不需要生成BIN文件可以取消勾选。
![在这里插入图片描述](https://img-blog.csdnimg.cn/81c5505f322f46baa18d06dd1f8de33b.png)
- 🌿外部中断例程
链接:https:
提取码:6fnm
链接:https:
提取码:lclm