91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

STM32定時器BURST傳輸介紹及示例

茶話MCU ? 來源:ST MCU 信息交流 ? 2020-05-14 09:15 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

STM32定時器應用中,我們有時希望基于某定時器事件同時對定時器的多個寄存器進行讀寫訪問。為此,STM32芯片設計了專門應對定時器的多寄存器訪問應用的DMA Burst傳輸。

高級定時器和部分通用定時器都支持針對定時器寄存器訪問的BURST傳輸。所謂定時器的BURST傳輸,就是指當產(chǎn)生某定時器事件時,可以產(chǎn)生多個DMA請求,并觸發(fā)多次DMA傳輸,訪問多個定時器寄存器實現(xiàn)從內(nèi)存到寄存器或從寄存器到內(nèi)存的數(shù)據(jù)傳輸。這里的定時器事件可以是更新事件、比較匹配事件、換相事件以及觸發(fā)事件。

我們知道,各定時器的所有寄存器都存放在片內(nèi)某一固定地址開始的連續(xù)空間內(nèi)。下圖是我從STM32G4系列定時器地址分布圖中截取的一部分,不同的定時器所擁有的寄存器個數(shù)可能有差異,但每個定時器的寄存器地址映射表的第一個寄存器一定是TIMx_CR1,所有寄存器在內(nèi)存空間以字對齊的方式按順序依次存放?!竞竺娑家訲IM2為例來說】

顯然,我們在做定時器的DMA BURST傳輸時,除了配置基本的源地址、目的地址等DMA傳輸所需的通用配置信息外,還得告知DMA BURST傳輸模塊每次傳輸時從哪個寄存器開始,連續(xù)訪問幾個寄存器,比方訪問上圖中圈出來的從TIMx_CCR1開始的連續(xù)4個寄存器。

這里有兩個專門用于定時器BURST傳輸?shù)募拇嫫?,分別是TIM2_DCR和TIM2_DMAR. 其中TIM2_DCR就是用來配置從哪個定時器寄存器開始訪問、連續(xù)訪問幾個寄存器的問題。【下面截圖來自STM32G4參考手冊】

DBA:被訪問的第一個定時器寄存器相對于定時器地址映射表中的TIMx_CR1的地址偏移量【偏移量從0開始計算】。

DBL:每組BURST訪問的寄存器個數(shù)【從0開始計算】。

仍然按照上面所說,訪問從TIM2_CCR1開始的連續(xù)4個寄存器,可得知TIM2_CCR1位于寄存器地址映射表中的第14號位置,則DBA= 14-1;用于BURST分組訪問的寄存器個數(shù)為4個,則DBL=4-1。

另外一個寄存器就是TIM2_DMAR。那它是干什么的呢?上面TIM2_DCR寄存器只是配置了被訪問的首個定時器寄存器地址相對于TIMx_CR1的地址偏移量和每組要訪問的寄存器個數(shù)。其中地址偏移量還只是個相對數(shù),DMA訪問最終是需要絕對地址的,而TIM2_DMAR就是來解決DMA訪問時所需的絕對地址的。

DMA訪問DMAR寄存器時,按照如下算式得到絕對地址實現(xiàn)對寄存器的逐個訪問。(TIM2_CR1address) + (DBA + DMA index)x 4

[Index是DMA Burst訪問時硬件自動生成的動態(tài)索引號,按0~DBL依次實現(xiàn)對多個寄存器的連續(xù)訪問而完成BUSRT傳輸】

也就是說,對于定時器DMA BURST傳輸,外設地址一定是TIM2_DMAR寄存器的地址【或許是源地址,或許是目的地址】,DMA通過訪問它,并根據(jù)上面算式實現(xiàn)對實際寄存器的訪問。所以TIM2_DMAR寄存器又可稱之為專門用于定時器DMA Burst傳輸?shù)奶摂M寄存器。

總的來講,我們在做基于定時器的DMA BURST傳輸時,除了使用正確的DMAR寄存器地址作為外設地址外,再就是配置好DCR寄存器中的DBA與DBL參數(shù),弄清從哪個寄存器開始訪問,訪問幾個寄存器。其它配置環(huán)節(jié)跟通用DMA傳輸配置一樣。

下面用個例子來演示相關用法。后面的驗證基于STM32G474 Nucleo板。使用TIM2輸出4路PWM,根據(jù)更新事件同步變化占空比,實現(xiàn)PWM占空比呈規(guī)律性的寬窄變化。即每次發(fā)生更新事件時,DMA到內(nèi)存區(qū)取走4個對應于4個通道的比較寄存器的值賦給對應的比較寄存器[CCR1/CCR2/CCR3,CCR4],如下圖所示,多組數(shù)據(jù)傳輸完畢后循環(huán)重來。

下面使用STM32CubeMx工具進行基本的初始化配置。

配置TIM2_CH1/CH2/CH3/CH4的PWM輸出:

對定時器時基單元進行配置:

對TIM2更新事件的DMA傳輸做基本配置:

這里配置為循環(huán)模式,具體應用時可以根據(jù)具有應用來選擇模式。將其它時鐘、GPIO配置完畢后即可生成初始化工程文件。

在工程里添加用戶應用代碼。關于定時器BURST傳輸有專門的庫函數(shù)可以給我們直接調(diào)用。它們分別是:

HAL_TIM_DMABurst_WriteStart() ----(1)

HAL_TIM_DMABurst_ReadStart() ----(2)

第一個函數(shù)用于將內(nèi)存數(shù)據(jù)以DMA 分組模式寫入寄存器的功能函數(shù);

第二個用于將多個寄存器內(nèi)容以DMA 分組模式讀取到內(nèi)存的功能函數(shù);

不過呢,如果我們簡單套用這兩個函數(shù)有些時候可能出問題,或者遇到障礙。我們不妨一起來看看。

顯然,我們要用到第一個函數(shù)。當我們進一步打開該函數(shù)時,發(fā)現(xiàn)它只是再調(diào)用了另外一個函數(shù)。

即它調(diào)用了HAL_TIM_DMABurst_MultiWriteStart()函數(shù)。這里就該函數(shù)用到的幾個變量一起看下。

htim:即指向定時器結(jié)構(gòu)體的地址,就不多說了。

BurstBaseAddress:前面提到過的第一個被訪問寄存器的地址偏移量,即給到DCR寄存器中DBA的值。這里第一個被訪問的是TIM2_CCR1,所在地址偏移量為13.

BurstRequestSrc:即觸發(fā)DMA Burst傳輸?shù)亩〞r器事件源。這里是更新事件。

BurstBuffer:這個是存放數(shù)據(jù)的內(nèi)存起始地址,如用戶定義的數(shù)組地址。

BurstLength:就是前面提到的對應于DCR寄存器中DBL的值,即每組Burst傳輸?shù)臄?shù)據(jù)個數(shù)。具體到這里DBL應該是4-1,即3.

上面是固件里對該變量的定義。數(shù)據(jù)為什么這樣定義,整整往左移了8位。看看上面DCR寄存器中DBL段所處位置就明白了。

最后看看緊隨其后的另外一個數(shù)據(jù)量 ((BurstLength) >> 8U) + 1U;結(jié)合前面BurstLength的數(shù)據(jù),該計算結(jié)果就是給到DMA的傳輸數(shù)據(jù)個數(shù),數(shù)值等于每組 Burst傳輸?shù)臄?shù)據(jù)個數(shù)。具體到這里就是4。換言之,若我們將每組Burst傳輸?shù)臄?shù)據(jù)個數(shù)設為6,則這里的值就是6。這就意味著,如果按照該函數(shù)的現(xiàn)有用法,無論發(fā)生多少次Busrt傳輸只能用到一組數(shù)據(jù)。如果我希望在Burst傳輸中使用到多組不同數(shù)據(jù)【可能部分不同或全部不同】,就像上面示例所期望的那樣,那怎么辦呢?

這時我們可以基于現(xiàn)有庫函數(shù),在BURST傳輸需要用到多組不同數(shù)據(jù)時,直接使用

HAL_TIM_DMABurst_MultiWriteStart()函數(shù)并將其最后一個表示DMA傳輸長度的那個變量做適當修改。

比方在應用中每組BURST傳輸m個數(shù)據(jù),一輪DMA傳輸過程中對應n個觸發(fā)事件,在不同的觸發(fā)時刻,每組傳輸?shù)臄?shù)據(jù)內(nèi)容并不全部相同,這時總的DMA傳輸數(shù)據(jù)個數(shù)就是m*n。具體到這里,我要用到11組不同的數(shù)據(jù),每組傳輸4個數(shù)據(jù),即一輪DMA傳輸用到4*11個數(shù)據(jù)。

好,到此基本介紹和分析都差不多了,再看看具體用戶代碼。代碼很簡單,基于STM32HAL庫的。

下面是用來調(diào)整不同時刻各個通道PWM占空比的內(nèi)存數(shù)據(jù),共11組。

要添加的用戶參考代碼都在下面,幾行代碼,應該說明白如畫。主要是那個關于定時器DMA分組傳輸?shù)哪莻€函數(shù),上面也已經(jīng)詳細解釋了。

最后看看運行后的演示結(jié)果。

示波器只接了2個通通,目的就是演示同時修改4個通道的占空比,實現(xiàn)pwm占空比由窄到寬的規(guī)律性變化。

到此,關于定時器DMA Burst傳輸?shù)慕榻B及示例就聊到這里。稍事小結(jié):

1、從定時器DMA Burst傳輸原理的理解上講,稍顯小復雜。需要我們對定時器相關原理和DMA基礎知識有較好的了解。在閱讀STM32參考手冊相關章節(jié)時,除了看正文部分外,還需細看TIMx_DMAR和TIMx_DCR寄存器的描述。但從實現(xiàn)代碼角度看,使用CubeMx和固件庫,其功能代碼還是很簡單的,將相關變量值對應地填進去即可。

2、STM32固件庫的有些例程或函數(shù)側(cè)重點在演示相應的功能或特性,但它不能包羅萬象或保證適用于任何場景。有時我們可以在基于現(xiàn)有函數(shù)的前提下適當?shù)刈鲂└膶懻{(diào)整,甚至完全重寫代碼以滿足實際需求。

3、在做定時器DMA Burst傳輸時,用來被成組訪問的定時器寄存器應該是同一定時器的而且是地址連續(xù)的寄存器,不可跳躍訪問。

4、上面的示例只是個示范,旨在了解該功能的用法和基本特性。實際應用中,往往還要涉及更多細節(jié),比方各個定時器事件的特性、寄存器的預裝功能的開或關、DMA相關知識等,最終結(jié)合實際需求加以靈活運用。

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

    關注

    31

    文章

    5609

    瀏覽量

    130016
  • STM32
    +關注

    關注

    2310

    文章

    11162

    瀏覽量

    373532
  • 定時器
    +關注

    關注

    23

    文章

    3368

    瀏覽量

    123717

原文標題:STM32定時器BURST傳輸介紹及示例

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    深入解析 LM555 定時器:特性、應用與設計要點

    深入解析 LM555 定時器:特性、應用與設計要點 一、引言 在電子工程師的工具箱中,定時器芯片是常用的基礎元件之一。而 TI 公司的 LM555 定時器,以其高穩(wěn)定性、多種工作模式和廣泛的應用范圍
    的頭像 發(fā)表于 02-10 15:35 ?252次閱讀

    CW32定時器及其中斷介紹

    以CW32L083為例,其定時器分為6種: 基本定時器:CW32L083 內(nèi)部集成 3 個基本定時器 (BTIM),每個 BTIM 完全獨立且功能完全相同,各包含一個 16bit 自動重裝
    發(fā)表于 01-14 06:42

    LAT1173高精度定時器的同步功能應用筆記

    STM32G474 所含的高精度定時器(HRTIMER)其實包含了多個定時器,多個定時器之間可以單獨工作,也可以進行同步,且高精度定時器還能
    發(fā)表于 01-11 17:32 ?0次下載

    LAT1183+高精度定時器中 single-shot 計數(shù)模式不工作應用筆記

    客戶使用 STM32G474 的高精度定時器,基于 CubeMX 進行外設配置與代碼生成,將某個子定時器的計數(shù)方式設置為 retriggerable single shot 方式,發(fā)現(xiàn)該子定時
    發(fā)表于 01-11 17:28 ?0次下載

    DS125DF1610:高速多通道重定時器的詳細解析與應用指南

    DS125DF1610:高速多通道重定時器的詳細解析與應用指南 在高速數(shù)據(jù)傳輸的領域中,重定時器扮演著至關重要的角色,它能夠有效增強信號的質(zhì)量和傳輸距離,確保數(shù)據(jù)的可靠
    的頭像 發(fā)表于 12-23 09:20 ?347次閱讀

    TMDS181x 6Gbps TMDS重定時器:高清視頻傳輸的理想之選

    TMDS181x 6Gbps TMDS重定時器:高清視頻傳輸的理想之選 在當今的高清視頻時代,數(shù)字視頻接口(DVI)和高清多媒體接口(HDMI)的應用愈發(fā)廣泛。工程師們在設計相關系統(tǒng)時,常常面臨著
    的頭像 發(fā)表于 12-19 16:30 ?699次閱讀

    CW32L010+定時器介紹

    這一篇介紹一下定時器的內(nèi)容,從了解CW定時器到功能實現(xiàn)。 一、定時器類型 CW32L010系列MCU配備了多種類型的定時器,包括: 通用和基
    發(fā)表于 12-01 07:53

    CW32定時器及中斷介紹

    以CW32L083為例,其定時器分為6種: 基本定時器:CW32L083 內(nèi)部集成 3 個基本定時器 (BTIM),每個 BTIM 完全獨立且功能完全相同,各包含一個 16bit 自動重裝
    發(fā)表于 12-01 07:08

    PWM、定時器、SysTick 區(qū)別及應用場景

    在單片機和嵌入式開發(fā)中,經(jīng)常會遇到PWM(脈寬調(diào)制)、定時器、SysTick(系統(tǒng)滴答定時器)這幾個詞。很多初學者容易把它們混為一談,以為都是“定時相關的東西”。其實,它們在本質(zhì)和應用上有明顯差別
    的頭像 發(fā)表于 11-17 10:53 ?529次閱讀
    PWM、<b class='flag-5'>定時器</b>、SysTick 區(qū)別及應用場景

    SysTick系統(tǒng)滴答定時器簡介

    SysTick—系統(tǒng)定時器是屬于CM33內(nèi)核中的一個外設,內(nèi)嵌在NVIC中。系統(tǒng)定時器是一個24bit的向下遞減的計數(shù),計數(shù)每計數(shù)一次的時間為 1/SYSCLK,一般我們設置系統(tǒng)時
    的頭像 發(fā)表于 09-23 09:50 ?1638次閱讀
    SysTick系統(tǒng)滴答<b class='flag-5'>定時器</b>簡介

    定時器同步之并行模式

    AT32F4xx定時器同步之并行模式 支持型號: AT32F 系列 主要使用外設: TIMER 獲取示例 1 快速使用方法 1.1 硬件資源 AT-START-F403A V1.0 實驗
    發(fā)表于 09-22 09:56

    大彩講堂:VisualHMI-LUA教程-定時器的使用指南

    定時器的使用
    的頭像 發(fā)表于 08-31 16:59 ?1160次閱讀
    大彩講堂:VisualHMI-LUA教程-<b class='flag-5'>定時器</b>的使用指南

    第二十章 TIM——基本定時器

    本章介紹了W55H32基本定時器TIM6、TIM7,16位向上計數(shù),含時鐘源、預分頻等,講解定時計算及初始化結(jié)構(gòu)體。
    的頭像 發(fā)表于 06-20 13:51 ?1162次閱讀
    第二十章 TIM——基本<b class='flag-5'>定時器</b>

    第十二章 SysTick——系統(tǒng)定時器

    本章介紹了W55MH32的SysTick系統(tǒng)定時器,它是24位遞減計數(shù),含4個寄存,可配置定時、中斷,用于產(chǎn)生時基 等。
    的頭像 發(fā)表于 05-22 17:16 ?1091次閱讀
    第十二章 SysTick——系統(tǒng)<b class='flag-5'>定時器</b>

    MCU定時器/計數(shù)

    RISC-V核低功耗MCU通過靈活的定時器架構(gòu)、低功耗模式適配及硬件級中斷優(yōu)化,在工業(yè)控制、智能家居等場景中實現(xiàn)高精度計時與能耗控制的協(xié)同設計,滿足復雜任務調(diào)度與實時響應的雙重需求?。 一、?硬件
    的頭像 發(fā)表于 04-27 13:54 ?790次閱讀