STM32外部中断处理流程及注意事项
来源:互联网 发布:少年包青天 恐怖 知乎 编辑:程序博客网 时间:2024/04/24 17:48
STM32的外部中断是以组为单位,例如PA0、PB0、PC0、PD0、PE0、PF0、PG0共用外部中断0,我们再使用时从中选择一个座位外部中断0即可,其他中断类推。
外部中断包括EXTI0、EXTI1、EXTI2、EXTI3、EXTI4、EXTI9_5、EXTI15_10,Pin0--Pin4有各自独立的中断,
Pin5--Pin9共用一个中断,Pin10--Pin15共用一个中断。
中断号Pin脚EXTI0Pin0EXTI1Pin1EXTI2Pin2EXTI3Pin3EXTI4Pin4EXTI9_5Pin5--Pin9EXTI15_10Pin10--Pin15
外部中断设置流程:
1 设置IO口
将IO口设置为输入状态。
GPIO_InitTypeDef GPIO_KEY;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOE, ENABLE); //时钟使能
GPIO_KEY.GPIO_Pin = GPIO_Pin_9;
GPIO_KEY.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_KEY.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_Init(GPIOB, &GPIO_KEY);2 设置中断优先级
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //设置组优先级
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel; //设置通道中断号
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //从优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //通道使能
NVIC_Init(&NVIC_InitStructure);3 设置中断源
EXTI_InitTypeDef EXTI_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //外部中断必须开启AFIO时钟
EXTI_ClearITPendingBit(EXTI_Line9); //清除EXTI线路挂起位 PB9
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource9); //选择PB9作为EXTI线路
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断请求
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
EXTI_InitStructure.EXTI_Line = EXTI_Line9 ; //PB9为中断源
EXTI_InitStructure.EXTI_LineCmd = ENABLE; //使能该中断源
EXTI_Init(&EXTI_InitStructure);注:设置外部中断源时必须是来了个AFIO功能,否则中断得不到响应。
4 中断响应函数
void IRQ_EXTI9(void)
{
Pow_State += 1;
if(Pow_State%2 == 0)
{
Pow_State = 0;
}
}5 中断函数
void EXTI9_5_IRQHandler(void)
{
delay_ms(10);
if ( EXTI_GetITStatus(EXTI_Line9) != RESET )
{
NVIC_SETPRIMASK(); //关闭总中断
EXTI_ClearITPendingBit(EXTI_Line9);
IRQ_EXTI9();
NVIC_RESETPRIMASK();//开放总中断
}
}6 主函数
void Process_Key(void)
{
switch(Pow_State)
{
case 0:
LED_PWR_Off();
break;
case 1:
LED_PWR_On();
break;
default:
break;
}}
- STM32外部中断处理流程及注意事项
- STM32中断流程处理
- STM32中断流程处理
- STM32外部中断及定时器编程示例
- 按键处理及外部中断
- 按键处理及外部中断
- STM32外部中断测试
- STM32外部中断测试
- STM32外部中断总结
- STM32外部中断
- STM32外部中断设置
- STM32外部中断
- STM32外部中断
- STM32外部中断详解
- STM32外部中断详解
- STM32外部中断
- STM32外部中断详解
- STM32 外部中断
- 金山界面库分析(7)
- 全面整理CentOS系统使用中文
- i'm back
- 通过ajax方式从后台查询出数据并填入前台的select中
- 十点半
- STM32外部中断处理流程及注意事项
- PHP获取用户的浏览器与操作系统信息的代码
- VB打包发布--不带源代码
- hoj 2430 树状数组 简单题
- 堆排序
- Weblogic 10g: How to get AES encrypted password using WLS cmd
- Rainbow table彩虹表破解md5密码
- 黑马程序员——MyEclipse快捷键
- VC文件关联小结