打印

【求助】按键外部中断进不去,用的3.4的库

[复制链接]
1577|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fymok|  楼主 | 2011-4-19 09:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人刚接触STM32,希望大侠们指教,谢谢!

按键外部中断进不去,用的3.4的固件库,按键为下降沿中断方式,接在mcu的PC13口,程序实现功能为LED起初循环点亮,按键按下时,执行中断程序,其中LED由PF口控制,如下
/*******************************************************************************
* File Name          : main.c
* Author             : Nanjing
* Date First Issued  : 04/12/2011
* Description        : Main program body
********************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include "main.h"
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
static __IO uint32_t TimingDelay;
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
ErrorStatus HSEStartUpStatus;
/* Private function prototypes -----------------------------------------------*/
void Delay(__IO uint32_t nTime);
void RCC_Configuration(void) ;
void SysTick_Configuration(void);
void GPIO_Configuration(void);
void EXTI_Configuration(void);
/* Private functions ---------------------------------------------------------*/
/*******************************************************************************
* Function Name  : main
* Description    : Main program.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
int main(void)
{
#ifdef DEBUG
debug() ;
#endif
  /* Setup SysTick Timer for 1 msec interrupts  */

  /* Configure the system clocks */
RCC_Configuration();
SysTick_Configuration();

/* Configure the GPIO ports */
GPIO_Configuration();
EXTI_Configuration();

/***循环点亮LED****/
  for(;;)
{
GPIOF->ODR=0xfffffc4f;
  /* Insert 50 ms delay */
    Delay(500);
GPIOF->ODR=0xfffffc8f;
/* Insert 50 ms delay */
    Delay(500);
GPIOF->ODR=0xfffffd0f;
/* Insert 50 ms delay */
    Delay(500);
GPIOF->ODR=0xfffffe0f;
/* Insert 50 ms delay */
    Delay(500);
}
}
/**
  * @brief  Inserts a delay time.
  * @param  nTime: specifies the delay time length, in milliseconds.
  * @retval None
  */
void SysTick_Configuration(void)
{
    /* Setup SysTick Timer for 100 msec interrupts */
    if (SysTick_Config((SystemCoreClock) / 1000))     //     1/1000s=1ms
{
        /* Capture error */
        while (1);
}
    NVIC_SetPriority(SysTick_IRQn, 0x0);
}
void Delay(__IO uint32_t nTime)   //定义nTime为可读可写的int
{
  TimingDelay = nTime;
  while(TimingDelay != 0);
}
/**
  * @brief  Decrements the TimingDelay variable.
  * @param  None
  * @retval None
  */
void TimingDelay_Decrement(void)
{
  if (TimingDelay != 0x00)
  {
    TimingDelay--;
  }
}
/*******************************************************************************
* Function Name  : GPIO_Configuration
* Description    : Configures the different GPIO ports.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void NVIC_Configuration(void)
{
#ifdef VECT_TAB_RAM
NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);
#else
NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);
#endif
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  NVIC_InitStructure.NVIC_IRQChannel=EXTI15_10_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
  NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

void RCC_Configuration(void)
{
   //必须开时钟才能 使用起来 相应IO
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF|RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE);
}
/*******************************************************************************
* Function Name  : GPIO_Configuration
* Description    : Configures the different GPIO ports.
* Input          : None
* Output         : None
* Return         : None

*******************************************************************************/
void GPIO_Configuration(void)
{
  /*配置PF口为输出推免,速度50MHz*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOF,&GPIO_InitStructure);
  /* Configure PC13 as input floating (EXTI Line13) */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}

void EXTI_Configuration(void)
{
  /* Configure EXTI Line13 to generate an interrupt on falling edge */  
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource13);   //选择中断管脚PC13
EXTI_InitStructure.EXTI_Line=EXTI_Line13;
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTI_InitStructure);
}
/*******************************************************************************
* Function Name  : Delay
* Description    : Inserts a delay time.
* Input          : nCount: specifies the delay time length.
* Output         : None
* Return         : None
*******************************************************************************/
  #ifdef DEBUG
  /*描述:当程序出错时,返回出错的文件名及在源程序中的行号
   输入:—file:指向文件名的指针
   —line:在源程序中的行号
   输出:无
   返回:无
   */
   void assert_failed(u8*file,u32 line)
   {
   while(1) {}
   }
#endif


以下为用到的中断程序:
void SysTick_Handler(void)
{
TimingDelay_Decrement();
}

void EXTI15_10_IRQHandler(void)
{  int i;
if(EXTI_GetITStatus(EXTI_Line13)!=RESET)
{
//二极管全部熄灭
for(i=0;i<8000000;i++)
GPIOF->ODR=0xfffffc3f;
//  /* Insert 50 ms delay */
//    Delay(500);
//二极管全部点亮
for(i=0;i<2000000;i++)
GPIOF->ODR=0xffffffff;
// /* Insert 50 ms delay */
//    Delay(500);
for(i=0;i<1000000;i++)
       //清空中断标志位,防止持续进入中断
       EXTI_ClearITPendingBit(EXTI_Line13);
}
}
沙发
fymok|  楼主 | 2011-4-19 09:27 | 只看该作者
现在的情况是编译无错,LED循环点亮,但是按键无反应,进不了中断,请大家指教,谢谢!!!

使用特权

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

本版积分规则

7

主题

40

帖子

0

粉丝