色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

MM32F0140定時器模塊計數定時功能

科技綠洲 ? 來源:靈動MM32 ? 作者:靈動MM32 ? 2022-04-07 16:31 ? 次閱讀

本篇筆記主要探討 MM32F0140 定時器模塊的框圖結構、定時器提供的計數定時等功能以及配置定時器的流程,并以 pokt-f0140 開發板作為實際演示平臺,使用開發板上 32 位定時器 TIM2 進行 pwm 波輸出實驗。

TIM 功能描述

MM32F0140 TIM 最基本的功能為計數定時,此功能依靠定時器內部的預分頻器 PSC 、計數器 CNT 和 自動預裝載寄存器 ARR 合作完成。此外,定時器如有輸入輸出通道,則還能提供輸入捕獲、比較輸出和從模式輸入等功能。在此之上,對于擁有額外剎車輸入通道的高級定時器而言,還可提供剎車和死區設置。

TIM 框圖

下圖1 為 MM32F0140 高級定時器的結構框圖,各部分支持不同的功能。其中:

紅框支持最基本的計數定時功能。計數器、預分頻器和自動預裝載器也被稱為定時器的時基單元。預分頻器 PSC 將輸入的時鐘信號進行分頻,計數器 CNT 對分頻信號進行計數。計數器值和自動預裝載寄存器 ARR 值進行比較,發生上溢或下溢時,則表明完成一次周期計數,周期值為 ARR 寄存器寫入值,頻率為輸入時鐘源經過 PSC 預分頻器分頻后頻率。

灰框支持從模式輸入功能。除內部時鐘外,定時器模塊可以通過配置從模式,選擇來自外部輸入引腳 TI1 或 TI2 的輸入信號或 ETR 引腳信號或其他定時器的 ITRx 信號作為時鐘輸入源。

綠框支持輸入捕獲功能。當通道 x 配置為輸入捕獲模式時,通道 x 的輸入信號依次經過濾波、邊沿檢測以及分頻,觸發通道 x 捕獲事件。定時器模塊會將當前計數器計數值寫入對應通道的捕獲/比較寄存器 CCRx 中。

藍框支持比較輸出功能。當通道 x 配置為比較輸出模式時,定時器將當前計數器值與通道 x 捕獲/比較寄存器 CCRx 中值進行比較,相等時定時器將改變通道 x 的參考輸出電壓 REF。

黑框支持剎車功能,當 BKIN 通道有指定剎車信號出現時,各路輸出通道將輸出預設的空閑輸出電壓。

圖1. MM32F0140 高級定時器框圖

下文將詳細敘述定時器的計數定時、輸入捕獲和比較輸出這三個主要功能。

計數定時

計數定時即計數器使能后,在一定計數頻率下進行計數。根據設置的計數方向,計數器完成周期次計數后,定時器觸發更新中斷。

計數器頻率計算

設定時器輸入頻率為 clk_frq,預分頻器分頻值為 psc,則計數器頻率 cnt_frq 為

計數器計數方向

MM32F0140 定時器中 TIM14、TIM16 和 TIM17 僅提供向上計數。其余定時器可以提供以下三種可選計數方向:

向上計數,計數器從 0 開始向上計數,遞增到 ARR 自動預裝載寄存器值后,計數器產生上溢事件。定時器產生一個更新事件,計數器又從 0 開始計數。

向下計數,計數器從 ARR 自動預裝載寄存器值開始向下計數,遞減到 0 后,計數器產生下溢事件。定時器產生一個更新事件,計數器又從 ARR 自動預裝載寄存器值開始計數。

先向上計數再向下計數。計數器從 0 開始向上計數,遞增到 ARR 自動預裝載寄存器值后,計數器產生上溢事件。定時器產生一個更新事件。然后計數器從 ARR 自動預裝載寄存器值開始向下計數,遞減到 0 后,計數器產生下溢事件。定時器再產生一個更新事件。

圖2 定時器向上計數

如圖2 所示,定時器輸入時鐘即分頻器時鐘 CK_PSC,預分頻器 PSC 值為 1 ,即定時器頻率為 CK_PSC 的二分頻頻率。定時器自動裝載值 ARR 為 5,從圖中可見計數器 CNT 達到 5 時,產生一個更新事件 UEV。

定時器周期長度

ARR 自動預裝載寄存器的值為定時器周期長度,決定定時器計數多少次后產生一個更新事件。

比較輸出

如圖3 所示,定時器比較輸出功能通過計數器、通道 x 的捕獲/比較寄存器 CCRx 以及輸出控制電路實現。定時器將計數器和捕獲/比較寄存器 CCRx 值實時比較,當二值相等時會改變通道 x 的參考輸出電壓 REF,參考輸出電壓 REF 和輸出控制電路共同決定通道 x 的實際電壓值。

圖3 MM32F0140 定時器輸出通道1示意圖

比較輸出匹配值

輸出通道x 對應的 CCRx 寄存器值為比較輸出匹配值,定時器將在計數器值和通道 x 的匹配值相等時,根據比較輸出模式,改變通道 x 的參考輸出電壓REF。

比較輸出模式選擇

MM32 F0140 的 TIM 模塊一共有 7 種比較輸出模式:

匹配結果對于參考輸出電壓 REF 沒有影響。

匹配時將參考輸出電壓 REF 設為高電平。

匹配時將參考輸出電壓 REF 設為低電平。

匹配時翻轉參考輸出電壓 REF。

強制參考輸出電壓 REF為低電平。

強制參考輸出電壓 REF為高電平。

PWM模式1:當計數值小于匹配值時,參考電壓REF為高電平,否則為低電平。

PWM模式2:當計數值小于匹配值時,參考電壓REF為低電平,否則為高電平。

參考輸出電壓和實際輸出電壓間關系

定時器 CCER[CCxP] 位決定了參考輸出電壓和實際輸出電壓間關系,具體可見表1。CCER[CCxP]值為0表示高電平有效,為1表示低電平有效。

表1 CCER[CCxP]值對實際輸出電壓的影響

如下圖 4 所示,通道1的比較值為1,當計數器值小于1時,通道1的比較輸出電壓 OC1REF 為高;當計數器值等于1時,通道1 的比較輸出電壓 OC1REF 拉低,產生一個下降沿。OC1REF 將一直保持為低,直到定時器更新事件發生,計數器從 0 開始計數時,OC1REF 又被拉高。

圖4 遞增計數下PWM模式1時輸出通道參考電壓

輸入捕獲

如圖5 所示,輸入通道 x 的輸入信號 TIx 經過濾波器、邊沿檢測、分頻以后被定時器捕獲,定時器將輸入捕獲時刻的計數器值寫入相應通道的捕獲/比較寄存器 CCRx 中。

圖5 MM32F0140輸入捕獲框圖

計數定時配置

時基配置

配置定時器工作模式

配置 CR1[OPM] 位可以設置定時器工作模式,其中值為 0 表示定時器將循環計時,值為 1 表示計時 1 次后就停止計數器。

配置是否預裝載

配置 CR1[ARPE] 位可以配置定時器自動預裝載寄存器 ARR 的實際更新方式,值為1則用戶寫入 ARR 寄存器的值會在下一次計數器更新時起效,否則立刻生效。

配置計數模式

配置 CR1[DIR] 位和 CR1[CMS] 位可以配置計數器計數模式。如果選擇單向計數,CR1[CMS]需配置為 0,此時CR1[DIR] 配置為 0 時,向上計數,配置為 1 時向下計數。如果選擇先向上計數再向下計數,則需要配置 CR1[CMS],CR1[DIR] 值保持為 0。

配置預分頻值

由上述計數器頻率計算小結可知,如果需要定時器頻率為 cnt_frq, 定時器輸入源頻率為 clk_frq,定時器的預分頻值 psc 應為

計算出的 psc 值寫入 PSC 寄存器。

配置自動預裝載寄存器 ARR

自動預裝載寄存器 ARR 的值決定定時器周期計數次數。假如定時器向上計數,則計數器從 0 遞增到 ARR 值,即 ARR 寄存器值為 arrv,則實際計數器一個周期內會做arrv+1 次計數,所以ARR 寄存器值應為需要的周期計數值減一。將此值寫入 ARR 寄存器。

使能計數器

完成上述配置后,將 CR1[CEN] 置為 1 即可啟動計數器計數。當不需要計數時,將此位設置為 0。

比較輸出配置

配置通道輸出模式

配置 CCMRy[CCxS] 位為 0,可以將通道 x 配置為輸出模式。

配置是否預裝載匹配值

配置 CCMRy[OCxPE] 位可以設置通道 x 的比較輸出匹配值生效方式,為 0 則一旦寫入立刻生效,否則匹配值將在下一次更新事件后生效。

配置比較輸出模式

配置 CCMRy[OCxM] 字段可以選擇不同的比較輸出模式,具體字段值和比較輸出模式間關系可見表3。

表3 CCMRy[OCxM] 與 比較輸出模式間對應關系

配置有效輸出電壓

配置 CCER[CCxP] 位,可以設置通道 x 的有效輸出電壓。值為0,則參考電壓的高電平為有效電平;值為1,則參考電壓的低電平為有效電平。

使能通道輸出

配置 CCER[CCxE] 位為1,使能通道輸出功能;配置為 0,則關閉通道輸出功能。

輸入捕獲配置

配置通道輸入模式

配置 CCMRy[CCxS] 位為1,可將通道 x 配置為輸入模式。

配置輸入信號邊沿選擇

配置 CCER[CCxP] 和 CCER[CCxNP] 位,可以配置輸入信號的有效邊沿選擇,具體對應關系如表4。

表4 輸入模式下,CCER[CCxP]和CCER[CCxNP]

對于輸入邊沿影響

配置采樣和濾波

配置 CCMRy[ICxF] 字段,設置通道 x 的輸入捕獲濾波器。

配置預分頻器

配置 CCMRy[IC1PSC] 字段,設置通道 x 輸入信號的預分頻值。

使能通道輸入

配置 CCER[CCxE] 位為 1,使能通道輸入捕獲功能;配置為 0,則關閉通道輸入捕獲功能。

樣例

pokt-f0140 開發板 定時器實現TIM2通道1輸出pwm波

SDK 中已有支持的 pokt-f0140 開發板上,在 tim_32b_0 樣例工程中,通過 tim_32b_output_compare_pwm 可以使用定時器 TIM2 的通道 1 輸出 pwm 波。

時鐘初始化

TIM2 在 APB2 總線上,需要使能時鐘。TIM2 的通道 1 復用 PA0 引腳,需要使能 GPIOA 時鐘。

/* Enable TIM. */RCC_EnableAPB1Periphs(RCC_APB1_PERIPH_TIM2, true);RCC_ResetAPB1Periphs(RCC_APB1_PERIPH_TIM2);/* Enable GPIOA for TIM2_CH1. */RCC_EnableAHB1Periphs(RCC_AHB1_PERIPH_GPIOA, true);RCC_ResetAHB1Periphs(RCC_AHB1_PERIPH_GPIOA);

初始化輸出引腳

GPIO_Init_Type gpio_init;gpio_init.Pins  = GPIO_PIN_0;gpio_init.PinMode  = GPIO_PinMode_AF_PushPull;gpio_init.Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &gpio_init);GPIO_PinAFConf(GPIOA, gpio_init.Pins, GPIO_AF_2);/* 根據data sheet, 配置復用模式2。 */

定時器時基配置

TIM_32B_Init_Type tim_init;tim_init.ClockFreqHz = BOARD_TIM_32B_FREQ;/* 因為 TIM_32B 在APB2總線上,所以BOARD_TIM_32B_FREQ的值實際為APB2總線時鐘頻率。*/tim_init.StepFreqHz = APP_TIM_UPDATE_PERIOD;  /* 定時器周期時長為定時器周期長度Period加1后除定時器頻率StepFreqHz。*/tim_init.Period = APP_TIM_UPDATE_PERIOD - 1u; /* 所以可得值為1,也即定時器周期時長為1s。 */tim_init.EnablePreloadPeriod = false; /* 不采用預裝載,修改ARR寄存器將立即生效。 */tim_init.PeriodMode = TIM_32B_PeriodMode_Continuous;/* 循環計時。 */tim_init.CountMode = TIM_32B_CountMode_Increase; /* 遞增計數。 */TIM_32B_Init(BOARD_TIM_32B_PORT, &tim_init);

配置輸出通道

TIM_32B_OutputCompareConf_Type tim_outcomp_conf;tim_outcomp_conf.ChannelValue = 0u;/* Compare value initialize with 0. */tim_outcomp_conf.EnableFastOutput = false; /* Disable fast output. */tim_outcomp_conf.EnablePreLoadChannelValue = false; /* Disable preload, put data immediately. */tim_outcomp_conf.RefOutMode = TIM_32B_OutputCompareRefOut_FallingEdgeOnMatch;/*Generate a falling edge when matched.*/tim_outcomp_conf.ClearRefOutOnExtTrigger = false; /* Ext signal won't clear output. */tim_outcomp_conf.PinPolarity = TIM_32B_PinPolarity_Rising;/* High polarity is valid. */TIM_32B_EnableOutputCompare(BOARD_TIM_32B_PORT, BOARD_TIM_32B_CHANNEL, &tim_outcomp_conf);

使能計數器

TIM_32B_Start(BOARD_TIM_32B_PORT);

main 函數

main 函數將輪詢鍵入,并按設定的占空比數組循環輸出不同的 PWM 波。

int main(void){    BOARD_Init();    printf("\r\ntim_32b_output_compare_pwm.\r\n");    /* Setup the timer. */    app_tim_32b_init();    printf("press any key to change the pwm ...\r\n");    while (1)    {        for (uint32_t i = 0; i < APP_TIM_32B_PWM_NUM; i++)        {            getchar();            TIM_32B_PutChannelValue(BOARD_TIM_32B_PORT, BOARD_TIM_32B_CHANNEL, app_tim_32_pwm_val[i]);/* Change duty cycle. */            printf("PWM value: %u\r\n", (unsigned)app_tim_32_pwm_val[i]);        }    }}
審核編輯:彭菁
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5336

    瀏覽量

    120230
  • 分頻器
    +關注

    關注

    43

    文章

    447

    瀏覽量

    49876
  • 定時器
    +關注

    關注

    23

    文章

    3246

    瀏覽量

    114719
  • MM32
    +關注

    關注

    1

    文章

    106

    瀏覽量

    756
收藏 人收藏

    評論

    相關推薦

    靈動微課堂(第208講)| MM32F0140學習筆記——TIM

    MM32F0140 學習筆記 - TIM本篇筆記主要探討 MM32F0140 定時器模塊的框圖結構、定時器提供的
    發表于 04-09 11:54

    上海靈動微電子M0內核32位單片機MM32F0140

    端口和多種外設。 MM32F0140系列包含1個12位的ADC和1個比較,1個16位通用定時器、1個32位通用定時器、3個16位基本定時器
    發表于 11-09 17:53 ?877次閱讀

    靈動微MM32F0140兼容替換華大單片機HC32L130

    靈動微MM32F0140使用高性能的Arm?Cortex?-M0為內核的32位MCU,工作頻率最高可達72兆赫茲,內置64KB Flash,8KB RAM高速存儲,豐富的增強型I/O端口和多種外設
    發表于 01-26 14:41 ?538次閱讀

    32位微控制MM32F0140數據手冊

    MM32F0140 微控制搭載 Arm? Cortex?-M0 內核,最高工作頻率可達 72MHz。內置 64KB 高速存儲,并集成了豐富的 I/O 端口和外設模塊。本產品包含
    發表于 11-21 15:14 ?1次下載

    AN0052從MM32F0130移植到MM32F0140(英文版)

    AN0052 從MM32F0130移植到MM32F0140(英文版)
    發表于 02-22 18:43 ?0次下載
    AN0052從<b class='flag-5'>MM32F</b>0130移植到<b class='flag-5'>MM32F0140</b>(英文版)

    MM32F0140 產品手冊(中文版)

    MM32F0140 產品手冊(中文版)
    發表于 02-22 18:45 ?0次下載
    <b class='flag-5'>MM32F0140</b> 產品手冊(中文版)

    MM32F0140 用戶手冊(英文版)

    MM32F0140 用戶手冊(英文版)
    發表于 02-22 18:46 ?0次下載
    <b class='flag-5'>MM32F0140</b> 用戶手冊(英文版)

    MM32F0140 勘誤表(中文版)

    MM32F0140 勘誤表(中文版)
    發表于 02-22 18:47 ?0次下載
    <b class='flag-5'>MM32F0140</b> 勘誤表(中文版)

    MM32F0140 勘誤表(英文版)

    MM32F0140 勘誤表(英文版)
    發表于 02-22 18:48 ?0次下載
    <b class='flag-5'>MM32F0140</b> 勘誤表(英文版)

    基于MM32F0140的UDS Bootloader學習筆記

    基于MM32F0140的UDS Bootloader學習筆記
    的頭像 發表于 10-30 17:11 ?766次閱讀
    基于<b class='flag-5'>MM32F0140</b>的UDS Bootloader學習筆記

    MM32F0140學習筆記——CRC

    MM32F0140學習筆記——CRC
    的頭像 發表于 11-10 18:27 ?607次閱讀
    <b class='flag-5'>MM32F0140</b>學習筆記——CRC

    MM32F0140 SPI學習筆記

    MM32F0140 SPI學習筆記
    的頭像 發表于 09-26 16:51 ?592次閱讀
    <b class='flag-5'>MM32F0140</b> SPI學習筆記

    MM32F0140 DMA學習筆記

    MM32F0140 DMA 學習筆記
    的頭像 發表于 09-18 16:57 ?703次閱讀
    <b class='flag-5'>MM32F0140</b> DMA學習筆記

    MM32F0140 UART學習筆記

    MM32F0140 UART學習筆記
    的頭像 發表于 09-26 16:45 ?755次閱讀
    <b class='flag-5'>MM32F0140</b> UART學習筆記

    MM32F0140 GPIO學習筆記

    MM32F0140 GPIO學習筆記
    的頭像 發表于 09-26 16:42 ?551次閱讀
    <b class='flag-5'>MM32F0140</b> GPIO學習筆記
    主站蜘蛛池模板: 内射人妻骚骚骚| 中文字幕专区高清在线观看 | qq快播电影网| 亚洲AV午夜福利精品香蕉麻豆| 国产高清超清在线播放| 在线a视频| 免费国产午夜理论不卡| 国产女人视频免费观看| 99日影院在线播放| 一个人在线观看免费中文www| 久久伊人网站| 国产免费久久精品国产传媒| 99热久久视频只有精品6| 欧美日韩在线成人看片a| 精品无人区麻豆乱码1区2| 中文字幕日本一区| 羞羞漫画免费漫画页面在线看漫画秋蝉| 国产中文字幕一区| 福利社影院| 99视频精品国产免费观看| 在线观看中文| 欧美日韩亚洲中字二区| 久久视频精品38在线播放| 99热久久这里只有精品视频| 亚洲视频一| 亚洲第一伊人| 久久青草热热在线精品| 国产亚洲欧美日韩综合综合二区| 一区二区三区四区国产| 亚洲不卡高清免v无码屋| 三级网址在线播放| 强开乳罩摸双乳吃奶视频| 麻豆成人久久精品二区三区网站 | 国产成人女人视频在线观看| 亚洲成人免费在线| 忘忧草在线社区WWW日本-韩国| 国产精品久久久久久亚洲影视| 亚洲在线成色综合网站| 午夜影院和视费x看| 午夜不卡久久精品无码免费| 宿舍BL 纯肉各种PLAY H|