STM32 PB8 PB9外部中断问题

配置外部中断步骤

1. 配置需要中断引脚模式

2.配置外部中断

  2.1 配置外部中断结构体

    注意 这里所有中断公用一个结构体,所以初始化的时候需要一起初始化

  EXTI_InitStructure.EXTI_Line = EXTI_Line8|EXTI_Line9;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿中断
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure); 

  2.2添加中断源

//出入库引脚
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource8);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);

 

3. 配置NVIC优先级

    因为STM32里面所有的中断配置都是这个东西管理的。所以配置的时候必须要添加。而且 5_9引脚共用一条中断线

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn  ;
       NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
       NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
       NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
 

4. 编写中断服务函数

同理 引脚5-9共用一个中断服务函数,判断哪条线再判断哪个引脚即可知道是哪个产生了中断。
void EXTI9_5_IRQHandler ()
{

  if(EXTI_GetITStatus(EXTI_Line8) != RESET)
{      
/**add your programe here+**/
EXTI_ClearITPendingBit(EXTI_Line8);   
}  
  else if(EXTI_GetITStatus(EXTI_Line9) != RESET)
{
/**add your programe here**/
EXTI_ClearITPendingBit(EXTI_Line9);     
}  
}

 

 

 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以为您提供一些关于使用PB0引脚实现stm32外部中断的指导。 首先,您需要准备一块stm32开发板和一些相关的传感器或开关等外部设备。然后,您需要在开发板上连接这些外部设备,并将它们与PB0引脚相连。接下来,您需要编写一些代码来配置PB0引脚,并启用外部中断功能。 以下是一个简单的示例代码,其中使用了stm32f1xx系列开发板和HAL库: ``` #include "stm32f1xx.h" #include "stm32f1xx_hal_gpio.h" #include "stm32f1xx_hal_exti.h" void EXTI0_IRQHandler(void) { // 处理外部中断事件 } int main(void) { // 初始化GPIO引脚和外部中断线 GPIO_InitTypeDef GPIO_InitStruct = {0}; EXTI_InitTypeDef EXTI_InitStruct = {0}; NVIC_InitTypeDef NVIC_InitStruct = {0}; __HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); EXTI_InitStruct.Line = EXTI_LINE_0; EXTI_InitStruct.Mode = EXTI_MODE_INTERRUPT; EXTI_InitStruct.Trigger = EXTI_TRIGGER_FALLING; EXTI_InitStruct.Pull = EXTI_PULLUP; HAL_EXTI_Init(&EXTI_InitStruct); NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x00; NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x00; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; HAL_NVIC_Init(&NVIC_InitStruct); while(1) { // 主循环 } } ``` 在这个示例代码中,我们使用GPIOB的0号引脚,并将它配置为下降沿触发的外部中断。当外部设备引脚的电平发生下降沿时,就会触发中断,并执行EXTI0_IRQHandler函数中的代码。 当您编写好了代码后,就可以将程序下载到开发板中运行了。然后,您可以尝试按下或触发外部设备,观察程序是否会正确响应外部中断事件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值