qianjin678 2023-04-04 18:43 采纳率: 100%
浏览 30
已结题

在学习中断的时候可能是因为中断服务函数没有写好导致中断无法实现

在学习STM32的外部中断时时根据视频修改代码,目的是通过按键设置的中断改变LED亮灭,因为视频中板子给出的管脚是PE4,使用EXTI4,他说EXTI0-4用的服务函数跟EXTI5-9是不一样的,我改了之后发现我的板子不能实现中断的功能,请问要怎么改。
这个是我写的代码

#include "./BSP/EXTI/exti.h"
#include "./SYSTEM/delay/delay.h"

void exti_init(void)
{
    GPIO_InitTypeDef gpioC_init_struct;//定义结构体
    
    __HAL_RCC_GPIOC_CLK_ENABLE();//使能时钟
    
    gpioC_init_struct.Pin=GPIO_PIN_5;//Pin是管脚
    gpioC_init_struct.Mode=GPIO_MODE_IT_FALLING;//Mode是工作模式,此为推挽
    gpioC_init_struct.Pull=GPIO_PULLUP;//Speed是速度
    
    HAL_GPIO_Init(GPIOC,&gpioC_init_struct);
    //配置工作模式
    HAL_NVIC_SetPriority(EXTI9_5_IRQn,2,0);//EXTI9_5_IRQn是中断号,应该与引脚号相同,2是抢占优先级,0是响应优先级
    
    HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);


}
void EXTI9_5_IRQHandler(void)//中断服务函数
{
    HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_5);//中断号设置为5
    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_5);//清除中断
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
        delay_ms(20);
    if(GPIO_Pin==GPIO_PIN_5)
    {
        if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_5==0))//检测是否按下键盘
         {
             HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_8);//若是按下键盘则LED PA8取反。
         }
    }
}

下面是主函数

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
#include "./BSP/EXTI/exti.h"


int main(void)
{
    
    HAL_Init();                         /* 初始化HAL库 */
    sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
    delay_init(72);                     /* 延时初始化 */
    led_init();                         /* LED初始化 */
    while(1)
    { 
      
        HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_RESET);  
    }
}

这是厂家给的代码

#include "./BSP/EXTI/exti.h"
#include "./SYSTEM/delay/delay.h"


void exti_init(void)
{
    GPIO_InitTypeDef gpio_init_struct;
    __HAL_RCC_GPIOE_CLK_ENABLE();

    gpio_init_struct.Pin = GPIO_PIN_4;
    gpio_init_struct.Mode = GPIO_MODE_IT_FALLING;
    gpio_init_struct.Pull = GPIO_PULLUP;
    HAL_GPIO_Init(GPIOE, &gpio_init_struct);
    
    HAL_NVIC_SetPriority(EXTI4_IRQn, 2, 0);
    HAL_NVIC_EnableIRQ(EXTI4_IRQn);
}

void EXTI4_IRQHandler(void)
{
    HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_4);
    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_4);
}

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    delay_ms(20);
    
    if(GPIO_Pin == GPIO_PIN_4)
    {
        if(HAL_GPIO_ReadPin(GPIOE, GPIO_PIN_4)==0)
        {
            HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);
        }
    }
}

下面是主函数

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/delay/delay.h"
#include "./SYSTEM/usart/usart.h"
#include "./BSP/LED/led.h"
#include "./BSP/EXTI/exti.h"


int main(void)
{
    HAL_Init();                                 /* 初始化HAL库 */
    sys_stm32_clock_init(RCC_PLL_MUL9);         /* 设置时钟,72M */
    delay_init(72);                             /* 初始化延时函数 */
    led_init();                                 /* 初始化LED */
    exti_init();
    
    while(1)
    {
        LED1(1);                                /* LED1 灭 */
        delay_ms(500);
        LED1(0);                                /* LED1 亮 */
        delay_ms(500);
    }
}
  • 写回答

2条回答 默认 最新

  • 天下第一好ؑ 2023-04-05 15:21
    关注

    别的不知道,第一眼就看到了没调用exti_init,怎么可能跑的通

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月15日
  • 已采纳回答 4月15日
  • 创建了问题 4月4日

悬赏问题

  • ¥33 集成BiLSTM模型和GCN模型时,前模型的输出不匹配后模型的输入
  • ¥15 关于液体厚度提取,和铺展轨迹数据化处理
  • ¥20 对方微信是wxid如何添加成好友?或者转换成微信号?
  • ¥15 yolov5实验数据好,但是自己拍摄的照片检测结果差
  • ¥15 做过dali2.0认证的技术,
  • ¥15 一道python难题
  • ¥15 matlab 免疫算法
  • ¥50 可视化界面构建,实现信息模块功能
  • ¥15 基于bert-base-chinese的中文文本处理
  • ¥15 高价求抖音抓包技术,抖音抓包无网络问题