衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

CW32定時器操作講解——輸入捕獲

jf_pJlTbmA9 ? 來源:武漢芯源半導體 ? 作者:武漢芯源半導體 ? 2023-09-27 16:06 ? 次閱讀

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

功能框圖如下圖所示:

wKgZomUDzUaAV_qQAABYvDx4qpM254.png

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

wKgaomUDzUeAAbnrAAClCxzLx7U763.png

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

輸入捕獲來源

GTIM 的輸入捕獲來源可以是外部 GTIMx_CHy 引腳,也可以是片內其它外設,通過通用定時器輸入捕獲來源配置寄存器 SYSCTRL_GTIMxCAP 進行配置。當 SYSCTRL_GTIMxCAP.CHy 為 0x00 時,輸入捕獲信號的外部輸入端口由 GPIO 復用功能寄存器 (GPIOx_AFRH 和 GPIOx_AFRL) 進行配置。當 SYSCTRL_GTIMxCAP.CHy 為 0x01 ~ 0x07 時,輸入捕獲信號來自片內其它外設,如下表所示:

wKgZomUDzUmAXMGQAAG5XAd63dQ385.png

這種配置下,可以在芯片內部實現外部輸入的互聯,例如將 UART 的 RXD 信號作為輸入捕獲來源,可以實現對 UART 波特率的自動檢測。

實例演示:利用GTIM的輸入捕獲功能,測量PWM信號的周期和脈寬

1.初始化系統時鐘

void RCC_Configuration(void)

{

__RCC_GTIM1_CLK_ENABLE();

__RCC_GPIOA_CLK_ENABLE();

RCC_HSI_Enable(RCC_HSIOSC_DIV6);

// 系統時鐘設置為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();//設置PA06復用為GTIM1_CH1, 上升沿觸發捕獲

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

}

3.配置中斷服務程序

void NVIC_Configuration(void)

{

__disable_irq();

NVIC_EnableIRQ(GTIM1_IRQn);

__enable_irq();

}

4.GTIM1中斷服務程序:通道1的輸入捕獲中斷獲取計數值VALUE1,通道2的輸入捕獲中斷獲取計數值VALUE2,通道1的第2次輸入捕獲中斷獲取計數值VALUE3。則信號脈寬=VALUE2-VALUE1,信號周期=VALUE3-VALUE1。注意如果待測量信號的脈寬和周期較長,在計算時需要考慮定時器的溢出問題,詳見定時器溢出中斷處理內容。

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兩個通道對PWM輸入信號進行測量,在捕獲中斷服務程序中完成信號的周期和脈寬計算。

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的單次/連續計數模式選擇。*/

GTIM_InitStruct.Prescaler = GTIM_PRESCALER_DIV1; /*!< GTIM的預分頻系數。*/

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

GTIM_InitStruct.ToggleOutState = DISABLE;

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

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

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.演示說明:

將同一個PWM輸入信號引入到PA06和PA07上,運行程序,使用GTIM1的CH1和CH2兩個通道對PWM輸入信號的脈寬和周期進行測量。

來源:武漢芯源半導體

免責聲明:本文為轉載文章,轉載此文目的在于傳遞更多信息,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請聯系小編進行處理

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5363

    瀏覽量

    121198
  • 定時器
    +關注

    關注

    23

    文章

    3255

    瀏覽量

    115388
收藏 人收藏

    評論

    相關推薦

    高級定時器PWM輸入模式的配置方法

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

    定時器的工作方式介紹

    定時器是計算機和嵌入式系統中常見的一種硬件模塊,用于實現定時和計數功能。定時器的工作方式通常由一組寄存來控制,這些寄存定義了
    的頭像 發表于 07-12 10:29 ?1128次閱讀

    武漢芯源半導體CW32F030K8T7在即熱式熱水的應用介紹

    捕獲/比較通道和3對互補PWM輸出,死區時間和靈活的同步功能;四組16位通用定時器;三組16位基本定時器;窗口看門狗定時器;獨立看門狗定時器
    發表于 06-06 14:17

    【項目展示】基于CW32的遙控循跡小車

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

    CW32數字電壓電流表軟件教程-實驗四:數碼管動態顯示

    顯示不同的值需要用到CW32定時器功能,在定時器的中斷服務程序里面執行顯示刷新的動作。有關CW32定時器和中斷的相關知識請查看鏈接:【
    的頭像 發表于 05-31 15:23 ?604次閱讀
    <b class='flag-5'>CW32</b>數字電壓電流表軟件教程-實驗四:數碼管動態顯示

    CW32使用DMA單通道、定時器觸發ADC實現了多路AD采集

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

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

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

    如何實現一個軟件定時器?

    在Linux,uC/OS,FreeRTOS等操作系統中,都帶有軟件定時器,原理大同小異。典型的實現方法是:通過一個硬件定時器產生固定的時鐘節拍,每次硬件定時器中斷到,就對一個全局的時間
    的頭像 發表于 04-29 11:00 ?752次閱讀

    CW32量產燒錄工具

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

    CW32快速開發入門

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

    斷電延時定時器指令TOF

    TOF指令用于允許輸入端斷開后的單一間隔定時。當定時器輸入端IN為ON時,TOF的狀態位為ON,其常開觸點閉合,常閉觸點斷開,但是定時器
    的頭像 發表于 04-01 11:40 ?3284次閱讀
    斷電延時<b class='flag-5'>定時器</b>指令TOF

    ?PLC保持型通電延時定時器TONR

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

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

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

    使用555定時器的可調雙定時器電路

    定時器 IC 555 是最通用和最常用的 IC 之一,因為它的應用范圍更廣,如 PWM放大器、延遲定時器、開關電路、占空比選擇、時鐘脈沖發生等。這也可用于各種應用,如精確
    的頭像 發表于 02-25 15:16 ?2422次閱讀
    使用555<b class='flag-5'>定時器</b>的可調雙<b class='flag-5'>定時器</b>電路

    國產嵌入式教學實驗箱操作教程:2-13 定時器控制實驗

    獨立32位計數及自動重裝32位計數,可以產生周期中斷DMA事件及外部事件。定時器/計數還可以用于捕獲外部
    發表于 02-21 14:09
    谷城县| 爱马仕赌球| 哪个百家乐平台信誉好| 新澳门百家乐官网娱乐城| 新奥博娱乐城体育投注| 百家乐博娱乐场| 国美百家乐官网的玩法技巧和规则| 网上百家乐网站导航| 查看百家乐官网赌博| 淘宝皇冠网店| 大发888娱乐场怎么才能赢到钱| 百家乐棋牌正式版| 百家乐官网几点不用补| 百家乐官网赌经| 彩票游戏| 狼2老虎机清零密码| 百家乐蓝盾有赢钱的吗| 免费百家乐奥秘| 赌博百家乐官网经验网| 鄄城县| tt娱乐城clega| 百家乐麻将筹码币镭射贴膜| 百家乐投注窍门| 百家乐官网看大小路| 武汉百家乐官网庄闲和| 百家乐官网客户端下载| 澳门百家乐官方网站| 大发888 充值淘宝| 百家乐娱乐平台官网网| 百家乐视频游戏双扣| 四方百家乐官网的玩法技巧和规则| 百家乐官网看盘技巧| 百家乐官网有什么打法| 皇冠网都市小说| 鹤乡棋牌乐| 大发888最新信息| 最可信百家乐娱乐城| 凯发百家乐是否是程序控制| e世博百家乐娱乐场| 百家乐连闲几率| 免费百家乐官网预测软件|