女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

STM32定時(shí)器BURST傳輸介紹及示例

茶話MCU ? 來(lái)源:ST MCU 信息交流 ? 2020-05-14 09:15 ? 次閱讀

STM32定時(shí)器應(yīng)用中,我們有時(shí)希望基于某定時(shí)器事件同時(shí)對(duì)定時(shí)器的多個(gè)寄存器進(jìn)行讀寫(xiě)訪問(wèn)。為此,STM32芯片設(shè)計(jì)了專(zhuān)門(mén)應(yīng)對(duì)定時(shí)器的多寄存器訪問(wèn)應(yīng)用的DMA Burst傳輸。

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

我們知道,各定時(shí)器的所有寄存器都存放在片內(nèi)某一固定地址開(kāi)始的連續(xù)空間內(nèi)。下圖是我從STM32G4系列定時(shí)器地址分布圖中截取的一部分,不同的定時(shí)器所擁有的寄存器個(gè)數(shù)可能有差異,但每個(gè)定時(shí)器的寄存器地址映射表的第一個(gè)寄存器一定是TIMx_CR1,所有寄存器在內(nèi)存空間以字對(duì)齊的方式按順序依次存放。【后面都以TIM2為例來(lái)說(shuō)】

顯然,我們?cè)谧龆〞r(shí)器的DMA BURST傳輸時(shí),除了配置基本的源地址、目的地址等DMA傳輸所需的通用配置信息外,還得告知DMA BURST傳輸模塊每次傳輸時(shí)從哪個(gè)寄存器開(kāi)始,連續(xù)訪問(wèn)幾個(gè)寄存器,比方訪問(wèn)上圖中圈出來(lái)的從TIMx_CCR1開(kāi)始的連續(xù)4個(gè)寄存器。

這里有兩個(gè)專(zhuān)門(mén)用于定時(shí)器BURST傳輸?shù)募拇嫫鳎謩e是TIM2_DCR和TIM2_DMAR. 其中TIM2_DCR就是用來(lái)配置從哪個(gè)定時(shí)器寄存器開(kāi)始訪問(wèn)、連續(xù)訪問(wèn)幾個(gè)寄存器的問(wèn)題。【下面截圖來(lái)自STM32G4參考手冊(cè)】

DBA:被訪問(wèn)的第一個(gè)定時(shí)器寄存器相對(duì)于定時(shí)器地址映射表中的TIMx_CR1的地址偏移量【偏移量從0開(kāi)始計(jì)算】。

DBL:每組BURST訪問(wèn)的寄存器個(gè)數(shù)【從0開(kāi)始計(jì)算】。

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

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

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

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

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

總的來(lái)講,我們?cè)谧龌诙〞r(shí)器的DMA BURST傳輸時(shí),除了使用正確的DMAR寄存器地址作為外設(shè)地址外,再就是配置好DCR寄存器中的DBA與DBL參數(shù),弄清從哪個(gè)寄存器開(kāi)始訪問(wèn),訪問(wèn)幾個(gè)寄存器。其它配置環(huán)節(jié)跟通用DMA傳輸配置一樣。

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

下面使用STM32CubeMx工具進(jìn)行基本的初始化配置。

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

對(duì)定時(shí)器時(shí)基單元進(jìn)行配置:

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

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

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

HAL_TIM_DMABurst_WriteStart() ----(1)

HAL_TIM_DMABurst_ReadStart() ----(2)

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

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

不過(guò)呢,如果我們簡(jiǎn)單套用這兩個(gè)函數(shù)有些時(shí)候可能出問(wèn)題,或者遇到障礙。我們不妨一起來(lái)看看。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3、在做定時(shí)器DMA Burst傳輸時(shí),用來(lái)被成組訪問(wèn)的定時(shí)器寄存器應(yīng)該是同一定時(shí)器的而且是地址連續(xù)的寄存器,不可跳躍訪問(wèn)。

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

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

    關(guān)注

    31

    文章

    5423

    瀏覽量

    123418
  • STM32
    +關(guān)注

    關(guān)注

    2290

    文章

    11017

    瀏覽量

    362473
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3288

    瀏覽量

    117261

原文標(biāo)題:STM32定時(shí)器BURST傳輸介紹及示例

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

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

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

    MCU定時(shí)器/計(jì)數(shù)

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

    STM32Cube配置RTOS時(shí)定時(shí)器如何選擇?

    STM32Cube配置RTOS時(shí)定時(shí)器如何選擇
    發(fā)表于 03-07 08:47

    定時(shí)器已安排!開(kāi)發(fā)小白看過(guò)來(lái)~

    本文將為您詳細(xì)介紹Air201定時(shí)器的基本操作與設(shè)置,確保您輕松上手,包教包會(huì)! 在Air201模組搭載的LuatOS系統(tǒng)中,定時(shí)器(timer)是一項(xiàng)基礎(chǔ)且關(guān)鍵的服務(wù)。 它允許開(kāi)發(fā)者在特定的時(shí)間點(diǎn)
    的頭像 發(fā)表于 12-31 14:30 ?399次閱讀
    <b class='flag-5'>定時(shí)器</b>已安排!開(kāi)發(fā)小白看過(guò)來(lái)~

    定時(shí)器自動(dòng)控制開(kāi)關(guān)怎么設(shè)置

    定時(shí)器自動(dòng)控制開(kāi)關(guān)是一種常見(jiàn)的自動(dòng)化設(shè)備,廣泛應(yīng)用于家庭、工業(yè)、農(nóng)業(yè)等多個(gè)領(lǐng)域。通過(guò)定時(shí)器,用戶可以預(yù)設(shè)時(shí)間,讓設(shè)備在特定時(shí)間自動(dòng)開(kāi)啟或關(guān)閉,從而實(shí)現(xiàn)節(jié)能、提高效率和便利性。 一、定時(shí)器
    的頭像 發(fā)表于 09-19 16:19 ?3527次閱讀

    定時(shí)器的工作方式介紹

    定時(shí)器是計(jì)算機(jī)和嵌入式系統(tǒng)中常見(jiàn)的一種硬件模塊,用于實(shí)現(xiàn)定時(shí)和計(jì)數(shù)功能。定時(shí)器的工作方式通常由一組寄存來(lái)控制,這些寄存定義了
    的頭像 發(fā)表于 07-12 10:29 ?1721次閱讀

    定時(shí)器相關(guān)的寄存有哪些類(lèi)型

    在微控制編程中,定時(shí)器是一種非常常見(jiàn)的功能模塊,用于實(shí)現(xiàn)各種定時(shí)和計(jì)數(shù)功能。定時(shí)器的工作原理是通過(guò)內(nèi)部的計(jì)數(shù)來(lái)跟蹤時(shí)間的流逝,當(dāng)計(jì)數(shù)
    的頭像 發(fā)表于 07-12 10:25 ?1557次閱讀

    STM32G4系列芯片定時(shí)器的延時(shí)輸出問(wèn)題

    有人使用STM32G4系列芯片內(nèi)部的多個(gè)定時(shí)器做PWM輸出,輸出頻率一樣,占空比也一樣,均為50%。可是,當(dāng)他中途調(diào)整各個(gè)定時(shí)器以相同的工作參數(shù),即改變ARR的值和CCR值后,會(huì)發(fā)現(xiàn)TIM2和TIM5兩個(gè)
    的頭像 發(fā)表于 07-01 09:45 ?2507次閱讀
    <b class='flag-5'>STM32</b>G4系列芯片<b class='flag-5'>定時(shí)器</b>的延時(shí)輸出問(wèn)題

    鴻蒙開(kāi)發(fā)系統(tǒng)基礎(chǔ)能力:Timer定時(shí)器

    設(shè)置一個(gè)定時(shí)器,該定時(shí)器定時(shí)器到期后執(zhí)行一個(gè)函數(shù)。
    的頭像 發(fā)表于 06-28 11:33 ?1377次閱讀
    鴻蒙開(kāi)發(fā)系統(tǒng)基礎(chǔ)能力:Timer<b class='flag-5'>定時(shí)器</b>

    長(zhǎng)持續(xù)時(shí)間定時(shí)器電路圖 時(shí)間定時(shí)器的工作原理和功能

    時(shí)間定時(shí)器是一種用于計(jì)時(shí)和調(diào)度任務(wù)的工具。它允許我們?cè)谔囟ǖ臅r(shí)間間隔內(nèi)執(zhí)行某個(gè)任務(wù),或者在特定的時(shí)間點(diǎn)執(zhí)行某個(gè)操作。定時(shí)器在計(jì)算機(jī)系統(tǒng)中的應(yīng)用非常廣泛,從操作系統(tǒng)的任務(wù)調(diào)度、網(wǎng)絡(luò)傳輸的控制到實(shí)時(shí)系統(tǒng)
    的頭像 發(fā)表于 06-24 17:34 ?4144次閱讀
    長(zhǎng)持續(xù)時(shí)間<b class='flag-5'>定時(shí)器</b>電路圖 時(shí)間<b class='flag-5'>定時(shí)器</b>的工作原理和功能

    三菱plc如何顯示定時(shí)器時(shí)間

    菱PLC中,定時(shí)器的顯示和設(shè)置是非常重要的,下面將詳細(xì)介紹如何顯示和設(shè)置三菱PLC的定時(shí)器時(shí)間。 一、定時(shí)器的基本概念 定時(shí)器的作用:
    的頭像 發(fā)表于 06-20 11:10 ?3122次閱讀

    三菱plc定時(shí)器范圍怎么設(shè)置

    定時(shí)器的設(shè)置范圍直接影響到程序的執(zhí)行效率和控制精度。本文將詳細(xì)介紹三菱PLC定時(shí)器的設(shè)置范圍及其設(shè)置方法。 定時(shí)器的基本概念 定時(shí)器是一種
    的頭像 發(fā)表于 06-20 11:04 ?4383次閱讀

    三菱plc編程定時(shí)器編程咋輸入

    三菱PLC(Programmable Logic Controller,可編程邏輯控制)是一種廣泛應(yīng)用于工業(yè)自動(dòng)化控制領(lǐng)域的設(shè)備。在三菱PLC中,定時(shí)器是實(shí)現(xiàn)時(shí)間控制功能的重要組件。本文將詳細(xì)介紹
    的頭像 發(fā)表于 06-20 11:01 ?2668次閱讀

    PLC定時(shí)器的工作原理和應(yīng)用

    在工業(yè)自動(dòng)化控制系統(tǒng)中,PLC(Programmable Logic Controller,可編程邏輯控制)因其強(qiáng)大的控制功能和靈活性而得到廣泛應(yīng)用。作為PLC的重要組成部分,定時(shí)器在其中扮演著
    的頭像 發(fā)表于 06-18 11:55 ?4118次閱讀

    關(guān)于定時(shí)器觸發(fā)ADC連續(xù)采樣dma傳輸的疑問(wèn)求解?

    。 我想問(wèn)兩個(gè)問(wèn)題: 第一:我上述的采樣思路是否存在錯(cuò)誤,因?yàn)槲疫@幾天寫(xiě)該程序的時(shí)候,從會(huì)有各種bug導(dǎo)致ESP32-S2重啟(多數(shù)為開(kāi)門(mén)狗超時(shí)) 第二:stm32具有定時(shí)器觸發(fā)連續(xù)采樣的功能,我更想
    發(fā)表于 06-14 07:25