打印

求助,进不了中断

[复制链接]
581|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
第十代火影|  楼主 | 2018-6-27 13:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
IO, pi, gp, GPIO, TI

用的是的mini板,下面是我自己写的程序,PA0和PC13是按键,当按键按下时,进入中断,两个中断执行的任务都是使PC3亮500毫秒再灭。现在的问题时按下按键后没有亮,请各位大神帮我看看

/* Includes ------------------------------------------------------------------*/

#include "stm32f10x.h"

#include "delay.h"



/*  A0和C13按下,灯C3亮*/





/*************************************************

函数: void RCC_Configuration(void)

功能: 复位和时钟控制 配置

参数: 无

返回: 无

**************************************************/

void RCC_Configuration(void)

{

  ErrorStatus HSEStartUpStatus;                    //定义外部高速晶体启动状态枚举变量

  RCC_DeInit();                                    //复位RCC外部设备寄存器到默认值

  RCC_HSEConfig(RCC_HSE_ON);                       //打开外部高速晶振

  HSEStartUpStatus = RCC_WaitForHSEStartUp();      //等待外部高速时钟准备好

  if(HSEStartUpStatus == SUCCESS)                  //外部高速时钟已经准别好

  {

    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //开启FLASH预读缓冲功能,加速FLASH的读取。所有程序中必须的用法.位置:RCC初始化子函数里面,时钟起振之后

    FLASH_SetLatency(FLASH_Latency_2);                    //flash操作的延时

              

    RCC_HCLKConfig(RCC_SYSCLK_Div1);               //配置AHB(HCLK)时钟等于==SYSCLK

    RCC_PCLK2Config(RCC_HCLK_Div1);                //配置APB2(PCLK2)钟==AHB时钟

    RCC_PCLK1Config(RCC_HCLK_Div2);                //配置APB1(PCLK1)钟==AHB1/2时钟



    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);  //配置PLL时钟 == 外部高速晶体时钟 * 9 = 72MHz

    RCC_PLLCmd(ENABLE);                                   //使能PLL时钟



    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);    //等待PLL时钟就绪

    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);            //配置系统时钟 = PLL时钟

    while(RCC_GetSYSCLKSource() != 0x08);                  //检查PLL时钟是否作为系统时钟

  }

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC , ENABLE);  //A、C的时钟使能

}





void Delay(__IO uint32_t nCount)         //简单的延时函数

{

        for(; nCount != 0; nCount--);

}



/*******************************************************************************

* Function Name  : GPIO_Configuration

* Description    : Configures the different GPIO ports.

* Input          : None

* Output         : None

* Return         : None

* Attention                 : None

*******************************************************************************/

void GPIO_Configuration(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;



        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;         

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;         //设置A0为上拉输入模式,A0为按键

        GPIO_Init(GPIOA, &GPIO_InitStructure);        /*初始化PA0 */



        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;         

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;         //设置PC13为上拉输入模式,PC13为按键

        GPIO_Init(GPIOC, &GPIO_InitStructure);        /*初始化PC13 */



        GPIO_SetBits(GPIOC,  GPIO_Pin_3);        //刚开始输出高电平

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;                  //设置PC3为推挽输出

        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //PC3为小灯

        GPIO_Init(GPIOC, &GPIO_InitStructure);



        //将各按键置高位

        GPIO_SetBits(GPIOA,  GPIO_Pin_0);               

        GPIO_SetBits(GPIOC,  GPIO_Pin_13);

}



void EXTI_Configuration(void)         //中断配置函数

{

  EXTI_InitTypeDef EXTI_InitStructure;         //给中断定义一个结构体

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);         //功能复用IO时钟



  //清空中断标志

  EXTI_ClearITPendingBit(EXTI_Line0);

  EXTI_ClearITPendingBit(EXTI_Line13);



   //选择中断管脚PA0 PC13

  GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);

  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);



  EXTI_InitStructure.EXTI_Line = EXTI_Line0 | EXTI_Line13; //选择中断线路0 13

  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //设置为中断请求,非事件请求

  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //设置中断触发方式为下降沿触发

  EXTI_InitStructure.EXTI_LineCmd = ENABLE;  //外部中断使能

  EXTI_Init(&EXTI_InitStructure);

}



void NVIC_Configuration(void)        //分组并配置抢占式优先级和响应式优先级

{

  NVIC_InitTypeDef NVIC_InitStructure;

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);           //分组2



  NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;            //选择中断通道2,指定中断源

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //抢占式中断优先级设置为0

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;        //响应式中断优先级设置为0

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;          //使能中断

  NVIC_Init(&NVIC_InitStructure);



  NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;           //选择中断通道3

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //抢占式中断优先级设置为1

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;       //响应式中断优先级设置为1

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;         //使能中断

  NVIC_Init(&NVIC_InitStructure);

}





void EXTI2_IRQHandler(void)

{

     //添加中断处理程序

         GPIO_ResetBits(GPIOC , GPIO_Pin_3);

         delay_ms(500);

         GPIO_SetBits(GPIOC,  GPIO_Pin_3);

         EXTI_ClearFlag(EXTI_Line0);                               //清除中断标志

     EXTI_ClearITPendingBit(EXTI_Line0);        

}



void EXTI3_IRQHandler(void)

{

     //添加中断处理程序

         GPIO_ResetBits(GPIOC , GPIO_Pin_3);

         delay_ms(500);

         GPIO_SetBits(GPIOC,  GPIO_Pin_3);

         EXTI_ClearFlag(EXTI_Line13);                               //清除中断标志

     EXTI_ClearITPendingBit(EXTI_Line13);                 

}



/*************************************************

函数: int main(void)

功能: main主函数

参数: 无

返回: 无

**************************************************/

int main(void)

{        

    delay_init(72);

        RCC_Configuration();

        GPIO_Configuration();

        NVIC_Configuration();

        EXTI_Configuration();

    while (1);

}





使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

363

主题

363

帖子

0

粉丝