野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11921|回复: 4

指南者EXTI外部中断触发问题

[复制链接]
发表于 2021-10-17 17:19:43 | 显示全部楼层 |阅读模式
按着火哥视频教程写的代码,编译0警告0错误,烧进指南者开发板按键无法触发LED的亮灭,不知道什么原因,求各位大佬解答
还有光盘里面的18号EXTI的例程烧近开发板也没办法通过开关触发中断控制LED。

#ifndef _EXTI_H
#define _EXTI_H

#include "stm32f10x.h"

#define KEY1_INT_GPIO_PIN     GPIO_Pin_0
#define KEY1_INT_GPIO_PORT    GPIOA
#define KEY1_INT_GPIO_CLK     RCC_APB2Periph_GPIOA

#define LED_G_GPIO_PIN                                GPIO_Pin_0
#define LED_G_GPIO_PORT                                GPIOB
#define LED_G_GPIO_CLK                                RCC_APB2Periph_GPIOB

#define ON                0
#define OFF                1

#define LED_G(a)                if(a)\
                                                                                                        {GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);}\
                                                                                else \
                                                                                                        {GPIO_SetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN);}

#define LED_G_TOGGLE                        {LED_G_GPIO_PORT->ODR ^= GPIO_Pin_0;}

void LED_GPIO_Config(void);
void EXTI_Key_Config(void);

#endif


#include "exti.h"

void LED_GPIO_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStruct;
       
        RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK, ENABLE);
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStruct.GPIO_Pin = LED_G_GPIO_PIN;
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;
        GPIO_Init(LED_G_GPIO_PORT, &GPIO_InitStruct);
}

static void EXTI_NVIC_Config(void)//仅该文件可调用
{
        NVIC_InitTypeDef NVIC_InitStruct;
       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
       
        NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn;
        NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
        NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStruct);
}

void EXTI_Key_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStruct;
        EXTI_InitTypeDef EXTI_InitStruct;
       
        //配置中断优先级
        EXTI_NVIC_Config();
       
        //配置GPIO
        RCC_APB2PeriphClockCmd(KEY1_INT_GPIO_CLK, ENABLE);
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_InitStruct.GPIO_Pin = KEY1_INT_GPIO_PIN;
        GPIO_Init(KEY1_INT_GPIO_PORT, &GPIO_InitStruct);
       
        //配置EXTI
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
       
        EXTI_InitStruct.EXTI_Line = EXTI_Line0;
        EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;
        EXTI_InitStruct.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStruct);
}


void KEY1_IRQHandler(void)
{
        if(EXTI_GetFlagStatus(EXTI_Line0) != RESET)
        {
                LED_G_TOGGLE;
        }
       
        EXTI_ClearITPendingBit(EXTI_Line0);
        EXTI_ClearFlag(EXTI_Line0);
}



按着火哥视频教程写的代码,编译0警告0错误,烧进指南者开发板按键无法触发LED的亮灭,不知道什么原因,求各位大佬解答
还有光盘里面的18号EXTI的例程烧近开发板也没办法通过开关触发中断控制LED。

回复

使用道具 举报

发表于 2021-10-22 09:37:05 | 显示全部楼层
检查板子上BOOT是否都接GND
回复 支持 0 反对 1

使用道具 举报

发表于 2021-10-27 11:22:32 | 显示全部楼层
void KEY1_IRQHandler(void)   这一句改成     void EXTI0_IRQHandler(void)    试一下?
回复 支持 1 反对 0

使用道具 举报

发表于 2021-10-27 20:28:30 | 显示全部楼层
点灯的IO口不用复用输出吧
直接推挽输出就好了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-2 11:36:25 | 显示全部楼层
一级菜鸟 发表于 2021-10-27 20:28
点灯的IO口不用复用输出吧
直接推挽输出就好了

对的,是这个原因,解决了,谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-28 09:41 , Processed in 0.033898 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表