OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4397|回复: 0

STM32(PZ6806L)的学习板子,外部中断的问题,有3个外部中断没有反应,请各位大佬帮忙看看

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2021-2-19
在线时间
1 小时
发表于 2021-2-19 12:04:07 | 显示全部楼层 |阅读模式
1金钱
#include"weidai.h"
#include"led.h"
#include"beep.h"
#include "SysTick.h"
#include"shumaguan.h"
#include "dianji.h"
#include"key.h"
#include"exti.h"

int main()
{
        u8 i=0;
        SysTick_Init(72);
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        My_EXTI_Init();
        LED_Init();
                 while(1)
        {
                        i++;               
                        if(i%200==0)
                        {
                                LED1=!LED1;
                        }
                        delay_ms(10);
        }

}
以上是主函数


#include"exti.h"
#include "SysTick.h"
#include "weidai.h"
void My_EXTI_Init()
{
         GPIO_InitTypeDef GPIO_InitStructure;   
         NVIC_InitTypeDef NVIC_InitStructure;   
         EXTI_InitTypeDef EXTI_InitStructure;               

                        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);  
                       
                        GPIO_InitStructure.GPIO_Pin =key_UP_Pin;
                        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;  
                        GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
                        GPIO_Init(key_UP_PORT,&GPIO_InitStructure);   
       
                        GPIO_InitStructure.GPIO_Pin =key_LEFT_Pin|key_DOWN_Pin|key_RIGHT_Pin;
                        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;  
                        GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;
                        GPIO_Init(key_PORT,&GPIO_InitStructure);   
       
                        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);   
                        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);     
               
                        GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource2);   
                        GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource3);   
                        GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource4);     
       
                        NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn;                            
                        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;   
                        NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;                     
                        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;                         
                        NVIC_Init(&NVIC_InitStructure);      
                       
                        NVIC_InitStructure.NVIC_IRQChannel=EXTI2_IRQn;      
                        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;  
                        NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;      
                        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;         
                        NVIC_Init(&NVIC_InitStructure);     
       
                        NVIC_InitStructure.NVIC_IRQChannel=EXTI3_IRQn;      
                        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;   
                        NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;      
                        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;         
                        NVIC_Init(&NVIC_InitStructure);        
                       
                        NVIC_InitStructure.NVIC_IRQChannel=EXTI4_IRQn;      
                        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;   
                        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;      
                        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;         
                        NVIC_Init(&NVIC_InitStructure);      
       
                        EXTI_InitStructure.EXTI_Line=EXTI_Line0;                                 
                        EXTI_InitStructure.EXTI_Mode= EXTI_Mode_Interrupt;      
                        EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;   
                        EXTI_InitStructure.EXTI_LineCmd=ENABLE;               
                        EXTI_Init(&EXTI_InitStructure);                        
                               
                        EXTI_InitStructure.EXTI_Line=EXTI_Line2|EXTI_Line3|EXTI_Line4;      
                        EXTI_InitStructure.EXTI_Mode= EXTI_Mode_Interrupt;      
                        EXTI_InitStructure.EXTI_Trigger= EXTI_Trigger_Falling;   
                        EXTI_InitStructure.EXTI_LineCmd=ENABLE;                 
                        EXTI_Init(&EXTI_InitStructure);
}

void EXTI0_IRQHandler(void)
{
                if(EXTI_GetITStatus(EXTI_Line0)==1)   
                {
                                delay_ms(10);
                                if(key_UP_Pin==1)
                                {
                                LED2=0;
                                }
                }
                EXTI_ClearITPendingBit(EXTI_Line0);   
}         
               
void EXTI2_IRQHandler(void)
{
                if(EXTI_GetITStatus(EXTI_Line2)==1)  
                {
                                delay_ms(10);
                                if(key_LEFT_Pin ==0)
                                {
                                LED3=1;
                                }
                }
                EXTI_ClearITPendingBit(EXTI_Line2);     
}   

               
void EXTI3_IRQHandler(void)
{
                if(EXTI_GetITStatus(EXTI_Line3)==1)   
                {
                                delay_ms(10);
                                if(key_DOWN_Pin ==0)
                                {
                                LED2=1;
                                }
                }
                EXTI_ClearITPendingBit(EXTI_Line3);     
}   
               
void EXTI4_IRQHandler(void)
{
                if(EXTI_GetITStatus(EXTI_Line4)==1)   
                {
                                delay_ms(10);
                                if(key_RIGHT_Pin ==0)
                                {
                                LED3=1;
                                }
                }
                EXTI_ClearITPendingBit(EXTI_Line4);   
}   
以上是EXTI.C文件


#ifndef exti_H
#define exti_H

#include"stm32f10x.h"

#define key_UP_Pin       GPIO_Pin_0
#define key_UP_PORT    GPIOA

#define key_LEFT_Pin                GPIO_Pin_2
#define key_DOWN_Pin                GPIO_Pin_3
#define key_RIGHT_Pin                GPIO_Pin_4
#define key_PORT                         GPIOE

void My_EXTI_Init(void);

void EXTI0_IRQHandler(void);
void EXTI2_IRQHandler(void);
void EXTI3_IRQHandler(void);
void EXTI4_IRQHandler(void);

#endif

以上EXTI.H文件


#ifndef  weidai_H
#define  weidai_H

#include "stm32f10x.h"

#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr))
#define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum))
//IO?????
#define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C
#define GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C
#define GPIOC_ODR_Addr    (GPIOC_BASE+12) //0x4001100C
#define GPIOD_ODR_Addr    (GPIOD_BASE+12) //0x4001140C
#define GPIOE_ODR_Addr    (GPIOE_BASE+12) //0x4001180C
#define GPIOF_ODR_Addr    (GPIOF_BASE+12) //0x40011A0C   
#define GPIOG_ODR_Addr    (GPIOG_BASE+12) //0x40011E0C   

#define GPIOA_IDR_Addr    (GPIOA_BASE+8) //0x40010808
#define GPIOB_IDR_Addr    (GPIOB_BASE+8) //0x40010C08
#define GPIOC_IDR_Addr    (GPIOC_BASE+8) //0x40011008
#define GPIOD_IDR_Addr    (GPIOD_BASE+8) //0x40011408
#define GPIOE_IDR_Addr    (GPIOE_BASE+8) //0x40011808
#define GPIOF_IDR_Addr    (GPIOF_BASE+8) //0x40011A08
#define GPIOG_IDR_Addr    (GPIOG_BASE+8) //0x40011E08

//IO???,?????IO?!
//??n????16!
#define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)  //??
#define PAin(n)    BIT_ADDR(GPIOA_IDR_Addr,n)  //??

#define PBout(n)   BIT_ADDR(GPIOB_ODR_Addr,n)  //ê&#228;3&#246;
#define PBin(n)    BIT_ADDR(GPIOB_IDR_Addr,n)  //ê&#228;è&#235;

#define PCout(n)   BIT_ADDR(GPIOC_ODR_Addr,n)  //??
#define PCin(n)    BIT_ADDR(GPIOC_IDR_Addr,n)  //??

#define PDout(n)   BIT_ADDR(GPIOD_ODR_Addr,n)  //??
#define PDin(n)    BIT_ADDR(GPIOD_IDR_Addr,n)  //??

#define PEout(n)   BIT_ADDR(GPIOE_ODR_Addr,n)  //??
#define PEin(n)    BIT_ADDR(GPIOE_IDR_Addr,n)  //??

#define PFout(n)   BIT_ADDR(GPIOF_ODR_Addr,n)  //??
#define PFin(n)    BIT_ADDR(GPIOF_IDR_Addr,n)  //??

#define PGout(n)   BIT_ADDR(GPIOG_ODR_Addr,n)  //??
#define PGin(n)    BIT_ADDR(GPIOG_IDR_Addr,n)  //??

#define LED1 PCout(0)
#define LED2 PCout(1)
#define LED3 PCout(2)
#define dianji_1 PAout(8)           
#define dianji_2 PAout(9)   
#define dianji_3 PAout(10)   
#define dianji_4 PAout(11)         


#endif
以上是weidaih文件

还请各位大佬帮帮忙



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-28 19:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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