新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > stm32中斷解剖(非外部中斷)

        stm32中斷解剖(非外部中斷)

        作者: 時(shí)間:2016-11-30 來(lái)源:網(wǎng)絡(luò) 收藏
        如果只使用TIME2全局中斷,則不需要void EXTI_Config(void)//外部中斷配置。只要void NVIC_Configuration(void)//嵌套中斷配置和stm32f10x_it.c庫(kù)文件中的void TIM2_IRQHandler(void)。具體如下配置。注意此處與外部中斷的配置的區(qū)別切勿混淆。



        疑問(wèn)?
        1.為什么不需要配置RCC_APB2Periph_AFIO
        2 查看固件庫(kù)手冊(cè) 發(fā)現(xiàn)NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn; //選擇外部中斷3號(hào)線 與
        NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel; //選擇TIM2中斷 是結(jié)構(gòu)體的不同值,怎么回事?
        3TIME2是在什么情況下促使發(fā)生了TIM2_IRQChannel; 是定時(shí)器定時(shí)滿了?還是?TIM1有那么多中斷方式,那么TIM2的全局中斷時(shí)什么意思?

        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 = TIM2_IRQChannel; //選擇TIM2中斷
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能
        NVIC_Init(&NVIC_InitStructure);
        }
        void TIM2_IRQHandler(void)
        {

        //USART_SendData(USART2,TIM3->CNT);
        /****************此處有誤,但程序盡然正常跑,趣了怪了*******
        while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET)
        {
        }
        ******/
        /**************改成**********if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET )
        TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);//必須清除中斷標(biāo)志位否則一直中斷
        *****************/
        Delay(100000);
        printf("TIM3->wangwenwneCNT=%d",TIM3->CNT);//此函數(shù)已被我重定向(fputc())
        }

        int fputc(int ch,FILE * f)
        {
        USART_SendData(USART2,(unsigned char)ch);
        while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET)
        {
        }
        return(ch);
        }
        void TIMER2_PWM_Init(void)
        {
        /****配置時(shí)間基**********/
        TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
        TIM_TimeBaseStructure.TIM_Prescaler = 0xFF;//分頻
        TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //時(shí)鐘分割
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上計(jì)數(shù)
        TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x03;
        TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);

        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //模式
        // TIM_OCInitStructure.TIM_Channel = TIM_Channel_1;
        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_Pulse=CCR1_Val;
        TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;
        TIM_OC1Init(TIM2,&TIM_OCInitStructure);
        TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Disable);
        /**********************/
        TIM_Cmd(TIM2,ENABLE);
        TIM_ITConfig(TIM2,TIM_IT_CC1,ENABLE);
        }

        第一種方法:
        NVIC_SETPRIMASK(); //關(guān)閉總中斷
        NVIC_RESETPRIMASK(); //開(kāi)放總中斷

        第二種方法:
        NVIC_SETFAULTMASK(); //關(guān)閉總中斷
        NVIC_RESETFAULTMASK(); //開(kāi)放總中斷


        關(guān)鍵詞: stm32中斷解剖外部中

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 清原| 北京市| 潮安县| 通山县| 水富县| 彝良县| 寿光市| 湖北省| 秭归县| 麦盖提县| 新化县| 德钦县| 兴和县| 木兰县| 许昌县| 郧西县| 改则县| 申扎县| 盐津县| 合山市| 岳池县| 翁源县| 清丰县| 丰城市| 平遥县| 阳城县| 洛南县| 宁津县| 满城县| 理塘县| 文登市| 玉树县| 太白县| 铜陵市| 合水县| 江山市| 盐源县| 天水市| 静乐县| 龙山县| 察雅县|