OpenEdv-开源电子网

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

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

[复制链接]

2

主题

2

帖子

0

精华

新手入门

积分
30
金钱
30
注册时间
2015-10-7
在线时间
0 小时
发表于 2015-10-12 11:21:47 | 显示全部楼层 |阅读模式
5金钱

/* 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);                                   //初始化

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

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

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-10-12 15:06:54 | 显示全部楼层
对照原子哥开发指南看一下配置或仿真一下试试

库函数不熟,帮顶
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 05:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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