在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

使用STM32任意定時器生成動態波形

云深之無跡 ? 來源:云深之無跡 ? 2023-08-29 09:46 ? 次閱讀

別問什么高級不高級了,輸出個波形而已,沒有啥難的。只是給出了一些細節,比如你想輸出自己定制的一些波形,該怎么辦?

ccc820c6-4594-11ee-a2ef-92fbcf53809c.png

這里就是使用了TIM1

cd164292-4594-11ee-a2ef-92fbcf53809c.png

可以在各種情況下輸出中斷

cd284244-4594-11ee-a2ef-92fbcf53809c.png

在NVIC里面可以看到

cd497ed2-4594-11ee-a2ef-92fbcf53809c.png

里面包含的寄存器就是這幾個

cd85b320-4594-11ee-a2ef-92fbcf53809c.png

可以按照72MHz來設置

STM32定時器之ARR,PSC倆兄弟,具體的可以看我以前的文章。

cda8b12c-4594-11ee-a2ef-92fbcf53809c.png

關于定時器的函數,開啟定時器需要自己寫

cdea760c-4594-11ee-a2ef-92fbcf53809c.png

ce0815d6-4594-11ee-a2ef-92fbcf53809c.png

TIM1是掛在APB2上面

ce20e8c2-4594-11ee-a2ef-92fbcf53809c.png

在中斷的文件里面最后顯示up這個中斷ce3c330c-4594-11ee-a2ef-92fbcf53809c.png

update

ce63bdc8-4594-11ee-a2ef-92fbcf53809c.png

表面是UP,但其實要送下下個函數里面看看到底是誰的中斷

這個函數的具體作用是判斷中斷是否正常,然后判斷產生的是哪一類定時器中斷(溢出中斷/PWM中斷.....),然后進入相應的中斷回調函數

ce822a10-4594-11ee-a2ef-92fbcf53809c.png

長這樣

ceb194a8-4594-11ee-a2ef-92fbcf53809c.png

找到觸發的中斷,然后就是觸發回調函數

cec7965e-4594-11ee-a2ef-92fbcf53809c.png

就是我搞黃了這個

cedb8e70-4594-11ee-a2ef-92fbcf53809c.png

弱定義的回調,要在這里自己去寫邏輯

cf01c504-4594-11ee-a2ef-92fbcf53809c.png

注意要打開定時器讓其工作,假如是中斷打開要開IT的函數

cf1fbd34-4594-11ee-a2ef-92fbcf53809c.png

這個可以重載定時器的值

顯示的__HAL_TIM_SET_AUTORELOAD宏定義是一個常見的用于設置STM32時鐘自動重載寄存器(ARR)的宏。它可以同時更新TIM_HandleTypeDef結構體中的Init.Period字段。

這個宏用于動態更改時鐘周期。如果想在中斷后更改時鐘周期為10ms,可以使用:

__HAL_TIM_SET_AUTORELOAD(&htim1, 100);  // 設置下一個周期為10ms

cf4c21bc-4594-11ee-a2ef-92fbcf53809c.png

修改的是定時器結構體里面的數據

原理就是你知道1s數一下,你就知道數10下就到時間了,也就是10次中斷,知道了數10s后,做些什么。。當定時器到達預設的周期,它將觸發一個中斷,然后你在中斷服務程序里面切換GPIO的狀態。

在運行時改變定時器的ARR(Auto-Reload Register)值在STM32(以及其他許多微控制器)中是一種常見的做法,用于動態地改變定時器周期或者波形的參數。 這樣做的幾個主要用途和意義如下: 動態波形調整:可以在運行時改變PWM或者其他類型波形的頻率或者占空比。 任務調度:如果使用定時器進行某種形式的多任務調度或者時間切片,動態地改變ARR值可以使你更靈活地控制任務的執行。 事件觸發:通過改變ARR值,可以在特定的時刻或者在某個事件發生后觸發定時器中斷。 精確計時:在需要非常精確控制時間的應用場合(例如,高精度測量或者通信協議),動態地改變ARR值可以在運行時微調定時器行為。 節能:在一些低功耗應用中,可以通過動態調整ARR值來改變微控制器的工作周期,以此來降低功耗。 模式切換:在復雜的系統中,你可能需要定時器在不同的操作模式之間切換。動態地改變ARR值使得這種切換成為可能。 應對不確定性:在某些場合,事先可能不知道定時器需要運行多長時間。動態地設置ARR值允許程序在運行時根據實際需要來配置定時器。 波形由多個高低電平組成,每個電平的持續時間都是通過ARR值來設置的。 這里主要是定時器周期的動態改變。

對定時器周期公式的理解:

T=(arr+1)*(PSC+1)/Tck 其中TCK為時鐘頻率,PSC為時鐘預分頻系數,arr為自動重裝載值。

f=Tck/(psc+1)*(arr+1)

Tck/(psc+1)即為時鐘頻率,1/f為機器周期,乘以(arr+1)即可得出定時器周期。

也就是說這個周期,就是你定的時間,到了什么時間干什么事情的時間。設置好以后,下一次中斷是什么時候,是某某時間,也就是你中斷出場的時候。

cf816d72-4594-11ee-a2ef-92fbcf53809c.png

if (htim->Instance == TIM1): 這個檢查用于確定哪個定時器觸發了這個回調。因為你可能有多個定時器在你的程序中,這個檢查確保只有TIM1的事件會執行下面的代碼。

這個時候寫一下代碼,可以把要生成的東西設置一個全局的變量,一開始為0,開始運行,比如你現在是高電平,接著你就要設置下次的觸發時間,此時是高電平,下次是什么時候?自己數吧

cf92dd6e-4594-11ee-a2ef-92fbcf53809c.jpg

其實此時對于使用定時器生成波形來講,那就OK了,在while里面都沒有東西。

while (1)
{
    if (some_condition)
    {
        // 執行某些動作
    }
}

檢查變量干什么事情

while (1)
{
    // 低優先級任務
}

緊急的在回調,剩下的就在這里了

一般我們都是生成方波為主,來看看方波的優點。

簡單性和易于生成

方波是最簡單、最易于生成和分析的波形之一。只需要一個簡單的數字邏輯電路即可生成方波。

時間域和頻率域的特性

方波包含了多個奇次諧波,這一點在頻譜分析和信號處理中可能是有用的。

適用于數字和邏輯應用

方波是數字電子學和邏輯電路的基礎,用于表示二進制信息(0和1)。

高能量效率

由于方波在其周期內只有兩個狀態(通常是高和低),因此它能更有效地傳輸能量。

易于檢測和觸發

方波的尖銳邊緣使得它很容易被用作觸發信號,在定時和同步應用中很有用。

易于調制和解調

方波通常更容易用于某些類型的數字調制方案,如頻率偏移鍵控(FSK)和相位偏移鍵控(PSK)。

適用于脈沖寬度調制(PWM)

方波是PWM(脈沖寬度調制)的基礎,這是一種常用于控制電機、LED亮度和其他應用的技術。

高信噪比

在某些應用中,例如數字通信,方波由于其決定性的高和低狀態通常有更高的信噪比。

那我們就來把這個生成的代碼框架完善一下。

使用一個簡單的狀態機邏輯,以及一個數組來保存波形的各個部分(高電平/低電平以及持續時間)。

cfad23ea-4594-11ee-a2ef-92fbcf53809c.png

可以考慮設計成這樣,我們感興趣是就是高低電平和相應的時間長度

cfeeaa4a-4594-11ee-a2ef-92fbcf53809c.png

使用 #define WAVEFORM_SEGMENTS (sizeof(custom_waveform) / sizeof(WaveformSegment)) 是一種方便的方式來計算波形分段數組的元素數量。

在這種情況下,custom_waveform 應該是一個 WaveformSegment 類型的數組。這種方法的優點是它在編譯時完成計算,不需要運行時計算。

d0224b52-4594-11ee-a2ef-92fbcf53809c.png

在這里,waveform_enabled 是一個標志,用于確定是否應該生成波形。這個標志可能會在其他代碼段,比如一個按鍵中斷服務例程中被設置。 current_segment 是一個靜態局部變量,用于跟蹤當前波形的哪一部分(或“段”)正在生成。每當這個回調函數被觸發時,它會: 檢查 waveform_enabled 是否被設置以及是否使用了正確的定時器實例。 如果是,則進一步檢查 current_segment 是否小于波形分段數組的長度(由 WAVEFORM_SEGMENTS 定義)。 如果也是,則根據 custom_waveform[current_segment] 的內容設置GPIO的電平并更新定時器的自動重載值。 這種方式是非常靈活和可擴展的。可以很容易地更改 custom_waveform 數組來生成不同的波形,或者動態地更改它來適應不同的應用場景。 由于使用了靜態局部變量 current_segment,這個函數在多線程環境下可能不是線程安全的。如果在其他地方也訪問或修改了這些變量,可能需要添加額外的同步機制。 此外,如果波形生成結束后需要執行其他操作(如通知其他任務或更改硬件狀態),則可以在代碼的相應部分添加這些操作。在這里,一旦波形生成結束,waveform_enabled 被設置為0,以停止波形的進一步生成,直到下一次明確的觸發。

d0558530-4594-11ee-a2ef-92fbcf53809c.png

開啟輸出

d0726f06-4594-11ee-a2ef-92fbcf53809c.png

然后這樣使用

對于一個大的程序框架來說,它還是不夠優雅,讓我來繼續的注入能量、

d098e730-4594-11ee-a2ef-92fbcf53809c.png

首先寫一個頭文件

這段代碼定義了一些靜態變量,這些變量在整個C文件(或作用域)內都是可用的,但不能在其他C文件中訪問。這些變量通常用于在不同的函數之間共享狀態或數據。 htim_instance: 用于存儲與波形生成相關聯的TIM_HandleTypeDef結構的指針。 GPIOx_instance: 用于存儲與波形生成相關聯的GPIO端口的指針。 GPIO_Pin_instance: 用于存儲與波形生成相關聯的GPIO端口的引腳號。 current_pattern: 一個指向波形段(WaveformSegment)數組的指針,用于表示當前的波形模式。 pattern_size: 用于存儲當前波形模式(即current_pattern數組)的大小。 current_segment: 一個用于跟蹤當前波形段的索引的變量。 waveform_enabled: 一個標志,用于指示是否應該生成波形。 這些變量主要用于在回調函數(如HAL_TIM_PeriodElapsedCallback)和可能的其他設置或控制函數之間共享狀態。

d0a85f58-4594-11ee-a2ef-92fbcf53809c.png

可以這樣使用,然后,在HAL_TIM_PeriodElapsedCallback中,你就可以使用這些變量來實現波形的生成,而不需要硬編碼或傳遞大量參數。

d0cfe672-4594-11ee-a2ef-92fbcf53809c.png

回調是最終的執行家,跑不了的

d0fdb23c-4594-11ee-a2ef-92fbcf53809c.png

別的一些函數

d12054f4-4594-11ee-a2ef-92fbcf53809c.png

使用的時候就生成一個波形的參數包

d14759c8-4594-11ee-a2ef-92fbcf53809c.png

然后開啟和關閉就好了

我后面會寫個庫,扔Github上面。

審核編輯:湯梓紅

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

    關注

    6039

    文章

    44583

    瀏覽量

    636530
  • 寄存器
    +關注

    關注

    31

    文章

    5357

    瀏覽量

    120697
  • STM32
    +關注

    關注

    2270

    文章

    10910

    瀏覽量

    356623
  • 定時器
    +關注

    關注

    23

    文章

    3251

    瀏覽量

    115025
  • 波形
    +關注

    關注

    3

    文章

    379

    瀏覽量

    31596

原文標題:使用STM32任意定時器生成動態波形

文章出處:【微信號:TT1827652464,微信公眾號:云深之無跡】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    泰克推出AFG2021任意波形/函數產生

    Tektronix日前宣佈推出AFG2021任意波形/函數產生。這款以入門級價格提供高效能訊號產生功能的儀器,外形輕巧,容易操作,最適合成本導向的教育界和制造業應用,為他們提供可滿足不
    發表于 08-14 10:33 ?1374次閱讀

    STM32CubeMx入門教程(3):定時器的使用

    導語“ 使用STM32CubeMx 生成初始化定時器代碼,實現定時器特定定時
    發表于 07-11 15:22 ?4163次閱讀
    <b class='flag-5'>STM32</b>CubeMx入門教程(3):<b class='flag-5'>定時器</b>的使用

    求購AWG510、AWG520任意波形發生

    求購AWG510、AWG520任意波形發生AWG510、AWG520任意波形發生|函數發生
    發表于 07-03 10:04

    評估Si5342任意頻率,任意輸出,抖動衰減時鐘倍頻SI5342-EVB

    SI5342-EVB,評估板用于評估Si5342任意頻率,任意輸出,抖動衰減時鐘倍頻。 Si5342結合了第四代DSPLL和Multisynth技術,可為需要最高抖動性能的應用生成
    發表于 02-27 11:28

    回收泰克AWG5202任意波形發生

    回收泰克AWG5202任意波形發生大量長期回收Tektronix AWG5202任意波形發生
    發表于 06-29 15:35

    泰克AWG5204回收 收購AWG5204任意波形發生

    泰克AWG5204回收 收購AWG5204任意波形發生全國長期回收Tektronix AWG5204任意波形發生
    發表于 06-29 15:37

    Tektronix 泰克AFG3102任意 波形發生 收購+出售

    Tektronix 泰克AFG3102任意 波形發生 收購+出售特點與優點   ·帶寬:25MHz、100MHz或240MHz正弦波形   ·任意
    發表于 03-02 15:43

    基于CV1任意波形發生的整體設計

    基于CV1任意波形發生的整體設計 Integrated Design of Arbitrary Waveform Generator Based on CV 摘要:利用LabWindows/ CVI虛擬測控軟件具有的超強實時
    發表于 01-11 12:07 ?31次下載

    STM32定時器-基本定時器

    目錄定時器分類基本定時器功能框圖講解基本定時器功能時鐘源計數時鐘計數自動重裝載寄存
    發表于 11-23 18:21 ?31次下載
    <b class='flag-5'>STM32</b><b class='flag-5'>定時器</b>-基本<b class='flag-5'>定時器</b>

    STM32——高級定時器、通用定時器、基本定時器的區別

    STM32——高級定時器、通用定時器、基本定時器的區別
    發表于 11-26 15:21 ?110次下載
    <b class='flag-5'>STM32</b>——高級<b class='flag-5'>定時器</b>、通用<b class='flag-5'>定時器</b>、基本<b class='flag-5'>定時器</b>的區別

    ???STM32之玩轉定時器TIMX???

    TIM8是STM32的高級定時器,TIM6,TIM7為基本定時器,其他為通用定時器基本定時器TIM6和TIM7
    發表于 12-28 19:08 ?18次下載
    ???<b class='flag-5'>STM32</b>之玩轉<b class='flag-5'>定時器</b>TIMX???

    如何使用MAXQ微控制上的定時器B生成PWM波形

    MAXQ微控制有三種類型的定時器定時器0、定時器1和定時器2。定時器B是
    的頭像 發表于 02-20 13:44 ?797次閱讀
    如何使用MAXQ微控制<b class='flag-5'>器</b>上的<b class='flag-5'>定時器</b>B<b class='flag-5'>生成</b>PWM<b class='flag-5'>波形</b>

    AWG510任意波形發生參數AWG510

    泰克AWG510任意波形發生 AWG510 是泰克的任意波形發生
    的頭像 發表于 07-12 11:28 ?517次閱讀
    AWG510<b class='flag-5'>任意</b><b class='flag-5'>波形</b>發生<b class='flag-5'>器</b>參數AWG510

    Tektronix AWG610任意波形發生AWG510/AWG710

    泰克AWG610任意波形發生 AWG610 是泰克的任意波形發生
    的頭像 發表于 07-12 14:01 ?565次閱讀
    Tektronix AWG610<b class='flag-5'>任意</b><b class='flag-5'>波形</b>發生<b class='flag-5'>器</b>AWG510/AWG710

    任意波形發生波形生成方法

    任意波形發生(Arbitrary Waveform Generator,簡稱AWG)作為電子測試領域的重要工具,能夠生成各種復雜波形信號,
    的頭像 發表于 05-29 17:13 ?953次閱讀
    主站蜘蛛池模板: 国产一级特黄a大片免费| 久久噜噜噜久久亚洲va久| 国产成人精品日本亚洲语音1| 亚洲福利一区二区| 日韩在线视频www色| 男男浪荡双性受hplay| 国产欧美另类第一页| 制服丝袜中文字幕第一页| 五月婷婷综合基地| 深爱五月网| 欧美一区二区三区精品| 欧美三级在线免费观看| 加勒比色综合| 俺去久久| 天天槽天天槽天天槽| 加勒比一木道|视频在线看| 黄频网| 欧美成人a视频| 婷婷久| 欧美.成人.综合在线| 成人a大片高清在线观看| 天天干天天日天天射天天操毛片| 狠狠躁夜夜躁人人爽天天天天| 激情五月深爱五月| 永久免费看| 加勒比一木道|视频在线看| 视频在线免费观看| 加勒比一区二区| 色综合久久综合欧美综合图片| 欧美mv日韩mv国产mv网站| 高清毛片aaaaaaaaa片| 天天操天天操天天操天天操| 在线观看免费午夜大片| 99插插| 性做久久久久久久| 婷婷精品视频| 韩国xxxxx视频在线| 国产一区二卡三区四区| 夜夜爽天天爽| 亚洲天天做夜夜做天天欢人人| 久久作爱视频|