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

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

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

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

jf_pJlTbmA9 ? 來(lái)源:武漢芯源半導(dǎo)體 ? 作者:武漢芯源半導(dǎo)體 ? 2023-09-27 16:06 ? 次閱讀

CW32系列MCU的GTIM、ATIM的每個(gè)定時(shí)器都帶有至少4路獨(dú)立的捕獲 / 比較通道,輸入捕獲功能可以測(cè)量輸入信號(hào)的脈沖寬度或者頻率。當(dāng)捕獲比較通道 CHy 上信號(hào)發(fā)生跳變(上升沿或下降沿)時(shí),硬件自動(dòng)將當(dāng)前計(jì)數(shù)寄存器 GTIMx_CNT 的值存放到對(duì)應(yīng)通道的比較捕獲寄存器 GTIMx_CCRy 中,完成一次捕獲。通過(guò)連續(xù)幾次捕獲即可完成信號(hào)脈沖寬度或者頻率的測(cè)量。

功能框圖如下圖所示:

wKgZomUDzUaAV_qQAABYvDx4qpM254.png

各個(gè)通道上觸發(fā)捕獲的條件由比較捕獲控制寄存器 GTIMx_CMMR 決定。

wKgaomUDzUeAAbnrAAClCxzLx7U763.png

當(dāng)發(fā)生一次捕獲時(shí),通道 CHy 比較捕獲中斷標(biāo)志 GTIMx_ISR.CCy 被硬件置位,如果允許中斷 ( 設(shè)置中斷使能寄 存器 GTIMx_IER.CCy 為 1),CPU 將響應(yīng)中斷服務(wù)程序。退出中斷服務(wù)程序之前,應(yīng)設(shè)置中斷標(biāo)志清除寄存器 GTIMx_ICR.CCy 為 0 以清除該標(biāo)志。

輸入捕獲來(lái)源

GTIM 的輸入捕獲來(lái)源可以是外部 GTIMx_CHy 引腳,也可以是片內(nèi)其它外設(shè),通過(guò)通用定時(shí)器輸入捕獲來(lái)源配置寄存器 SYSCTRL_GTIMxCAP 進(jìn)行配置。當(dāng) SYSCTRL_GTIMxCAP.CHy 為 0x00 時(shí),輸入捕獲信號(hào)的外部輸入端口由 GPIO 復(fù)用功能寄存器 (GPIOx_AFRH 和 GPIOx_AFRL) 進(jìn)行配置。當(dāng) SYSCTRL_GTIMxCAP.CHy 為 0x01 ~ 0x07 時(shí),輸入捕獲信號(hào)來(lái)自片內(nèi)其它外設(shè),如下表所示:

wKgZomUDzUmAXMGQAAG5XAd63dQ385.png

這種配置下,可以在芯片內(nèi)部實(shí)現(xiàn)外部輸入的互聯(lián),例如將 UART 的 RXD 信號(hào)作為輸入捕獲來(lái)源,可以實(shí)現(xiàn)對(duì) UART 波特率的自動(dòng)檢測(cè)。

實(shí)例演示:利用GTIM的輸入捕獲功能,測(cè)量PWM信號(hào)的周期和脈寬

1.初始化系統(tǒng)時(shí)鐘

void RCC_Configuration(void)

{

__RCC_GTIM1_CLK_ENABLE();

__RCC_GPIOA_CLK_ENABLE();

RCC_HSI_Enable(RCC_HSIOSC_DIV6);

// 系統(tǒng)時(shí)鐘設(shè)置為HSI,6分頻,8MHz, PCLK、HCLK不分頻, PCLK=HCLK=SysClk=8MHz

}

2.初始化GPIO

void GPIO_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStruct = {0};

GPIO_InitStruct.IT = GPIO_IT_NONE;

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

GPIO_InitStruct.Pins = GPIO_PIN_6 | GPIO_PIN_7;

GPIO_Init(CW_GPIOA, GPIO_InitStruct);

PA06_AFx_GTIM1CH1();//設(shè)置PA06復(fù)用為GTIM1_CH1, 上升沿觸發(fā)捕獲

PA07_AFx_GTIM1CH2();//設(shè)置PA07復(fù)用為GTIM1_CH2,下降沿觸發(fā)捕獲。

}

3.配置中斷服務(wù)程序

void NVIC_Configuration(void)

{

__disable_irq();

NVIC_EnableIRQ(GTIM1_IRQn);

__enable_irq();

}

4.GTIM1中斷服務(wù)程序:通道1的輸入捕獲中斷獲取計(jì)數(shù)值VALUE1,通道2的輸入捕獲中斷獲取計(jì)數(shù)值VALUE2,通道1的第2次輸入捕獲中斷獲取計(jì)數(shù)值VALUE3。則信號(hào)脈寬=VALUE2-VALUE1,信號(hào)周期=VALUE3-VALUE1。注意如果待測(cè)量信號(hào)的脈寬和周期較長(zhǎng),在計(jì)算時(shí)需要考慮定時(shí)器的溢出問(wèn)題,詳見定時(shí)器溢出中斷處理內(nèi)容。

void GTIM1_IRQHandler(void)

{

GTIM1_IRQHandlerCallBack();

}

void GTIM1_IRQHandlerCallBack(void)

{

static uint8_t stage = 0;

static uint32_t cnt = 0;

if (GTIM_GetITStatus(CW_GTIM1, GTIM_IT_OV))

{

GTIM_ClearITPendingBit(CW_GTIM1, GTIM_IT_OV);

if (stage == 1)

{

cnt++;

}

}

if (GTIM_GetITStatus(CW_GTIM1, GTIM_IT_CC1))

{

if (stage == 0)

{

PWMPeriod = GTIM_GetCapture1(CW_GTIM1);

stage = 1;

}

else if (stage == 1)

{

PWMPeriod = GTIM_GetCapture1(CW_GTIM1) + cnt * 65536 - PWMPeriod;

stage = 0;

cnt = 0;

}

GTIM_ClearITPendingBit(CW_GTIM1, GTIM_IT_CC1);

}

if (GTIM_GetITStatus(CW_GTIM1, GTIM_IT_CC2))

{

if (stage == 1)

{

PWMWidth = GTIM_GetCapture2(CW_GTIM1) + cnt * 65536 - PWMPeriod;

}

GTIM_ClearITPendingBit(CW_GTIM1, GTIM_IT_CC2);

}

}

5.主程序:使用GTIM1的CH1和CH2兩個(gè)通道對(duì)PWM輸入信號(hào)進(jìn)行測(cè)量,在捕獲中斷服務(wù)程序中完成信號(hào)的周期和脈寬計(jì)算。

static uint32_t PWMPeriod = 0;

static uint32_t PWMWidth = 0;

int32_t main(void)

{

RCC_Configuration();//System Clocks Configuration

GPIO_Configuration();//GPIO Configuration

NVIC_Configuration();//NVIC Configuration

GTIM_InitTypeDef GTIM_InitStruct = {0};

GTIM_ICInitTypeDef GTIM_ICInitStruct = {0};

GTIM_InitStruct.Mode = GTIM_MODE_TIME; /*!< GTIM的模式選擇。*/

GTIM_InitStruct.OneShotMode = GTIM_COUNT_CONTINUE;

/*!< GTIM的單次/連續(xù)計(jì)數(shù)模式選擇。*/

GTIM_InitStruct.Prescaler = GTIM_PRESCALER_DIV1; /*!< GTIM的預(yù)分頻系數(shù)。*/

GTIM_InitStruct.ReloadValue = 0xFFFF; /*!< GTIM的重載值。*/

GTIM_InitStruct.ToggleOutState = DISABLE;

GTIM_TimeBaseInit(CW_GTIM1, GTIM_InitStruct); //GTIM的基礎(chǔ)參數(shù)初始化

GTIM_ICInitStruct.CHx = GTIM_CHANNEL1;// GTIM 輸入捕獲的配置參數(shù)

GTIM_ICInitStruct.ICFilter = GTIM_CHx_FILTER_NONE;

GTIM_ICInitStruct.ICInvert = GTIM_CHx_INVERT_ON;

GTIM_ICInitStruct.ICPolarity = GTIM_ICPolarity_Rising;

GTIM_ICInit(CW_GTIM1, GTIM_ICInitStruct);//輸入捕獲功能初始化

GTIM_ICInitStruct.CHx = GTIM_CHANNEL2;

GTIM_ICInitStruct.ICPolarity = GTIM_ICPolarity_Falling;

GTIM_ICInit(CW_GTIM1, GTIM_ICInitStruct);

GTIM_ITConfig(CW_GTIM1, GTIM_IT_CC1 | GTIM_IT_CC2 | GTIM_IT_OV, ENABLE);

GTIM_Cmd(CW_GTIM1, ENABLE);

while (1)

{

}

}

6.演示說(shuō)明:

將同一個(gè)PWM輸入信號(hào)引入到PA06和PA07上,運(yùn)行程序,使用GTIM1的CH1和CH2兩個(gè)通道對(duì)PWM輸入信號(hào)的脈寬和周期進(jìn)行測(cè)量。

來(lái)源:武漢芯源半導(dǎo)體

免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問(wèn)題,請(qǐng)聯(lián)系小編進(jìn)行處理

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5343

    瀏覽量

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

    關(guān)注

    23

    文章

    3248

    瀏覽量

    114800
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    高級(jí)定時(shí)器PWM輸入模式的配置方法

    我們將向大家介紹高級(jí)定時(shí)器的另一個(gè)常見應(yīng)用——PWM輸入模式。在本節(jié)課中,我們將先圍繞輸入捕獲模式展開,并重點(diǎn)描述PWM輸入模式和涉及的寄存
    的頭像 發(fā)表于 11-08 16:48 ?2219次閱讀
    高級(jí)<b class='flag-5'>定時(shí)器</b>PWM<b class='flag-5'>輸入</b>模式的配置方法

    【項(xiàng)目展示】基于CW32的遙控循跡小車

    CW32循跡小車.zip_免費(fèi)高速下載|百度網(wǎng)盤-分享無(wú)限制? 一、概述 CW32循跡、遙控小車具有循跡和遙控兩種功能,小車的硬件模塊由CW32F030C8T6小藍(lán)板、智能小車控制底板、BT04-E
    的頭像 發(fā)表于 05-31 17:33 ?1317次閱讀
    【項(xiàng)目展示】基于<b class='flag-5'>CW32</b>的遙控循跡小車

    CW32數(shù)字電壓電流表軟件教程-實(shí)驗(yàn)四:數(shù)碼管動(dòng)態(tài)顯示

    顯示不同的值需要用到CW32定時(shí)器功能,在定時(shí)器的中斷服務(wù)程序里面執(zhí)行顯示刷新的動(dòng)作。有關(guān)CW32定時(shí)器和中斷的相關(guān)知識(shí)請(qǐng)查看鏈接:【
    的頭像 發(fā)表于 05-31 15:23 ?519次閱讀
    <b class='flag-5'>CW32</b>數(shù)字電壓電流表軟件教程-實(shí)驗(yàn)四:數(shù)碼管動(dòng)態(tài)顯示

    CW32使用DMA單通道、定時(shí)器觸發(fā)ADC實(shí)現(xiàn)了多路AD采集

    本測(cè)試樣例基于CW32F030C8T6MCU,使用DMA單通道、定時(shí)器觸發(fā)ADC實(shí)現(xiàn)了12路AD采集。
    的頭像 發(fā)表于 05-24 09:29 ?846次閱讀
    <b class='flag-5'>CW32</b>使用DMA單通道、<b class='flag-5'>定時(shí)器</b>觸發(fā)ADC實(shí)現(xiàn)了多路AD采集

    STM32的GPIO引腳能同時(shí)用作外部中斷和定時(shí)器輸入捕獲嗎?

    今天突然在項(xiàng)目中想到一種用法,將GPIO的某一個(gè)引腳,同時(shí)配置外部中斷(在中斷中做一些邏輯)和復(fù)用為定時(shí)器輸入捕獲引腳。 查看GPIO的原理框圖,感覺(jué)可行。找個(gè)機(jī)會(huì)試試這種用法,于是乎發(fā)此貼先與各位討論一下,說(shuō)不定哪位童鞋已經(jīng)
    發(fā)表于 05-09 08:22

    如何實(shí)現(xiàn)一個(gè)軟件定時(shí)器?

    在Linux,uC/OS,F(xiàn)reeRTOS等操作系統(tǒng)中,都帶有軟件定時(shí)器,原理大同小異。典型的實(shí)現(xiàn)方法是:通過(guò)一個(gè)硬件定時(shí)器產(chǎn)生固定的時(shí)鐘節(jié)拍,每次硬件定時(shí)器中斷到,就對(duì)一個(gè)全局的時(shí)間
    的頭像 發(fā)表于 04-29 11:00 ?653次閱讀

    CW32量產(chǎn)燒錄工具

    本節(jié)主要介紹CW32微控制的燒錄CW-Writer,以及與之配合的軟件CW-Programmer的使用方法。燒錄
    的頭像 發(fā)表于 04-25 15:22 ?1405次閱讀
    <b class='flag-5'>CW32</b>量產(chǎn)燒錄工具

    CW32快速開發(fā)入門

    CW32快速開發(fā)入門
    的頭像 發(fā)表于 04-24 18:56 ?1969次閱讀
    <b class='flag-5'>CW32</b>快速開發(fā)入門

    斷電延時(shí)定時(shí)器指令TOF

    TOF指令用于允許輸入端斷開后的單一間隔定時(shí)。當(dāng)定時(shí)器輸入端IN為ON時(shí),TOF的狀態(tài)位為ON,其常開觸點(diǎn)閉合,常閉觸點(diǎn)斷開,但是定時(shí)器
    的頭像 發(fā)表于 04-01 11:40 ?3027次閱讀
    斷電延時(shí)<b class='flag-5'>定時(shí)器</b>指令TOF

    ?PLC保持型通電延時(shí)定時(shí)器TONR

    TONR指令用于積累許多時(shí)間間隔。當(dāng)定時(shí)器輸入端IN為ON時(shí),定時(shí)器開始計(jì)時(shí),當(dāng)定時(shí)器的當(dāng)前值大于等于設(shè)定值時(shí),定時(shí)器被置位,其常開觸點(diǎn)閉
    發(fā)表于 03-31 09:13 ?1099次閱讀
    ?PLC保持型通電延時(shí)<b class='flag-5'>定時(shí)器</b>TONR

    如果STM32定時(shí)器外接了正交編碼,該剩余通道是否能做PWM輸出呢?

    其實(shí),對(duì)于STM32芯片,編碼輸入信號(hào)就是定時(shí)器的計(jì)數(shù)時(shí)鐘源之一。定時(shí)器外接了編碼輸入,若還有剩余通道的話,剩余通道依然可以實(shí)現(xiàn)輸入
    的頭像 發(fā)表于 03-21 09:06 ?1681次閱讀
    如果STM32<b class='flag-5'>定時(shí)器</b>外接了正交編碼<b class='flag-5'>器</b>,該剩余通道是否能做PWM輸出呢?

    使用555定時(shí)器的可調(diào)雙定時(shí)器電路

    定時(shí)器 IC 555 是最通用和最常用的 IC 之一,因?yàn)樗膽?yīng)用范圍更廣,如 PWM放大器、延遲定時(shí)器、開關(guān)電路、占空比選擇、時(shí)鐘脈沖發(fā)生等。這也可用于各種應(yīng)用,如精確
    的頭像 發(fā)表于 02-25 15:16 ?2225次閱讀
    使用555<b class='flag-5'>定時(shí)器</b>的可調(diào)雙<b class='flag-5'>定時(shí)器</b>電路

    國(guó)產(chǎn)嵌入式教學(xué)實(shí)驗(yàn)箱操作教程:2-13 定時(shí)器控制實(shí)驗(yàn)

    獨(dú)立32位計(jì)數(shù)及自動(dòng)重裝32位計(jì)數(shù),可以產(chǎn)生周期中斷DMA事件及外部事件。定時(shí)器/計(jì)數(shù)還可以用于捕獲外部
    發(fā)表于 02-21 14:09

    單片機(jī)定時(shí)器的用法

    本章以CW32通用定時(shí)器為例介紹單片機(jī)定時(shí)器的用法。
    的頭像 發(fā)表于 01-04 10:37 ?1413次閱讀
    單片機(jī)<b class='flag-5'>定時(shí)器</b>的用法

    一個(gè)通道如何捕獲PWM的頻率和占空比?

    來(lái)捕獲。雖然也實(shí)現(xiàn)了捕獲PWM的功能,但是代價(jià)也太大了,且很難同時(shí)捕獲多個(gè)PWM,那有沒(méi)有更好的方法呢?本文介紹了另一種捕獲PWM的方法,只使用任何一路
    的頭像 發(fā)表于 12-30 08:00 ?3179次閱讀
    一個(gè)通道如何<b class='flag-5'>捕獲</b>PWM的頻率和占空比?