在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM32芯片定時器輸入捕獲模式

            STM32芯片定時器輸入捕獲模式

            作者: 時間:2016-11-28 來源:網(wǎng)絡 收藏
            stm32定時器有輸入捕獲模式,PWM輸入模式,強輸出模式,輸出比較模式這幾種。

            #include"HC04.h"//這個文件保存了用戶自己編寫的應用程序
            #include"SysTick.h"
            extern uint32_t L;//主函數(shù)中,定義了L這個全局變量,想要在此文件中用到,應該進行聲明

            void HC04_Config1(void)//此函數(shù)完成HC04避障模塊接收端的初始化,需要對定時器TIM2進行配置
            {
            GPIO_InitTypeDef GPIO_InitStructure1;
            TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure1;
            TIM_ICInitTypeDef TIM_ICInitStructure1;
            NVIC_InitTypeDef NVIC_InitStructure2;

            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//調(diào)用庫函數(shù),開啟了GPIOA的外設時鐘,這句代碼的意思應該是,開啟了GPIOA的使用
            GPIO_InitStructure1.GPIO_Pin=(HC04_Echo0)|(HC04_Echo1)|(HC04_Echo2)|(HC04_Echo3);
            GPIO_InitStructure1.GPIO_Mode=GPIO_Mode_IN_FLOATING;//將管腳設置為浮空輸入模式,以此對應通用定時器TIM2~TIM7的使用,定時器將捕獲來自這幾個管腳的脈沖信號
            GPIO_InitStructure1.GPIO_Speed=GPIO_Speed_50MHz;//將引腳的時鐘設置為50MHz
            GPIO_Init(GPIOA,&GPIO_InitStructure1);



            RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //打開定時器TIM2的時鐘
            TIM_DeInit(TIM2);//復位TIM2定時器

            TIM_TimeBaseStructure1.TIM_Period =0xFFFF;//設置計數(shù)溢出大小,每計65536個數(shù)就產(chǎn)生一個更新事件,此處的參數(shù)還得再改(TIM_Period設置了在下一個更新事件裝入活動的自動重裝載寄存器周期的值。它的取值必須在0x0000和0xFFFF之間)
            TIM_TimeBaseStructure1.TIM_Prescaler =1-1;//預分頻系數(shù)為1,這樣計數(shù)器時鐘為72MHz/1 = 72MHz
            TIM_TimeBaseStructure1.TIM_ClockDivision =TIM_CKD_DIV1;//TIM_ClockDivision的作用是做一段延時,一般在特殊場合的時候會用到
            TIM_TimeBaseStructure1.TIM_CounterMode=TIM_CounterMode_Up;//TIM_CounterMode選擇了計數(shù)器模式。有TIM_CounterMode_Up(TIM向上計數(shù)模式)TIM_CounterMode_Down(TIM向下計數(shù)模式)TIM_CounterMode_CenterAligned1(TIM中央對齊模式1計數(shù)模式),TIM_CounterMode_CenterAligned2(TIM中央對齊模式2計數(shù)模式),IM_CounterMode_CenterAligned3(TIM中央對齊模式3計數(shù)模式)
            TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure1);//本段代碼配置了定時器的時基


            TIM_ICInitStructure1.TIM_Channel = TIM_Channel_1;//選擇定時器TIM2的通道1,有四個通道可以選擇,TI1選擇意味著也選擇了TI2,因為兩者是組合在一起的
            TIM_ICInitStructure1.TIM_ICPolarity = TIM_ICPolarity_Rising;//上升沿觸發(fā),還有TIM_ICPolarity(輸入活動沿),TIM_ICPolarity_Falling輸入捕獲下降沿可以選擇 ;一旦IC1為上升沿觸發(fā),則IC2就為下降沿觸發(fā),因為兩者觸發(fā)極性相反
            TIM_ICInitStructure1.TIM_ICSelection=TIM_ICSelection_DirectTI;//TIM_ICSelection選擇輸入;TIM_ICSelection_DirectTI:TIM輸入2,3或4選擇對應的IC1或IC2或IC3或IC4相連;TIM_ICSelection_IndirectTI:TIM輸入2,3或4選的對應與IC2或IC1或IC4或IC3相連;TIM_ICSelection_TRC:TIM輸入2,3或3選擇與TRC相連
            TIM_ICInitStructure1.TIM_ICPrescaler = TIM_ICPSC_DIV1;//輸入預分頻,意思是控制在多少個輸入周期做一個捕獲,如果輸入的信號頻率沒有變,測得的周期也不會變,比如選擇四分頻,則每四個輸入周期做一次捕獲,這樣在輸入信號不頻繁的情況下,可以減少軟件被不斷中斷的次TIM_ICPrescaler TIM_ICPSC_DIV1(TIM捕獲在捕獲輸入行每探測到一個邊沿執(zhí)行一次)TIM_ICPS_DIV2(TIM捕獲每2個事件執(zhí)行一次)TIM_ICPS_DIV3TIM(捕獲每3個事件執(zhí)行一次)
            TIM_PWMIConfig(TIM2, &TIM_ICInitStructure1);
            TIM_ICInit(TIM2, &TIM_ICInitStructure1);//本段代碼配置了定時器通道的工作方式


            TIM_SelectInputTrigger(TIM2, TIM_TS_TI1FP1);//選擇時鐘觸發(fā)源,選擇有效的觸發(fā)輸入信號TI1FP1,之前選擇通道1,自然選擇TI1FP1;還有TI1FP2,TI2FP1,TI2FP2可以選擇
            TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);//配置從模式控制器為復位模式,這樣TI1捕獲到上升沿和計數(shù)值m之后計數(shù)器開始從0計數(shù)(配置從模式控制器模式)
            TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);//啟動定時器的被動觸發(fā),使能捕獲模式(配置主從模式控制器模式)
            //以上配置讓定時器處于PWM輸入狀態(tài)下工作
            TIM_ClearFlag(TIM2, TIM_IT_CC2);//清除定時器的溢出標志,表示定時器計數(shù)從0開始
            TIM_ITConfig(TIM2,TIM_IT_CC2,ENABLE);//開啟了定時器TIM2的中斷
            TIM_Cmd(TIM2, ENABLE);//打開TIM2定時器


            NVIC_InitStructure2.NVIC_IRQChannel = TIM2_IRQn;
            NVIC_InitStructure2.NVIC_IRQChannelPreemptionPriority = 1;
            NVIC_InitStructure2.NVIC_IRQChannelSubPriority = 1; //0為最高的優(yōu)先級
            NVIC_InitStructure2.NVIC_IRQChannelCmd = ENABLE;
            NVIC_Init(&NVIC_InitStructure2);//NVIC配置,對定時器TIM2的中斷進行優(yōu)先級的配置
            //這個函數(shù)中,加粗的代碼對定時器TIM2進行了一次完整的配置

            }


            void HC04_Config2(void)//此函數(shù)完成HC04避障模塊觸發(fā)端的初始化
            {
            GPIO_InitTypeDef GPIO_InitStructure2;
            //調(diào)用庫函數(shù),定義了一個結(jié)構(gòu)體類型為GPIO_InitTypeDef的結(jié)構(gòu)體,名為GPIO_InitStructure2

            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
            //調(diào)用庫函數(shù),開啟了GPIOA的外設時鐘,這句代碼的意思應該是,開啟了GPIOA的使用

            GPIO_InitStructure2.GPIO_Pin=(HC04_Trig0)|(HC04_Trig1)|(HC04_Trig2)|(HC04_Trig3);
            //開啟了GPIOA管腳的pin4,pin5,pin6,pin7

            GPIO_InitStructure2.GPIO_Mode=GPIO_Mode_Out_PP;
            //將選擇的管腳設置為推挽輸出模式,此模式一般接邏輯器件

            GPIO_InitStructure2.GPIO_Speed=GPIO_Speed_50MHz;
            //將引腳的時鐘設置為50MHz

            GPIO_Init(GPIOA,&GPIO_InitStructure2);
            //調(diào)用庫函數(shù)GPIO_Init(),初始化GPIOA,關(guān)鍵利用GPIO_InitStructure中的參數(shù)進行初始化

            GPIO_ResetBits(GPIOA,HC04_Trig0|HC04_Trig1|HC04_Trig2|HC04_Trig3);
            //調(diào)用GPIO_ResetBits()的話,是將端口設置為低電平
            }

            void HC04_Config(void)
            {
            HC04_Config2();
            }


            uint32_t DistanceHDetect(void)
            {
            GPIO_SetBits(GPIOA,HC04_Trig0);
            Delay_us(20);
            GPIO_ResetBits(GPIOA,HC04_Trig0);//生成20us的脈沖寬度的觸發(fā)信號

            HC04_Config1();
            return(L);
            }//讓生命探測裝置上的避障模塊HC04測量長度


            uint32_t DistanceDDetect(void)
            {
            GPIO_SetBits(GPIOA,HC04_Trig1);
            Delay_us(20);
            GPIO_ResetBits(GPIOA,HC04_Trig1);//生成20us的脈沖寬度的觸發(fā)信號

            HC04_Config1();
            return(L);
            }//讓前方的避障模塊測量長度


            uint32_t DistanceLDetect(void)
            {
            GPIO_SetBits(GPIOA,HC04_Trig2);
            Delay_us(20);
            GPIO_ResetBits(GPIOA,HC04_Trig2);//生成20us的脈沖寬度的觸發(fā)信號

            HC04_Config1();
            return(L);
            }


            uint32_t DistanceRDetect(void)
            {
            GPIO_SetBits(GPIOA,HC04_Trig3);
            Delay_us(20);
            GPIO_ResetBits(GPIOA,HC04_Trig3);//生成20us的脈沖寬度的觸發(fā)信號

            HC04_Config1();
            return(L);
            }stm32定時器有輸入捕獲模式,PWM輸入模式,強輸出模式,輸出比較模式這幾種。

            #include"HC04.h"//這個文件保存了用戶自己編寫的應用程序
            #include"SysTick.h"
            extern uint32_t L;//主函數(shù)中,定義了L這個全局變量,想要在此文件中用到,應該進行聲明

            void HC04_Config1(void)//此函數(shù)完成HC04避障模塊接收端的初始化,需要對定時器TIM2進行配置
            {
            GPIO_InitTypeDef GPIO_InitStructure1;
            TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure1;
            TIM_ICInitTypeDef TIM_ICInitStructure1;
            NVIC_InitTypeDef NVIC_InitStructure2;

            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//調(diào)用庫函數(shù),開啟了GPIOA的外設時鐘,這句代碼的意思應該是,開啟了GPIOA的使用
            GPIO_InitStructure1.GPIO_Pin=(HC04_Echo0)|(HC04_Echo1)|(HC04_Echo2)|(HC04_Echo3);
            GPIO_InitStructure1.GPIO_Mode=GPIO_Mode_IN_FLOATING;//將管腳設置為浮空輸入模式,以此對應通用定時器TIM2~TIM7的使用,定時器將捕獲來自這幾個管腳的脈沖信號
            GPIO_InitStructure1.GPIO_Speed=GPIO_Speed_50MHz;//將引腳的時鐘設置為50MHz
            GPIO_Init(GPIOA,&GPIO_InitStructure1);



            RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //打開定時器TIM2的時鐘
            TIM_DeInit(TIM2);//復位TIM2定時器

            TIM_TimeBaseStructure1.TIM_Period =0xFFFF;//設置計數(shù)溢出大小,每計65536個數(shù)就產(chǎn)生一個更新事件,此處的參數(shù)還得再改(TIM_Period設置了在下一個更新事件裝入活動的自動重裝載寄存器周期的值。它的取值必須在0x0000和0xFFFF之間)
            TIM_TimeBaseStructure1.TIM_Prescaler =1-1;//預分頻系數(shù)為1,這樣計數(shù)器時鐘為72MHz/1 = 72MHz
            TIM_TimeBaseStructure1.TIM_ClockDivision =TIM_CKD_DIV1;//TIM_ClockDivision的作用是做一段延時,一般在特殊場合的時候會用到
            TIM_TimeBaseStructure1.TIM_CounterMode=TIM_CounterMode_Up;//TIM_CounterMode選擇了計數(shù)器模式。有TIM_CounterMode_Up(TIM向上計數(shù)模式)TIM_CounterMode_Down(TIM向下計數(shù)模式)TIM_CounterMode_CenterAligned1(TIM中央對齊模式1計數(shù)模式),TIM_CounterMode_CenterAligned2(TIM中央對齊模式2計數(shù)模式),IM_CounterMode_CenterAligned3(TIM中央對齊模式3計數(shù)模式)
            TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure1);//本段代碼配置了定時器的時基


            TIM_ICInitStructure1.TIM_Channel = TIM_Channel_1;//選擇定時器TIM2的通道1,有四個通道可以選擇,TI1選擇意味著也選擇了TI2,因為兩者是組合在一起的
            TIM_ICInitStructure1.TIM_ICPolarity = TIM_ICPolarity_Rising;//上升沿觸發(fā),還有TIM_ICPolarity(輸入活動沿),TIM_ICPolarity_Falling輸入捕獲下降沿可以選擇 ;一旦IC1為上升沿觸發(fā),則IC2就為下降沿觸發(fā),因為兩者觸發(fā)極性相反
            TIM_ICInitStructure1.TIM_ICSelection=TIM_ICSelection_DirectTI;//TIM_ICSelection選擇輸入;TIM_ICSelection_DirectTI:TIM輸入2,3或4選擇對應的IC1或IC2或IC3或IC4相連;TIM_ICSelection_IndirectTI:TIM輸入2,3或4選的對應與IC2或IC1或IC4或IC3相連;TIM_ICSelection_TRC:TIM輸入2,3或3選擇與TRC相連
            TIM_ICInitStructure1.TIM_ICPrescaler = TIM_ICPSC_DIV1;//輸入預分頻,意思是控制在多少個輸入周期做一個捕獲,如果輸入的信號頻率沒有變,測得的周期也不會變,比如選擇四分頻,則每四個輸入周期做一次捕獲,這樣在輸入信號不頻繁的情況下,可以減少軟件被不斷中斷的次TIM_ICPrescaler TIM_ICPSC_DIV1(TIM捕獲在捕獲輸入行每探測到一個邊沿執(zhí)行一次)TIM_ICPS_DIV2(TIM捕獲每2個事件執(zhí)行一次)TIM_ICPS_DIV3TIM(捕獲每3個事件執(zhí)行一次)
            TIM_PWMIConfig(TIM2, &TIM_ICInitStructure1);
            TIM_ICInit(TIM2, &TIM_ICInitStructure1);//本段代碼配置了定時器通道的工作方式


            TIM_SelectInputTrigger(TIM2, TIM_TS_TI1FP1);//選擇時鐘觸發(fā)源,選擇有效的觸發(fā)輸入信號TI1FP1,之前選擇通道1,自然選擇TI1FP1;還有TI1FP2,TI2FP1,TI2FP2可以選擇
            TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);//配置從模式控制器為復位模式,這樣TI1捕獲到上升沿和計數(shù)值m之后計數(shù)器開始從0計數(shù)(配置從模式控制器模式)
            TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);//啟動定時器的被動觸發(fā),使能捕獲模式(配置主從模式控制器模式)
            //以上配置讓定時器處于PWM輸入狀態(tài)下工作
            TIM_ClearFlag(TIM2, TIM_IT_CC2);//清除定時器的溢出標志,表示定時器計數(shù)從0開始
            TIM_ITConfig(TIM2,TIM_IT_CC2,ENABLE);//開啟了定時器TIM2的中斷
            TIM_Cmd(TIM2, ENABLE);//打開TIM2定時器


            NVIC_InitStructure2.NVIC_IRQChannel = TIM2_IRQn;
            NVIC_InitStructure2.NVIC_IRQChannelPreemptionPriority = 1;
            NVIC_InitStructure2.NVIC_IRQChannelSubPriority = 1; //0為最高的優(yōu)先級
            NVIC_InitStructure2.NVIC_IRQChannelCmd = ENABLE;
            NVIC_Init(&NVIC_InitStructure2);//NVIC配置,對定時器TIM2的中斷進行優(yōu)先級的配置
            //這個函數(shù)中,加粗的代碼對定時器TIM2進行了一次完整的配置

            }


            void HC04_Config2(void)//此函數(shù)完成HC04避障模塊觸發(fā)端的初始化
            {
            GPIO_InitTypeDef GPIO_InitStructure2;
            //調(diào)用庫函數(shù),定義了一個結(jié)構(gòu)體類型為GPIO_InitTypeDef的結(jié)構(gòu)體,名為GPIO_InitStructure2

            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
            //調(diào)用庫函數(shù),開啟了GPIOA的外設時鐘,這句代碼的意思應該是,開啟了GPIOA的使用

            GPIO_InitStructure2.GPIO_Pin=(HC04_Trig0)|(HC04_Trig1)|(HC04_Trig2)|(HC04_Trig3);
            //開啟了GPIOA管腳的pin4,pin5,pin6,pin7

            GPIO_InitStructure2.GPIO_Mode=GPIO_Mode_Out_PP;
            //將選擇的管腳設置為推挽輸出模式,此模式一般接邏輯器件

            GPIO_InitStructure2.GPIO_Speed=GPIO_Speed_50MHz;
            //將引腳的時鐘設置為50MHz

            GPIO_Init(GPIOA,&GPIO_InitStructure2);
            //調(diào)用庫函數(shù)GPIO_Init(),初始化GPIOA,關(guān)鍵利用GPIO_InitStructure中的參數(shù)進行初始化

            GPIO_ResetBits(GPIOA,HC04_Trig0|HC04_Trig1|HC04_Trig2|HC04_Trig3);
            //調(diào)用GPIO_ResetBits()的話,是將端口設置為低電平
            }

            void HC04_Config(void)
            {
            HC04_Config2();
            }


            uint32_t DistanceHDetect(void)
            {
            GPIO_SetBits(GPIOA,HC04_Trig0);
            Delay_us(20);
            GPIO_ResetBits(GPIOA,HC04_Trig0);//生成20us的脈沖寬度的觸發(fā)信號

            HC04_Config1();
            return(L);
            }//讓生命探測裝置上的避障模塊HC04測量長度


            uint32_t DistanceDDetect(void)
            {
            GPIO_SetBits(GPIOA,HC04_Trig1);
            Delay_us(20);
            GPIO_ResetBits(GPIOA,HC04_Trig1);//生成20us的脈沖寬度的觸發(fā)信號

            HC04_Config1();
            return(L);
            }//讓前方的避障模塊測量長度


            uint32_t DistanceLDetect(void)
            {
            GPIO_SetBits(GPIOA,HC04_Trig2);
            Delay_us(20);
            GPIO_ResetBits(GPIOA,HC04_Trig2);//生成20us的脈沖寬度的觸發(fā)信號

            HC04_Config1();
            return(L);
            }


            uint32_t DistanceRDetect(void)
            {
            GPIO_SetBits(GPIOA,HC04_Trig3);
            Delay_us(20);
            GPIO_ResetBits(GPIOA,HC04_Trig3);//生成20us的脈沖寬度的觸發(fā)信號

            HC04_Config1();
            return(L);
            }


            評論


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

            關(guān)閉