<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        STM8S做輸入捕獲

        作者:huqin   來源:本站原創   點擊數:  更新時間:2014年03月01日   【字體:

        希望我這個對正在用STM8S做輸入捕獲,測頻的有幫助!
        -->
        問卷調查,答題有禮

        第一部:
        內部時鐘 CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //16M

        第二步:
        配置IO口 我用的是STM8S103k3t6
        GPIO_Init(GPIOB , GPIO_PIN_0 , GPIO_MODE_IN_PU_NO_IT);//TIM1_CH1 PB0端口

        第三步:TIM1初始化,
        注意:
        tim1 分頻是16000000/1600 =10000
        那計數一下的時間是!1/10000 S
        向上計數 0到20000 的時間是2S


        void TIME1_INIT(void)
        {
        TIM1_DeInit();
        TIM1_TimeBaseInit(1600, TIM1_COUNTERMODE_UP, 20000, 0);
        TIM1_ICInit( TIM1_CHANNEL_1, TIM1_ICPOLARITY_RISING, TIM1_ICSELECTION_DIRECTTI , TIM1_ICPSC_DIV8, 0x0);
        TIM1_ITConfig( TIM1_IT_CC1 , ENABLE);
        TIM1_ClearFlag(TIM1_FLAG_CC1);
        TIM1_Cmd(ENABLE);
        }


        第四步: TIM4用來產生溢出中斷用的!

        void TIME4_INIT(void)
        {
        TIM4_TimeBaseInit(TIM4_PRESCALER_32 ,250);
        TIM4_ARRPreloadConfig(ENABLE);
        TIM4_PrescalerConfig(TIM4_PRESCALER_32,TIM4_PSCRELOADMODE_IMMEDIATE);
        TIM4_SetAutoreload(250);
        TIM4_Cmd(ENABLE);
        TIM4_ITConfig(TIM4_IT_UPDATE,ENABLE);
        }


        第五步: TIM1的中斷程序 連續進入兩次中斷,兩次計數的值 乘 第三步中計數一下的時間 就是脈寬

        // if(TIM1_GetFlagStatus(TIM1_FLAG_CC1))
        if(TIM1_GetITStatus(TIM1_FLAG_CC1) != RESET)
        {
        switch(temp)
        {
        case 0: ICValue1=TIM1_GetCapture1();
        temp=1;
        break;

        case 1: ICValue2=TIM1_GetCapture1();
        temp=2;
        break;

        default:
        TIM1_CCxCmd(TIM1_CHANNEL_1, DISABLE);
        TIM1_ITConfig(TIM1_IT_CC1, DISABLE);
        temp=3;
        break;
        }
        TIM1_ClearITPendingBit(TIM1_IT_CC1);
        TIM1_ClearFlag(TIM1_FLAG_CC1);
        }

         

        第六步:
        TIM4的中斷程序
        if(temp==3)
        {
        temp=0;
        if(ICValue2>ICValue1)
        {
        disvalue=ICValue2-ICValue1;
        }
        else if(ICValue2<ICValue1)
        {
        //disvalue=0xffff+ICValue2-ICValue1;
        disvalue=20000+ICValue2-ICValue1; //防止計數到末端的時候 重新計數
        }
        val[i0++] = disvalue;
        if(i0>10) i0=0;
        display();
        TIM1_CCxCmd(TIM1_CHANNEL_1, ENABLE);
        TIM1_ITConfig(TIM1_IT_CC1, ENABLE);
        }
        else
        {
        display();
        }
        TIM4_ClearITPendingBit(TIM4_IT_UPDATE);

         

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮