stm32成长记之中断介绍
来源:互联网 发布:网络电话拨号软件 编辑:程序博客网 时间:2024/06/15 17:52
嵌套向量中断控制器
特性
●68个可屏蔽中断通道(不包含16个Cortex™-M3的中断线);
● 16个可编程的优先等级(使用了4位中断优先级);
外部中断/事件控制器框图
外部中断程序设计思路:
中断初始化,主要是完善三个结构体:
①GPIO_InitTypeDef (功能:IO配置)
②EXTI_InitTypeDef (功能:中断配置)
③NVIC_InitTypeDef (功能:中断优先级配置)
抢占优先级高的可以抢占优先级低的,即发生中断嵌套;响应优先级高的中断先进行,但不会抢占响应优先级低的中断,即不能发生中断嵌套;
void exti_init() {GPIO_InitTypeDef GPIO_InitStructure;EXTI_InitTypeDef EXTI_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //若是,开启复用功能,需要开启复用时钟。
GPIO_InitStructure.GPIO_Pin=k_left;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; //按键所接IO口设置为上拉模式GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOE,&GPIO_InitStructure);//此处注意,若是没有将中断引脚映射到外部中断线路上,中断将无效GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);//选择GPIO管脚作外部中断线路/*设置外部中断模式 */EXTI_InitStructure.EXTI_Line=EXTI_Line2;//挂载中断线2
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//设置为中断模式EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure); /*设置中断优先级*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; //打开EXIT2的全局中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级为0NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应优先级为0NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能NVIC_Init(&NVIC_InitStructure);}中断处理程序实现:①通过EXTI_GetITStatus检测中断线是否发生了变化
(EXTI_GetITStatus通过检测中断的挂起寄存器EXTI_PR是否和当前发生变化的中断线相同,是的话,返回SET;否的话,返回RESET。)
②发生中断后,使用EXTI_ClearITPendingBit清除EXTI线路挂起位。
中断处理函数,应该放置与stm32f10x_it.c中,也可将该函数copy到Keil编译路径下
如果放在新建的文件夹中,需要将对应的目录添加到Keil编译目录中
void EXTI2_IRQHandler() {if(EXTI_GetITStatus(EXTI_Line2)==SET){ EXTI_ClearITPendingBit(EXTI_Line0);//清除EXTI线路挂起位delay_ms(10);//消抖if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==Bit_RESET) //k_left被按下{delay_ms(10);//消抖处理if(GPIO_ReadOutputDataBit(GPIOC,GPIO_Pin_0)==Bit_RESET){//LED 熄灭 GPIO_SetBits(GPIOC,GPIO_Pin_0);}else{ //LED 点亮GPIO_ResetBits(GPIOC,GPIO_Pin_0);}} while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)==0);}}
阅读全文
0 0
- stm32成长记之中断介绍
- stm32成长记之定时器中断简单了解
- STM32之中断函数介绍篇
- stm32成长记之滴答时钟
- stm32成长记之LED呼吸灯
- stm32成长记之定时器时间计算
- stm32之EXTI中断
- STM32之中断
- STM32之EXTI(中断)
- stm32 固件库之:中断
- stm32之中断系统
- STM32之中断管理
- stm32之定时器中断
- STM32成长记之USART--232串口通信
- STM32之外部中断和中断控制器
- stm32之外部中断EXTI
- stm32之中断优先级NVIC
- STM32之中断(按键)
- 时间和日期
- HTML、CSS知识汇总
- 2017 Multi-University Training Contest
- QT插件+ROS 1 安装配置
- 10几天的总结
- stm32成长记之中断介绍
- 1.GitHub 操作总结
- 特征值和特征向量之学习笔记
- 泛型委托System.Func<>与System.Action<>
- 继承MongoDBRepository仓库的模糊查询
- [BZOJ1087][SCOI2005]互不侵犯King
- 《机器学习实战》系列之KNN算法【一】
- TCP/IP协议详解
- hive数据仓库框架之日志分析