精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

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

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

經常有人想利用STM32定時器輸出一些任意波形來滿足應用需求。比方最近有人在某論壇發帖咨詢想使用STM32芯片TIM1實現如下4路特征的驅動波形。【下面波形只畫出了兩個周期】

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

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

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

我們這里假設定時器的計數器采用向上計數模式,每記800個時鐘單位為1個計數周期。【向上計數模式,ARR=800-1】

對于A路,當CCR=200和 CCR=700時發生輸出切換,這樣周期性的修改CCR的值,從而實現目前所期望的輸出波形。此時我們可以使用比較事件觸發DMA,通過DMA將下次要用來做比較的數據從內存傳到相應通道的CCR寄存器

同理,對于/A路,當CCR=300和 CCR=600時發生輸出切換。同樣開啟該通道的比較事件觸發DMA傳輸,實現CCR寄存器的數據循環更新。

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

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

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

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

從上面兩幅圖我們可以看出,TIM1的通道1/2/3都被配置為比較輸出切換模式。通道4被配置PWM2輸出模式。【另外,注意下通道1/2/3三個比較輸出通道的初始比較值。】

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

2、準備或編寫用戶應用代碼。

2.1 準備3個數組,對應存放用來動態更新3個比較輸出通道CCR值的數據。數據的擬定請結合上面的介紹和待實現的波形特征。

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 關閉通道1/2/3的比較寄存器的預裝功能,即修改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允許相應通道比較事件的DMA請求并開啟相應通道的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, 啟動計數器計數。

HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_4);

三、結果驗證。

經過上面的準備之后,編譯運行工程代碼即可看到開篇所期望的結果。【下面圖形是我使用MDK環境下的邏輯分析儀所得截圖,供參考】

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

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

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

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

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

    關注

    6032

    文章

    44525

    瀏覽量

    633261
  • STM32
    +關注

    關注

    2266

    文章

    10876

    瀏覽量

    354929
  • 定時器
    +關注

    關注

    23

    文章

    3241

    瀏覽量

    114516

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

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

收藏 人收藏

    評論

    相關推薦

    單片機定時器部分

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

    STM32單片機定時器介紹

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

    52單片機有幾個定時器?52單片機定時器1和52單片機定時器2程序對比

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

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

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

    關于MCS_51和MSP430單片機定時器的應用比較

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

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

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

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

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

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

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

    使用51單片機定時器和計數實現定時實例說明

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

    STM32F4單片機定時器實現互補輸出和死區剎車和工程文件免費下載

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

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

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

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

    配置 STM32 單片機定時器時,定時器的功能很好查,但是經常會忘一些東西的使能(比如說我經常忘記配置 IO 口的復用)。現將完整步驟記錄如下,以 F407
    發表于 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波形的時候,通常可以直接使用定時器提供的PWM模式。可以通過自動重裝載寄存
    發表于 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定時器單脈沖輸出模式
    發表于 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定時器的幾種輸出模式

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