EXTI简介
EXTI可以实现对外部输入信号的上升沿检测和下降沿的检测。EXTI可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。
可以看到EXTI一共有20条信号线,即可同时检测来自20路的中断请求。
代码实现
(1)首先配置GPIO初始化结构体
GPIO要配置为浮空输入
void Key_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;
GPIO_Init(GPIOC,&GPIO_InitStructure);
}
(2)配置NVIC中断控制器
static void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* 配置NVIC为优先级组1 */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
/* 配置中断源:按键1 */
NVIC_InitStructure.NVIC_IRQChannel =EXTI0_IRQn;
/* 配置抢占优先级 */
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
/* 配置子优先级 */
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
/* 使能中断通道 */
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
/* 配置中断源:按键2,其他使用上面相关配置 */
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
NVIC_Init(&NVIC_InitStructure);
}
(3)配置EXTI初始化结构体
记得打开时钟!
void EXTI_Key_Config(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
/* 配置 NVIC 中断*/
NVIC_Configuration();
Key_Config();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
/* 选择EXTI的信号源 */
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
EXTI_InitStructure.EXTI_Line = EXTI_Line0;
/* EXTI为中断模式 */
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
/* 上升沿中断 */
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
/* 使能中断 */
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
/* 选择EXTI的信号源 */
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);
EXTI_InitStructure.EXTI_Line = EXTI_Line13;
/* EXTI为中断模式 */
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
/* 下降沿中断 */
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
/* 使能中断 */
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
}
(4)编写中断服务函数
void EXTI0_IRQHandler(void)
{
//确保是否产生了EXTI Line中断
if(EXTI_GetITStatus(EXTI_Line0) != RESET)
{
// LED1 取反
if(GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_2))
GPIO_ResetBits(GPIOC,GPIO_Pin_2);
else
GPIO_SetBits(GPIOC,GPIO_Pin_2);
//清除中断标志位
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
上一篇:I2C协议的解析
下一篇:STM32学习——GPIO的操作
推荐阅读最新更新时间:2024-11-17 11:35
设计资源 培训 开发板 精华推荐
- 来自多个输入源的 LTC3622HDE-2 双路输出降压型稳压器的典型应用电路
- 103030009, Relay Shield v3.0 提供控制大电流设备的解决方案
- EVAL-AD7741/42EB,用于 AD7741 单通道/多通道同步电压频率转换器的评估板
- Tildagon:EMF 可重复利用的电子徽章,不止于2024
- IP6505快充电路板-支持华为三星等快充协议-为手机充电宝充电
- ADP160-3.3-EVALZ,ADP160-AUJZ-3.3-R7线性稳压器评估板3.3V
- KIT08XS6421EKEVB: 评估套件 - MC08XS6421EK,四通道高边开关
- LT3755IUD-2 50W 白光 LED 头灯驱动器的典型应用电路
- 恩智浦BlueBox 3.0汽车高性能计算(AHPC)开发平台
- 使用 Analog Devices 的 LTC2615CGN 的参考设计
- 非常见问题解答第223期:如何在没有软启动方程的情况下测量和确定软启动时序?
- 兆易创新GD25/55全系列车规级SPI NOR Flash荣获ISO 26262 ASIL D功能安全认证证书
- 新型IsoVu™ 隔离电流探头:为电流测量带来全新维度
- 英飞凌推出简化电机控制开发的ModusToolbox™电机套件
- 意法半导体IO-Link执行器电路板为工业监控和设备厂商带来一站式参考设计
- Melexis采用无磁芯技术缩小电流感测装置尺寸
- 千丘智能侍淳博:用数字疗法,点亮“孤独症”儿童的光
- 数药智能冯尚:ADHD数字疗法正为儿童“多动症”提供更有效便捷服务
- Vicor高性能电源模块助力低空航空电子设备和 EVTOL的发展
- 创实技术electronica 2024首秀:加速国内分销商海外拓展之路
- 乐视发Letv WATCH W6智能手表:支持血氧饱和度、心率监测等
- 鸿蒙发布HarmonyOS 3开发者预览版 2022年一季度上线
- 荣耀X30 Max正面照公布:水滴全面屏,搭天玑900 SoC
- Redmi Note 11搭三星AMOLED针孔屏:2K档罕见
- 三星One UI 4 Beta版内测:移除广告 动画效果令人惊叹
- 华为P50将在明年亮相海外:高通骁龙888芯片、支持4G网络
- 诺基亚225 4G支付版发布:价格349元
- Android 12翻车:多款谷歌Pixel的设备更新后崩溃 续航缩水
- vivo Funtouch OS 12海外机型更新时间表曝光
- Q3净利润涨119倍,国科微开盘一字涨停