STM32F103的IO中断

60 篇文章 12 订阅

目录

1、中断向量表配置

2、中断引脚配置

3、中断处理函数


EXTI0 至 EXTI15 用于 GPIO,通过编程控制可以实现任意一个 GPIO作为 EXTI的输入源。由表 18-1 可知, EXTI0 可以通过 AFIO 的外部中断配置寄存器 1(AFIO_EXTICR1)的EXTI0[3:0]位选择配置为 PA0、 PB0、 PC0、 PD0、 PE0、 PF0、 PG0、 PH0 或者 PI0。
 

  XTI9_5_IRQn即5-9线都连接到一个中断源上去了,那么可以有多个外部中断共同使用这个中断源,多个外部中断占用一个中断源的。可以同时配置中断,且中断触发方式不同。只不过他们发生中断进入的是同一个中断函数,需要在函数里面判断是哪个中断。至于他们是那种边缘中断,各设置各的。

void EXTI9_5_IRQHandler(void)
{
          if(EXTI_GetITStatus(EXTI_Line7) != RESET)
        {        

        }
       
        if(EXTI_GetITStatus(EXTI_Line9) != RESET)          
        {          


                EXTI_ClearITPendingBit(EXTI_Line9);
        }

}
中断/事件线输入源
EXTI0PX0(X 可为 A,B,C,D,E,F,G,H,I)
EXTI1PX1(X 可为 A,B,C,D,E,F,G,H,I)
EXTI2PX2(X 可为 A,B,C,D,E,F,G,H,I)
EXTI3PX3(X 可为 A,B,C,D,E,F,G,H,I)
EXTI4PX4(X 可为 A,B,C,D,E,F,G,H,I)
EXTI5PX5(X 可为 A,B,C,D,E,F,G,H,I)
EXTI6PX6(X 可为 A,B,C,D,E,F,G,H,I)
EXTI7PX7(X 可为 A,B,C,D,E,F,G,H,I)
EXTI8PX8(X 可为 A,B,C,D,E,F,G,H,I)
EXTI9PX9(X 可为 A,B,C,D,E,F,G,H,I)
EXTI10PX10(X 可为 A,B,C,D,E,F,G,H,I)
EXTI11PX11(X 可为 A,B,C,D,E,F,G,H,I)
EXTI12PX12(X 可为 A,B,C,D,E,F,G,H,I)
EXTI13PX13(X 可为 A,B,C,D,E,F,G,H,I)
EXTI14PX14(X 可为 A,B,C,D,E,F,G,H,I)
EXTI15PX15(X 可为 A,B,C,D,E,F,G,H,I)
EXTI16PVD 输出
EXTI17RTC 闹钟事件
EXTI18USB 唤醒事件
EXTI19以太网唤醒事件(只适用互联型)

 

 

1、中断向量表配置

使用GPIOC,PIN5,中断EXTI9_5_IRQn

/**
  * @brief  配置嵌套向量中断控制器NVIC
  * @param  无
  * @retval 无
  */
static void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  
  /* 配置NVIC为优先级组1 */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  
  /* 配置中断源:按键1 */
  NVIC_InitStructure.NVIC_IRQChannel =  EXTI9_5_IRQn;
  /* 配置抢占优先级 */
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  /* 配置子优先级 */
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  /* 使能中断通道 */
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  

}

2、中断引脚配置

1、浮空输入;2、输入中断模式;3、信号源的选择;4、上升沿下降沿进入中断

 /**
  * @brief  配置 IO为EXTI中断口,并设置中断优先级
  * @param  无
  * @retval 无
  */
void EXTI_Config(void)
{
          GPIO_InitTypeDef GPIO_InitStructure; 
          EXTI_InitTypeDef EXTI_InitStructure;

          /*开启按键GPIO口的时钟*/
          RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);
                                                                                              
          /* 配置 NVIC 中断*/
          NVIC_Configuration();

          /*--------------------------配置引脚-----------------------------*/
          /* 选择按键用到的GPIO */	
          GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_5;
          /* 配置为浮空输入 */	
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING ;

          //GPIO_Initstructure.GPIO_Speed = GPIO_Speed_2MHz;

          GPIO_Init( GPIOC, &GPIO_InitStructure);



          /* -------------选择EXTI的信号源 -------------*/
          GPIO_EXTILineConfig( GPIO_PortSourceGPIOC,  GPIO_PinSource5); 
          EXTI_InitStructure.EXTI_Line =  EXTI_Line5;

          /* EXTI为中断模式 */
          EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
          /* 上升沿中断 */
          EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;//EXTI_Trigger_Rising;//EXTI_Trigger_Rising_Falling
          /* 使能中断 */
          EXTI_InitStructure.EXTI_LineCmd = ENABLE;
          EXTI_Init(&EXTI_InitStructure);

	

}

3、中断处理函数

中断函数在哪里都没问题????? 我一般卸载stm32f10x_it.c

void EXTI9_5_IRQHandler(void)
{
	if(EXTI_GetITStatus(INT_EXTI_LINE) != RESET) 
	{
          
           if(GPIO_ReadInputDataBit(INT_GPIO_PORT,  INT_GPIO_PIN) )
          {
                      GPIO_ResetBits(OUT7_GPIO_PORT, OUT7_GPIO_PIN);
          }
          else
          {
                      GPIO_SetBits(OUT7_GPIO_PORT, OUT7_GPIO_PIN);
          
          }

         

          EXTI_ClearITPendingBit(INT_EXTI_LINE);     
	}  
}

 

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F103系列的外部中断是通过EXTI(External interrupt/event controller)模块来实现的。该系列的中断控制器支持19个外部中断事件请求,其中线0-15对应外部IO口的输入中断,线16连接到PVD输出,线17连接到RTC闹钟事件,线18连接到USB唤醒事件。每个中断事件都有独立的触发和屏蔽设置。\[2\] STM32F103的每个IO口都可以作为外部中断中断输入口。中断线0-4每个中断线对应一个中断函数,中断线5-9共用中断函数EXTI9_5_IRQHandler,中断线10-15共用中断函数EXTI15_10_IRQHandler。每个中断线对应了最多7个IO口,需要通过配置来决定对应的中断线配置到哪个GPIO口上。\[2\] 在配置外部中断时,需要进行映射关系的配置。每个外部中断线对应一个外部中断通道和一个外部中断服务函数。具体的映射关系可以参考引用\[3\]中的表格。同时,还需要对GPIO引脚进行配置,将对应的中断线映射到相应的GPIO口上。\[3\] 总结来说,STM32F103的外部中断功能可以通过配置EXTI模块和GPIO口来实现,可以根据需要选择不同的中断线和GPIO口进行配置。 #### 引用[.reference_title] - *1* *3* [STM32F103标准库开发:外部中断(EXTI)实验](https://blog.csdn.net/MQ0522/article/details/121491547)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [STM32F103外部IO中断](https://blog.csdn.net/zht_2000/article/details/103556506)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值