野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16244|回复: 5

求助,进不了中断

[复制链接]
发表于 2014-9-15 11:20:57 | 显示全部楼层 |阅读模式
用的是野火的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);
}


回复

使用道具 举报

 楼主| 发表于 2014-9-15 11:22:06 | 显示全部楼层
新手,请大家帮忙看看,谢谢
回复 支持 反对

使用道具 举报

发表于 2014-9-15 11:37:33 | 显示全部楼层
单步调试看是否能进入中断
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-15 11:40:20 | 显示全部楼层
刀_口 发表于 2014-9-15 11:37
单步调试看是否能进入中断

说的是仿真吗?还不会
回复 支持 反对

使用道具 举报

发表于 2014-9-15 11:43:56 | 显示全部楼层
点击DEBUG进入调试状态,中断内设置断点,全速运行,按下按键
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-15 19:54:14 | 显示全部楼层
刀_口 发表于 2014-9-15 11:43
点击DEBUG进入调试状态,中断内设置断点,全速运行,按下按键

找到问题了,把“EXTI2”改成“EXTI0”;“EXTI3”改成“EXTI15_10”就好了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-20 08:47 , Processed in 0.037559 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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