0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32定時(shí)器(三)輸入捕獲

冬至子 ? 來(lái)源:不懂幽默的秦二 ? 作者:diandianmo ? 2023-07-21 14:58 ? 次閱讀

一、STM32定時(shí)器捕獲功能

STM32的定時(shí)器是支持信號(hào)輸入捕獲的,何為輸入捕獲?主要做什么應(yīng)用?

輸入捕獲:通過(guò)檢測(cè)TIMx_CHx上的邊沿信號(hào),在邊沿信號(hào)發(fā)生跳變的時(shí)候,將當(dāng)前的定時(shí)器的值(TIMx_CNT)存放到對(duì)應(yīng)的捕獲比較寄存器里面,完成一次捕獲。輸入捕獲主要應(yīng)用于測(cè)量信號(hào)的脈寬或頻率。

下圖是定時(shí)器原理圖的輸入捕獲框圖部分

圖片

第一部分是設(shè)置濾波器,用來(lái)對(duì)信號(hào)進(jìn)行濾波,信號(hào)從TI1輸入,通過(guò)濾波器,輸出TIF信號(hào),正常情況下信號(hào)沒(méi)有抖動(dòng),TI1F信號(hào)等于TI1的輸入信號(hào)。

ICF[3:0]用來(lái)設(shè)置輸入采樣頻率的數(shù)字濾波器的長(zhǎng)度,如ICF=0011,會(huì)在捕獲上升沿時(shí),以fCK_INT的頻率連續(xù)采樣八次通道1的信號(hào)電平,若都為高電平,則說(shuō)明這是一個(gè)有效的觸發(fā),就會(huì)觸發(fā)捕獲中斷,這樣就可以濾除那些高電平低于八個(gè)采樣周期的脈沖信號(hào),達(dá)到濾波的效果,如果不做濾波處理,設(shè)置為ICF=0000,只要檢測(cè)到跳邊沿,就會(huì)觸發(fā)捕獲。

在TIMx捕獲/比較模式寄存器(TIMx_CCMR1)的位7:4

圖片

fDTS頻率根據(jù)TIMx_CR1的CKD[1:0]設(shè)置

位9:8 CKD:時(shí)鐘分頻,此位域指示定時(shí)器時(shí)鐘(CK_INT)頻率與數(shù)字濾波器所使用的采樣時(shí)鐘(ETR、TIx)之間的分頻比。

圖片

第二部分:設(shè)置輸入捕獲極性:配置邊沿檢測(cè)器檢測(cè)上升沿還是下降沿。在TIMx捕獲/比較使能寄存器(TIMx_CCER)的

圖片

第三部分:設(shè)置輸入捕獲映射通道:通道一信號(hào)也可以映射到通道二上,同理通道二信號(hào)也可以映射到通道一上。在TIMx捕獲/比較模式寄存器(TIMx_CCMR1)的

圖片

第四部分:設(shè)置輸入輸出捕獲分頻器,就是設(shè)置檢測(cè)到幾次跳變后觸發(fā)捕獲。在TIMx捕獲/比較模式寄存器(TIMx_CCMR1)的

圖片

同時(shí)要開(kāi)啟輸入捕獲1使能,在TIMx捕獲/比較使能寄存器(TIMx_CCER)的

圖片

第五部分:捕獲到有效信號(hào)開(kāi)啟中斷。在DMA/中斷使能寄存器(TIMx_DIER)

圖片

二、輸入捕獲配置步驟

輸入捕獲配置的一般步驟

① 初始化定時(shí)器和通道對(duì)應(yīng)IO的時(shí)鐘。

② 初始化IO口,模式為復(fù)用:

③設(shè)置引腳復(fù)用映射:

④初始化定時(shí)器ARR,PSC

⑤初始化輸入捕獲通道

⑥如果要開(kāi)啟捕獲中斷,

⑦使能定時(shí)器:

⑧編寫(xiě)中斷服務(wù)函數(shù):

三、輸入捕獲編程

以TIM5_CH1為例,

//定時(shí)器5通道1輸入捕獲配置
//arr:自動(dòng)重裝值(TIM5是32位)
//psc:時(shí)鐘預(yù)分頻數(shù)
void TIM5_CH1_Cap_Init(u32 arr,u16 psc)
{     
  RCC- >APB1ENR|=1< 3;     //TIM5 時(shí)鐘使能 
  RCC- >AHB1ENR|=1< 0;     //使能PORTA時(shí)鐘  
  GPIO_Set(GPIOA,PIN0,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PD);//復(fù)用功能,下拉
  GPIO_AF_Set(GPIOA,0,2);  //PA0,AF2
  TIM5- >ARR=arr;      //設(shè)定計(jì)數(shù)器自動(dòng)重裝值   
  TIM5- >PSC=psc;      //預(yù)分頻器 
  TIM5- >CCMR1|=1< 0;    //CC1S=01   選擇輸入端 IC1映射到TI1上
  TIM5- >CCMR1|=0< 4;     //IC1F=0000 配置輸入濾波器 不濾波
  TIM5- >CCMR1|=0< 10;   //IC1PS=00   配置輸入分頻,不分頻 
  TIM5- >CCMR1|=1< 0;    //CC1S=01   選擇輸入端 IC1映射到TI1上
  TIM5- >CCER|=0< 1;     //CC1P=0  上升沿捕獲
  TIM5- >CCER|=1< 0;     //CC1E=1   允許捕獲計(jì)數(shù)器的值到捕獲寄存器中
  TIM5- >EGR=1< 0;      //軟件控制產(chǎn)生更新事件,使寫(xiě)入PSC的值立即生效,否則將會(huì)要等到定時(shí)器溢出才會(huì)生效!
  TIM5- >DIER|=1< 1;     //允許捕獲1中斷        
  TIM5- >DIER|=1< 0;     //允許更新中斷  
  TIM5- >CR1|=0x01;      //使能定時(shí)器2
  MY_NVIC_Init(2,0,TIM5_IRQn,2);//搶占2,子優(yōu)先級(jí)0,組2

中斷服務(wù)函數(shù):

//中斷服務(wù)函數(shù)
//捕獲狀態(tài),定義一個(gè)u8變量TIM5CH1_CAPTURE_STA,表示輸入捕獲狀態(tài)
//[7]:0,沒(méi)有成功的捕獲;1,成功捕獲到一次.
//[6]:0,還沒(méi)捕獲到低電平(下降沿);1,已經(jīng)捕獲到低電平(下降沿)了.
//[5:0]:捕獲高電平后溢出的次數(shù)(對(duì)于32位定時(shí)器來(lái)說(shuō),1us計(jì)數(shù)器加1,溢出時(shí)間:4294秒)
u8  TIM5CH1_CAPTURE_STA=0;                  //輸入捕獲狀態(tài)                
u32  TIM5CH1_CAPTURE_VAL;                   //輸入捕獲值(TIM5是32位)
//定時(shí)器5中斷服務(wù)程序   
void TIM5_IRQHandler(void)
{         
  u16 tsr;
  tsr=TIM5- >SR;
   if((TIM5CH1_CAPTURE_STA&0X80)==0)        //還未成功捕獲  
  {
    if(tsr&0X01)                            //溢出
    {       
      if(TIM5CH1_CAPTURE_STA&0X40)          //定時(shí)器溢出,說(shuō)明已經(jīng)捕獲到上升沿,本次捕獲的是下降沿
      {
        if((TIM5CH1_CAPTURE_STA&0X3F)==0X3F)//高電平太長(zhǎng)了
        {
          TIM5CH1_CAPTURE_STA|=0X80;        //標(biāo)記成功捕獲了一次
          TIM5CH1_CAPTURE_VAL=0XFFFFFFFF;
        }else TIM5CH1_CAPTURE_STA++;
      }   
    }
    if(tsr&0x02)                      //CH1發(fā)生捕獲事件,已經(jīng)捕獲到上升沿,TIMx_CCR1中已捕獲到計(jì)數(shù)器值(IC1上已檢測(cè)到與所選極性匹配的邊沿)
    {  
      if(TIM5CH1_CAPTURE_STA&0X40)    //CC1IF為1,說(shuō)明已經(jīng)捕獲到了上升沿(第一次捕獲上升沿參考else),本次捕獲到的是下降沿     
      {          
        TIM5CH1_CAPTURE_STA|=0X80;    //標(biāo)記成功捕獲到一次高電平脈寬
          TIM5CH1_CAPTURE_VAL=TIM5- >CCR1;  //獲取當(dāng)前的捕獲值.CCR1為上一個(gè)輸入捕獲1事件(IC1)發(fā)生時(shí)的計(jì)數(shù)器的值
         TIM5- >CCER&=~(1< 1);         //CC1P=0 設(shè)置為上升沿捕獲,為下一次捕獲做準(zhǔn)備
      }else                           //還未開(kāi)始,第一次捕獲上升沿
      {
        TIM5CH1_CAPTURE_STA=0;        //清空
        TIM5CH1_CAPTURE_VAL=0;        //捕獲值清零
        TIM5CH1_CAPTURE_STA|=0X40;    //標(biāo)記捕獲到了上升沿
        TIM5- >CR1&=~(1< 0)    ;       //使能定時(shí)器2
         TIM5- >CNT=0;                 //計(jì)數(shù)器清空
         TIM5- >CCER|=1< 1;            //CC1P=1 設(shè)置為下降沿捕獲
        TIM5- >CR1|=0x01;              //使能定時(shí)器2
      }        
    }                              
   }
  TIM5- >SR=0;//清除中斷標(biāo)志位   
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 檢測(cè)器
    +關(guān)注

    關(guān)注

    1

    文章

    847

    瀏覽量

    47555
  • 比較器
    +關(guān)注

    關(guān)注

    14

    文章

    1614

    瀏覽量

    106831
  • 數(shù)字濾波器
    +關(guān)注

    關(guān)注

    4

    文章

    265

    瀏覽量

    46909
  • 分頻器
    +關(guān)注

    關(guān)注

    43

    文章

    445

    瀏覽量

    49579
  • stm32定時(shí)器
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    2276
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    詳解STM32定時(shí)器捕獲功能

    STM32定時(shí)器是支持信號(hào)輸入捕獲的,何為輸入捕獲?主要做什么應(yīng)用?
    的頭像 發(fā)表于 01-12 17:24 ?7895次閱讀
    詳解<b class='flag-5'>STM32</b><b class='flag-5'>定時(shí)器</b><b class='flag-5'>捕獲</b>功能

    STM32定時(shí)器輸入捕獲使用步驟

    (4)定時(shí)器PWM配置(5)串口配置(6)設(shè)置代碼生成相關(guān)2.Keil配置前言本文主要內(nèi)容是STM32定時(shí)器輸入捕獲,基于MDK_ARM,
    發(fā)表于 08-10 07:28

    stm32定時(shí)器輸入捕獲

    不同頻率、不同占空比的方波信號(hào)、PWM信號(hào),同時(shí)做為輸入捕獲功能時(shí),可以測(cè)量脈沖寬度、實(shí)現(xiàn)電容按鍵檢測(cè)等等。 一、輸入捕獲概念 輸入
    發(fā)表于 10-13 09:13 ?2.4w次閱讀
    <b class='flag-5'>stm32</b><b class='flag-5'>定時(shí)器</b><b class='flag-5'>輸入</b><b class='flag-5'>捕獲</b>

    基于STM32定時(shí)器輸入捕獲解析

    輸入捕獲模式可以用來(lái)測(cè)量脈沖寬度或者測(cè)量頻率。STM32定時(shí)器,除了TIM6和TIM7,其他定時(shí)器都有
    發(fā)表于 09-04 11:00 ?5902次閱讀

    stm32 定時(shí)器 捕獲

    輸入捕獲模式可以用來(lái)測(cè)量脈沖寬度或者測(cè)量頻率。STM32定時(shí)器,除了TIM6和TIM7,其他定時(shí)器都有
    發(fā)表于 09-08 17:07 ?2295次閱讀

    基于STM32定時(shí)器捕獲測(cè)量脈寬的應(yīng)用示例

    我們知道,利用單片機(jī)定時(shí)器捕獲功能測(cè)量脈沖信號(hào)寬度及占空比是種很常見(jiàn)的做法。這里以STM32定時(shí)器為例來(lái)介紹基于其捕獲功能實(shí)現(xiàn)對(duì)脈寬的測(cè)量
    的頭像 發(fā)表于 01-02 18:17 ?1.2w次閱讀
    基于<b class='flag-5'>STM32</b><b class='flag-5'>定時(shí)器</b><b class='flag-5'>捕獲</b>測(cè)量脈寬的應(yīng)用示例

    華大HC32-(05)-定時(shí)器輸入捕獲

    華大HC32-(05)-定時(shí)器輸入捕獲
    發(fā)表于 11-23 18:06 ?28次下載
    華大HC32-(05)-<b class='flag-5'>定時(shí)器</b><b class='flag-5'>輸入</b><b class='flag-5'>捕獲</b>

    stm32定時(shí)器輸入捕獲配置步驟及實(shí)例筆記

    輸入捕獲的一般配置步驟:初始化定時(shí)器和通道對(duì)應(yīng)IO的時(shí)鐘。初始化IO口,模式為輸入:GPIO_Init(); GPIO_InitStructure.GPIO_Mode = GPIO_M
    發(fā)表于 11-23 18:21 ?42次下載
    <b class='flag-5'>stm32</b><b class='flag-5'>定時(shí)器</b><b class='flag-5'>輸入</b><b class='flag-5'>捕獲</b>配置步驟及實(shí)例筆記

    STM32CubeMX——定時(shí)器輸入捕獲

    通用定時(shí)器在基本定時(shí)器的基礎(chǔ)上增加了一個(gè)外部引腳,可以實(shí)現(xiàn)輸入捕獲與輸出比較等功能。高級(jí)定時(shí)器TIM1與TIM8相比于通用
    發(fā)表于 12-02 14:06 ?9次下載
    <b class='flag-5'>STM32</b>CubeMX——<b class='flag-5'>定時(shí)器</b><b class='flag-5'>輸入</b><b class='flag-5'>捕獲</b>

    STM32定時(shí)器輸入捕獲實(shí)驗(yàn)

    概述輸入捕獲模式可以用來(lái)測(cè)量脈沖寬度或者測(cè)量頻率。STM32定時(shí)器,除了 TIM6 和 TIM7,其他定時(shí)器都有
    發(fā)表于 12-14 18:58 ?20次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>定時(shí)器</b><b class='flag-5'>輸入</b><b class='flag-5'>捕獲</b>實(shí)驗(yàn)

    STM32定時(shí)器TIM用作輸入捕獲

    定時(shí)器TIM2的通道3(PA2)為輸入捕獲。分頻值根據(jù)自己需要設(shè)置,分頻值越大采出的頻率精度越低。周期最好拉滿(mǎn),這樣采集時(shí)不會(huì)溢出。2.定時(shí)器TIM2的時(shí)鐘源來(lái)自APB1,需要注意AP
    發(fā)表于 12-14 18:58 ?2次下載
    <b class='flag-5'>STM32</b>的<b class='flag-5'>定時(shí)器</b>TIM用作<b class='flag-5'>輸入</b><b class='flag-5'>捕獲</b>

    stm32捕獲占空比_【話說(shuō)定時(shí)器系列】之六:STM32定時(shí)器輸入捕獲話題

    TIMER 的基本應(yīng)用原理、常規(guī)應(yīng)用等?,F(xiàn)在將課程內(nèi)容整理為文章,針對(duì)STM32定時(shí)器有基本了解的用戶(hù),分享具體的應(yīng)用實(shí)現(xiàn)環(huán)節(jié)及常見(jiàn)問(wèn)題解決。STM32定時(shí)器除了基本計(jì)數(shù)
    發(fā)表于 12-27 19:02 ?2次下載
    <b class='flag-5'>stm32</b><b class='flag-5'>捕獲</b>占空比_【話說(shuō)<b class='flag-5'>定時(shí)器</b>系列】之六:<b class='flag-5'>STM32</b><b class='flag-5'>定時(shí)器</b><b class='flag-5'>輸入</b><b class='flag-5'>捕獲</b>話題

    stm32捕獲占空比_「話說(shuō)定時(shí)器系列」之六:STM32定時(shí)器輸入捕獲話題

    TIMER 的基本應(yīng)用原理、常規(guī)應(yīng)用等。現(xiàn)在將課程內(nèi)容整理為文章,針對(duì)STM32定時(shí)器有基本了解的用戶(hù),分享具體的應(yīng)用實(shí)現(xiàn)環(huán)節(jié)及常見(jiàn)問(wèn)題解決。STM32定時(shí)器除了基本計(jì)數(shù)
    發(fā)表于 12-27 19:02 ?8次下載
    <b class='flag-5'>stm32</b><b class='flag-5'>捕獲</b>占空比_「話說(shuō)<b class='flag-5'>定時(shí)器</b>系列」之六:<b class='flag-5'>STM32</b><b class='flag-5'>定時(shí)器</b><b class='flag-5'>輸入</b><b class='flag-5'>捕獲</b>話題

    通用定時(shí)器輸入捕獲實(shí)驗(yàn)

    STM32輸入捕獲,簡(jiǎn)單的說(shuō)就是通過(guò)檢測(cè)TIMx_CHx(定時(shí)器X的通道X)上的邊沿信號(hào),在邊沿信號(hào)發(fā)生跳變(上升沿/下降沿)的時(shí)候,將定時(shí)器
    發(fā)表于 01-12 19:53 ?9次下載
    通用<b class='flag-5'>定時(shí)器</b>的<b class='flag-5'>輸入</b><b class='flag-5'>捕獲</b>實(shí)驗(yàn)

    CW32定時(shí)器操作講解——輸入捕獲

    CW32定時(shí)器操作講解——輸入捕獲
    的頭像 發(fā)表于 09-27 16:06 ?790次閱讀
    CW32<b class='flag-5'>定時(shí)器</b>操作講解——<b class='flag-5'>輸入</b><b class='flag-5'>捕獲</b>