打印
[STM32F1]

STM32F103RBT6库函数编程进不了中断,求大神

[复制链接]
681|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sicau123|  楼主 | 2015-10-12 11:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x_lib.h"          //°üº¬ÁËËùÓеÄÍ·Îļþ ËüÊÇΨһһ¸öÓû§ÐèÒª°üÀ¨ÔÚ×Ô¼ºÓ¦ÓÃÖеÄÎļþ£¬Æðµ½Ó¦ÓúͿâÖ®¼ä½çÃæµÄ×÷Óá£
#include <stdio.h>

//-----------------函数的声明-------------
void Delay_MS(u16 dly);
void RCC_Configuration(void);
void GPIO_Configuration(void);
void EXTI0_IRQHandler(void);
//extern void EXTI_Configuration(void);
void NVIC_Configuration(void);
void EXTI_Configuration(void);

u8 flag=0xff;//标志

int main(void)
{
        #ifdef DEBUG
          debug();
        #endif
  flag=0xff;
        flag=0xff;
       
       
        RCC_Configuration();
        GPIO_Configuration();
        EXTI_Configuration();
        NVIC_Configuration();
        GPIO_Write(GPIOA, 0xfeff);
//        GPIO_Write(GPIOC, 0xfeff);


                GPIO_SetBits(GPIOB, GPIO_Pin_0);
                Delay_MS(1000);
                Delay_MS(1000);
                Delay_MS(1000);
                Delay_MS(1000);
                Delay_MS(1000);
                GPIO_ResetBits(GPIOB, GPIO_Pin_0);
                Delay_MS(1000);
                Delay_MS(1000);
                Delay_MS(1000);
                Delay_MS(1000);
                Delay_MS(1000);
                GPIO_SetBits(GPIOB, GPIO_Pin_0);
                Delay_MS(1000);
                Delay_MS(1000);
                Delay_MS(1000);
                Delay_MS(1000);
                Delay_MS(1000);
                GPIO_ResetBits(GPIOB, GPIO_Pin_0);//进入MAIN后小灯泡闪烁三下指示

          while(1)
                {
                        if(flag==0xfe)//如果标志为FE小灯泡闪烁。如果有外部中断,标志在中断函数中改变
                        {
                                GPIO_SetBits(GPIOB, GPIO_Pin_0);
                Delay_MS(1000);
                Delay_MS(1000);
                Delay_MS(1000);
                Delay_MS(1000);
                Delay_MS(1000);
                GPIO_ResetBits(GPIOB, GPIO_Pin_0);
                Delay_MS(1000);
                Delay_MS(1000);
                Delay_MS(1000);
                Delay_MS(1000);
                Delay_MS(1000);
                GPIO_SetBits(GPIOB, GPIO_Pin_0);
                Delay_MS(1000);
                Delay_MS(1000);
                Delay_MS(1000);
                Delay_MS(1000);
                Delay_MS(1000);
                GPIO_ResetBits(GPIOB, GPIO_Pin_0);
                        }
                };
                               
}

/*******************************************************************************
* Function Name  : Delay_Ms
* Description    : delay 1 ms.
* Input          : dly (ms)
* Output         : None
* Return         : None
*******************************************************************************/
void Delay_MS(u16 dly)
{
        u16 i,j;
        for(i=0;i<dly;i++)
                for(j=1000;j>0;j--);
}

/*******************************************************************************
* Function Name  : RCC_Configuration
* Description    : Configures the different system clocks.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void RCC_Configuration(void)
{
        //----------使用外部RC晶振-----------
        RCC_DeInit();                        //初始化缺省值
        RCC_HSEConfig(RCC_HSE_ON);        //使能外部高速时钟
        while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);        //等待外部高速时钟使能就绪
       
        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);        //Enable Prefetch Buffer
        FLASH_SetLatency(FLASH_Latency_2);                //Flash 2 wait state
       
        RCC_HCLKConfig(RCC_SYSCLK_Div1);                //HCLK = SYSCLK
        RCC_PCLK2Config(RCC_HCLK_Div1);                        //PCLK2 =  HCLK
        RCC_PCLK1Config(RCC_HCLK_Div2);                        //PCLK1 = HCLK/2
        RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);        //PLLCLK = 8MHZ * 9 =72MHZ
        RCC_PLLCmd(ENABLE);                        //Enable PLLCLK

        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);        //Wait till PLLCLK is ready
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);        //Select PLL as system clock
        while(RCC_GetSYSCLKSource()!=0x08);                //Wait till PLL is used as system clock source
       
        //---------打开外部相应时钟--------------------
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);        //GPIOA时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);        //GPIOB时钟       
//        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//复用时钟
}

/*******************************************************************************
* Function Name  : GPIO_Configuration
* Description    : 初始化GPIO外设
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void GPIO_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;               
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;         //PB.0
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         
        GPIO_Init(GPIOB,&GPIO_InitStructure);                               
//        GPIO_Write(GPIOB, 0xffff);
}

void NVIC_Configuration(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;

        #ifdef  VECT_TAB_RAM  
                  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
        #else
                  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
        #endif

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
        NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);               
}

void EXTI0_IRQHandler(void)
{
   EXTI_ClearITPendingBit(EXTI_Line0);
         flag=0xfe;
//        GPIO_Write(GPIOC, 0xf111);
//        GPIO_ResetBits(GPIOB, GPIO_Pin_0);
//                Delay_MS(1000);       
//        Delay_MS(1000);
//                Delay_MS(1000);
//                Delay_MS(1000);
//                Delay_MS(1000);
//                Delay_MS(1000);
//        Delay_MS(1000);
//                Delay_MS(1000);
//                Delay_MS(1000);
//                Delay_MS(1000);
//                Delay_MS(1000);
//        GPIO_SetBits(GPIOB, GPIO_Pin_0);
//                Delay_MS(1000);
//                Delay_MS(1000);
//                Delay_MS(1000);
//                Delay_MS(1000);
//                Delay_MS(1000);
//                GPIO_ResetBits(GPIOB, GPIO_Pin_0);
//                Delay_MS(1000);
//                Delay_MS(1000);
//                Delay_MS(1000);
//                Delay_MS(1000);
//                Delay_MS(1000);
//                GPIO_SetBits(GPIOB, GPIO_Pin_0);

       
       

               
}

void EXTI_Configuration(void)
{
       
        EXTI_InitTypeDef EXTI_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
  EXTI_ClearITPendingBit(EXTI_Line0);
       
        /* =======================开启时钟================*/
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); // 使能APB2外设GPIOA时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;                            //配置外部中断线PA.0
//        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;                 //下拉输入
        GPIO_Init(GPIOA,&GPIO_InitStructure);

        GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);         //EXTI0
        EXTI_DeInit();     //
        EXTI_InitStructure.EXTI_Line = EXTI_Line0 ;                 //中断线
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt ;  //终端模式
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;                //下降沿
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;                   //使能
        EXTI_Init(&EXTI_InitStructure);                                   //初始化

       
}
现在编译下载全部没问题,只是程序运行的灯泡闪烁也有,就是指示进入中断的灯泡闪烁没有,就是这个程序进不了中断。不知道为什么。请各位大神给看看哪里有问题,或者建议。

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

本版积分规则

3

主题

18

帖子

0

粉丝