四、外部中断操作

1.操作步骤

  (1)使能时钟以及配置端口;

  (2)使能AFIO时钟,绑定外部中断线;

  (3)设置外部中断EXTI;

  (4)配置分配中断优先级NVIC;

  (5)编写中断函数。

2.函数位置说明

  (1)外部中断初始化函数封装函数库,stm32f10x_exti.c。

  (2)中断优先级配置函数封装库,misc.c。

  (3)中断函数封装库,stm32f10x_it.c。

3.代码演示,以GPIOA1为例。

  (1)使能时钟以及配置端口;

1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
2     
3 GPIO_InitTypeDef GPIO_InitStruct;
4 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;
5 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;  //上拉输入
6 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
7 GPIO_Init(GPIOA,&GPIO_InitStruct);

  (2)使能AFIO端口复用时钟,绑定外部中断线;

1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//使能时钟
2 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource1);//绑定外部中断线

  (3)设置外部中断EXTI;

1 EXTI_InitTypeDef EXTI_InitStruct;
2 EXTI_InitStruct.EXTI_Line = EXTI_Line1;//中断口
3 EXTI_InitStruct.EXTI_LineCmd = ENABLE;//开启EXTI中断
4 EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;//设置为中断模式
5 EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发
6 EXTI_Init(&EXTI_InitStruct);

  (4)配置分配中断优先级NVIC;

1 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级组
2 
3 NVIC_InitTypeDef NVIC_InitStruct;
4 NVIC_InitStruct.NVIC_IRQChannel = EXTI1_IRQn;//中断请求线
5 NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;//允许中断
6 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;//抢占优先级的优先级
7 NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;//响应优先级的优先级
8 NVIC_Init(&NVIC_InitStruct);

  (5)设置中断函数,要包含stm32f10x_it.h,中断函数名已确定,尽量使用,自己更改比较麻烦。

复制代码
 1 //设置中断函数
 2 void EXTI1_IRQHandler(void)
 3 {
 4     //获取中断线状态,此函数会检查中断是否使能。
 5     if(EXTI_GetITStatus(EXTI_Line1)==SET){
 6         key_value=1;
 7         //软件复位
 8         EXTI_ClearITPendingBit(EXTI_Line1);
 9     }
10 }
复制代码

4.添加宏。

 

posted @   稚终KINO  阅读(167)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
点击右上角即可分享
微信分享提示