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

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

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

單片機 | STM32定時器比較輸出切換模式之應(yīng)用實例

茶話MCU ? 來源:YXQ ? 2019-06-04 14:08 ? 次閱讀

經(jīng)常有人想利用STM32定時器輸出一些任意波形來滿足應(yīng)用需求。比方最近有人在某論壇發(fā)帖咨詢想使用STM32芯片TIM1實現(xiàn)如下4路特征的驅(qū)動波形?!鞠旅娌ㄐ沃划嫵隽藘蓚€周期】

通過觀察不難看出,四路波形是有規(guī)律的周期性波形。不過除了/B路外,其它三路不太容易通過定時器PWM輸出模式來簡單實現(xiàn)。

我們知道,對于STM32常規(guī)定時器,其比較輸出功能較常用的輸出模式主要是PWM輸出模式和比較輸出切換模式。其中PWM輸出模式是指定時器輸出控制單元根據(jù)計數(shù)器的值與比較寄存器的值的比較結(jié)果來決定輸出電平的高低。而比較輸出切換模式是指定時器輸出控制單元在計數(shù)器的值與比較寄存器的值匹配相等時,做輸出電平的切換。即如果發(fā)生匹配之前是高電平的,發(fā)生匹配時輸出電平切換為低電平。反之亦然。

結(jié)合到本案例,對于A路、/A路及B路輸出波形我們就可以考慮使用比較輸出切換模式來實現(xiàn)。

我們這里假設(shè)定時器的計數(shù)器采用向上計數(shù)模式,每記800個時鐘單位為1個計數(shù)周期?!鞠蛏嫌嫈?shù)模式,ARR=800-1】

對于A路,當(dāng)CCR=200和 CCR=700時發(fā)生輸出切換,這樣周期性的修改CCR的值,從而實現(xiàn)目前所期望的輸出波形。此時我們可以使用比較事件觸發(fā)DMA,通過DMA將下次要用來做比較的數(shù)據(jù)從內(nèi)存?zhèn)鞯较鄳?yīng)通道的CCR寄存器。

同理,對于/A路,當(dāng)CCR=300和 CCR=600時發(fā)生輸出切換。同樣開啟該通道的比較事件觸發(fā)DMA傳輸,實現(xiàn)CCR寄存器的數(shù)據(jù)循環(huán)更新。

同樣,對于B路,參照上面的相同做法。當(dāng)CCR=100和CCR=400時做輸出切換。

至于最后的/B路,可以跟上面一樣采用比較輸出切換模式。不過,該通道直接使用PWM輸出模式更方便,具體到這里我們可以使用PWM2輸出模式,CCR=500.

下面是基于STM32F4系列芯片的TIM1來實現(xiàn)上述輸出波形的配置及相關(guān)用戶代碼介紹。其中,代碼是基于STM32CUBE庫。

一、基于上述分析,使用STM32CubeMx來完成基本的初始化配置。

從上面兩幅圖我們可以看出,TIM1的通道1/2/3都被配置為比較輸出切換模式。通道4被配置PWM2輸出模式?!玖硗猓⒁庀峦ǖ?/2/3三個比較輸出通道的初始比較值?!?/p>

前面說了,我們要利用各通道的比較事件觸發(fā)DMA做CCR寄存器的數(shù)據(jù)更新,所以需做基于各個通道比較事件的DMA配置。見下圖,各通道CCR寄存器的數(shù)據(jù)更新都使用循環(huán)模式。

2、準備或編寫用戶應(yīng)用代碼。

2.1 準備3個數(shù)組,對應(yīng)存放用來動態(tài)更新3個比較輸出通道CCR值的數(shù)據(jù)。數(shù)據(jù)的擬定請結(jié)合上面的介紹和待實現(xiàn)的波形特征。

uint16_t Data1_to_Comp[]={200,700}; //ch1

uint16_t Data2_to_Comp[]={600,300}; //ch2

uint16_t Data3_to_Comp[]={400,100}; //ch3

2.2 關(guān)閉通道1/2/3的比較寄存器的預(yù)裝功能,即修改CCR的值后立即生效,無須也不需等待更新事件。

__HAL_TIM_DISABLE_OCxPRELOAD(&htim1, TIM_CHANNEL_1);

__HAL_TIM_DISABLE_OCxPRELOAD(&htim1,TIM_CHANNEL_2);

__HAL_TIM_DISABLE_OCxPRELOAD(&htim1, TIM_CHANNEL_3);

2.3 開啟TIM1通道1/2/3的比較輸出功能。

TIM_CCxChannelCmd(TIM1,TIM_CHANNEL_1, TIM_CCx_ENABLE);

TIM_CCxChannelCmd(TIM1,TIM_CHANNEL_2, TIM_CCx_ENABLE);

TIM_CCxChannelCmd(TIM1,TIM_CHANNEL_3, TIM_CCx_ENABLE);

2.4允許相應(yīng)通道比較事件的DMA請求并開啟相應(yīng)通道的DMA傳輸功能。

hdma_tim1_ch1.State = HAL_DMA_STATE_READY;

HAL_DMA_Start_IT(&hdma_tim1_ch1,(uint32_t)Data1_to_Comp, (uint32_t)&TIM1->CCR1, 2);

__HAL_TIM_ENABLE_DMA(&htim1, TIM_DMA_CC1);

hdma_tim1_ch2.State= HAL_DMA_STATE_READY;

HAL_DMA_Start_IT(&hdma_tim1_ch2, (uint32_t)Data2_to_Comp, (uint32_t)&TIM1->CCR2,2);

__HAL_TIM_ENABLE_DMA(&htim1, TIM_DMA_CC2);

hdma_tim1_ch3.State= HAL_DMA_STATE_READY;

HAL_DMA_Start_IT(&hdma_tim1_ch3, (uint32_t)Data3_to_Comp,(uint32_t)&TIM1->CCR3, 2)

__HAL_TIM_ENABLE_DMA(&htim1, TIM_DMA_CC3);

2.5 使能TIM1通道4的PWM輸出功能并使能TIM1, 啟動計數(shù)器計數(shù)。

HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_4);

三、結(jié)果驗證。

經(jīng)過上面的準備之后,編譯運行工程代碼即可看到開篇所期望的結(jié)果?!鞠旅鎴D形是我使用MDK環(huán)境下的邏輯分析儀所得截圖,供參考】

好,到此上面案例就基本介紹完畢,全部配置及用戶代碼均貼出來了,供有需要的STM32用戶參考。

說實話,要徹底搞明白上述過程并實現(xiàn)它,需要對STM32定時器輸出比較切換模式原理、定時器的部分寄存器的預(yù)裝特性、比較事件、DMA傳輸有較為細致和深入的理解。不像使用PWM輸出模式給個CCR的值即可輸出PWM波形那么簡單。

最后補充兩點,上面波形的實現(xiàn)是基于STM32的TIMER1一個定時器來完成的。如果換成別的定時器一個定時器可能實現(xiàn)不了,可能要用到2個定時器。這時往往涉及到定時器的主從同步問題。其中的關(guān)鍵點就是要知道如何讓兩個定時器上下級聯(lián)并做同步啟動,實現(xiàn)上述輸出也是沒問題的。

還有一點,對于上述波形的實現(xiàn),如果我們使用STM32的高精度定時器實現(xiàn)起來就會更方便,STM32F334,STM32H7,STM32G4等系列都有高精度定時器。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機
    +關(guān)注

    關(guān)注

    6037

    文章

    44558

    瀏覽量

    635408
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10900

    瀏覽量

    356092
  • 定時器
    +關(guān)注

    關(guān)注

    23

    文章

    3248

    瀏覽量

    114833

原文標題:STM32定時器比較輸出切換模式之應(yīng)用實例

文章出處:【微信號:stmcu832,微信公眾號:茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    學(xué)單片機定時器部分

    帶您從零學(xué)單片機定時器部分 課程簡介1定時器/計數(shù)簡介2定時器/計數(shù)
    發(fā)表于 02-10 14:20 ?49次下載

    STM32單片機定時器介紹

    這節(jié)課給大家介紹一下 STM32 單片機定時器,STM32 單片機的定 時的功能是非常強大的
    發(fā)表于 11-11 17:17 ?22次下載

    52單片機有幾個定時器?52單片機定時器1和52單片機定時器2程序?qū)Ρ?/a>

    52單片機有幾個定時器?STC89C52RC其實是有三個定時器單片機,STC89C52RC共有3個定時器,分別是T0、T1、T2。而51
    發(fā)表于 11-10 14:30 ?3.5w次閱讀

    基于stm32單片機的通用定時器配置

    stm32單片機定時器資源相當(dāng)豐富,它的定時器分為高級控制定時器、通用定時器和基本
    發(fā)表于 04-12 07:54 ?3460次閱讀

    關(guān)于MCS_51和MSP430單片機定時器的應(yīng)用比較

    單片機產(chǎn)生 PWM 波作為實例, 對 MCS-51 單片機定時器 T0 和 MSP430 單片機的 Timer A 進行了
    發(fā)表于 04-25 17:04 ?8次下載
    關(guān)于MCS_51和MSP430<b class='flag-5'>單片機</b><b class='flag-5'>定時器</b>的應(yīng)用<b class='flag-5'>比較</b>

    51單片機的應(yīng)該如何使用定時器詳細資料和實例說明

    本文檔的主要內(nèi)容詳細介紹的是51單片機的應(yīng)該如何使用定時器詳細資料和實例說明。
    發(fā)表于 08-29 17:28 ?2次下載
    51<b class='flag-5'>單片機</b>的應(yīng)該如何使用<b class='flag-5'>定時器</b>詳細資料和<b class='flag-5'>實例</b>說明

    使用51單片機定時器進行計數(shù)實例的程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用51單片機定時器進行計數(shù)實例的程序免費下載。
    發(fā)表于 08-14 17:32 ?1次下載
    使用51<b class='flag-5'>單片機</b>的<b class='flag-5'>定時器</b>進行計數(shù)<b class='flag-5'>實例</b>的程序免費下載

    單片機定時器的工作模式TMOD設(shè)置資料說明

    單片機定時器工作模式TMOD設(shè)置TMOD:定時器/計數(shù)模式控制寄存
    發(fā)表于 07-19 17:38 ?1次下載
    <b class='flag-5'>單片機</b><b class='flag-5'>定時器</b>的工作<b class='flag-5'>模式</b>TMOD設(shè)置資料說明

    使用51單片機定時器和計數(shù)實現(xiàn)定時實例說明

    本文檔的主要內(nèi)容詳細介紹的是使用51單片機定時器和計數(shù)實現(xiàn)定時實例說明。
    發(fā)表于 07-12 17:39 ?7次下載
    使用51<b class='flag-5'>單片機</b><b class='flag-5'>定時器</b>和計數(shù)<b class='flag-5'>器</b>實現(xiàn)<b class='flag-5'>定時</b>的<b class='flag-5'>實例</b>說明

    STM32F4單片機定時器實現(xiàn)互補輸出和死區(qū)剎車和工程文件免費下載

    本文檔的主要內(nèi)容詳細介紹的是STM32F4單片機定時器實現(xiàn)互補輸出和死區(qū)剎車和工程文件免費下載。
    發(fā)表于 11-25 08:00 ?9次下載
    <b class='flag-5'>STM32</b>F4<b class='flag-5'>單片機</b><b class='flag-5'>定時器</b>實現(xiàn)互補<b class='flag-5'>輸出</b>和死區(qū)剎車和工程文件免費下載

    STM32單片機定時器1設(shè)置成為AB項編碼模式

    STM32單片機定時器1設(shè)置成為AB項編碼模式大家好·,我是DXZ,這篇博客是使用STM32
    發(fā)表于 11-18 15:21 ?21次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>單片機</b><b class='flag-5'>定時器</b>1設(shè)置成為AB項編碼<b class='flag-5'>器</b><b class='flag-5'>模式</b>

    STM32 單片機配置定時器輸出比較 + 中斷的步驟

    配置 STM32 單片機定時器時,定時器的功能很好查,但是經(jīng)常會忘一些東西的使能(比如說我經(jīng)常忘記配置 IO 口的復(fù)用)?,F(xiàn)將完整步驟記錄如下,以 F407
    發(fā)表于 11-19 09:51 ?7次下載
    <b class='flag-5'>STM32</b> <b class='flag-5'>單片機</b>配置<b class='flag-5'>定時器</b><b class='flag-5'>輸出</b><b class='flag-5'>比較</b> + 中斷的步驟

    STM32單片機一個定時器輸出不同頻率PWM波

    ??在使用STM32單片機輸出PWM波形的時候,通??梢灾苯邮褂?b class='flag-5'>定時器提供的PWM模式??梢酝ㄟ^自動重裝載寄存
    發(fā)表于 11-23 18:21 ?18次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>單片機</b>一個<b class='flag-5'>定時器</b><b class='flag-5'>輸出</b>不同頻率PWM波

    STM32定時器單脈沖輸出模式

    STM32定時器單脈沖輸出模式
    發(fā)表于 12-08 20:51 ?48次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>定時器</b>單脈沖<b class='flag-5'>輸出</b><b class='flag-5'>模式</b>

    STM32定時器的幾種輸出模式

    最近有接觸到通過可控硅的方式來控制交流風(fēng)機或者電烙鐵功率,STM32定時器輸出比較模式,剛好可以滿足這種需求,借此機會總結(jié)一下
    的頭像 發(fā)表于 01-12 16:49 ?5736次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>定時器</b>的幾種<b class='flag-5'>輸出</b><b class='flag-5'>模式</b>