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

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

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

STM32的DAC加TIMER應(yīng)用演示

麥辣雞腿堡 ? 來(lái)源:茶話MCU ? 作者:茶話MCU ? 2023-07-17 10:27 ? 次閱讀

現(xiàn)在有如下圖所示的這樣一個(gè)需求,希望使用STM32芯片來(lái)實(shí)現(xiàn)。

橫軸表示時(shí)間,縱軸表示電壓【3.3v為限】,不同時(shí)刻的電壓輸出不一樣、持續(xù)時(shí)間也不盡相同。

圖片

此問(wèn)題源于某高校STM32學(xué)習(xí)時(shí)的習(xí)題,這里拿出來(lái)一起交流探討下。方法不是唯一的,尤其基于不同STM32系列。這里盡量使用通用、常規(guī)的方法,算是拋磚引玉。

顯然,我們可以考慮使用STM32的DACTIMER以及片內(nèi)其它資源加以實(shí)現(xiàn)。

對(duì)于這個(gè)實(shí)現(xiàn)我們可以分兩種方式完成,每一種方式同時(shí)也體現(xiàn)不同難度。

我們可以考慮下面兩種應(yīng)用情形:

第一種方式:MCU除了做這一件事外,還做點(diǎn)別的,比方做按鍵響應(yīng)、ADC采樣這些,整體上沒(méi)有太復(fù)雜的功能和要求?!局袛喾绞健?/p>

第二種方式:MCU的主要工作是別的而不再是這個(gè)輸出了,要求該輸出自啟動(dòng)后不再需要CPU的參與,即由相應(yīng)外設(shè)自行完成?!?a href="http://srfitnesspt.com/tags/dma/" target="_blank">DMA方式】

對(duì)于第一種實(shí)現(xiàn)方式,我們可以用個(gè)TIMER作為時(shí)基,每到適當(dāng)?shù)挠?jì)時(shí)點(diǎn)就通過(guò)TIMER中斷及時(shí)修改DAC的輸出值而改變輸出電壓。至于對(duì)DAC輸出寄存器賦值,可以直接在定時(shí)器中斷里操作,也可以先在定時(shí)器中斷里設(shè)置標(biāo)志位后在主循環(huán)里實(shí)現(xiàn)修改,可以靈活決定。顯然,這樣操作也不會(huì)影響其它按鍵處理、ADC處理等。該方式的實(shí)現(xiàn)就介紹到這里,重點(diǎn)聊聊第二種方式。

對(duì)于第二種方式,顯然不能使用中斷,這里就得DMA出場(chǎng)了。因?yàn)槿思乙笤撦敵鲎詥?dòng)后不再讓CPU參與。這里有兩個(gè)量都是變的,DAC的輸出值在變,不同DAC輸出所持續(xù)的時(shí)間也在變。這兩個(gè)變量都需要DMA幫忙完成,顯然DAC的輸出需要使用TIMER事件來(lái)觸發(fā)DMA,這里使用更新事件比較合理。那么,TIMER自身的數(shù)據(jù)更新又如何實(shí)現(xiàn)呢?我們可以考慮使用TIMER的比較事件來(lái)觸發(fā)另外的DMA請(qǐng)求以更新自己。

下面我使用STM32F4系列芯片的TIM1及DAC來(lái)實(shí)現(xiàn)第二種需求。【當(dāng)然,使用STM32其它系列,比如G4,H5,H7,U5等都可以】

TIM1的更新事件觸發(fā)DMA,修改DAC的輸出寄存器的值以改變輸出。另外,選擇TIM1通道1的比較事件觸發(fā)DMA【哪個(gè)通道比較事件不重要,能觸發(fā)DMA即可】,使用TIMER DMA Burst傳輸同時(shí)修改TIM1的ARR,RCR,CCR1三個(gè)寄存器的值,此處RCR始終用0值。因?yàn)檫@里要修改CCR1的值,RCR夾在ARR和CCR1寄存器中間,做Burst傳輸時(shí)RCR必須每次被使用?!具@里CCR1的值其實(shí)也可以固定不變。我是每次取ARR的中間值作為CCR1的值,不是必須的。主要是考慮到有些應(yīng)用場(chǎng)合可能需要?jiǎng)討B(tài)修改CCR值,在此特意拓展下TIMER Burst傳輸?shù)膽?yīng)用介紹。】

下面是關(guān)于TIM1時(shí)基參數(shù)的初始配置,其中ARR和CCR1值我是隨便設(shè)定的,算是個(gè)過(guò)渡值,目的就是產(chǎn)生更新事件和比較事件,之后都會(huì)按照代碼中預(yù)定的數(shù)據(jù)運(yùn)行。

圖片

下面是有關(guān)TIM1的基于更新事件和通道1比較事件的DMA配置。

圖片

下面截圖是關(guān)于DAC的CubeMx配置,比較簡(jiǎn)單,開(kāi)啟其輸出功能即可。

圖片

下面截圖里的數(shù)組DacOutData[10]存放不同時(shí)刻DAC輸出所對(duì)應(yīng)的數(shù)據(jù)。數(shù)組PulseData3[30]存放10次DMA Burst 傳輸用到的數(shù)據(jù)。顯然這兩個(gè)數(shù)組數(shù)據(jù)在使用時(shí)間上要匹配,否則輸出波形對(duì)不了。

圖片

下面是具體的用戶代碼,使用CubeMx進(jìn)行配置和STM32 HAL庫(kù)函數(shù),以源碼形式放在下面,供有需要的參考、使用。

HAL_DMA_Start_IT(&hdma_tim1_up, (uint32_t) DacOutData, 
 (uint32_t)&hdac.Instance- >DHR12R1, 10);


  __HAL_TIM_CLEAR_FLAG(&htim1,TIM_FLAG_UPDATE);
  __HAL_TIM_CLEAR_FLAG(&htim1,TIM_DMA_CC1);


  HAL_TIM_DMABurst_MultiWriteStart(&htim1, TIM_DMABASE_ARR, 
  TIM_DMA_CC1,(uint32_t *)PulseData3,   
  TIM_DMABURSTLENGTH_3TRANSFERS,10*3);


  __HAL_TIM_ENABLE_DMA(&htim1, TIM_DMA_UPDATE);


  HAL_DAC_Start(&hdac,  DAC_CHANNEL_1);


 __HAL_TIM_ENABLE(&htim1);
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    16813

    瀏覽量

    349498
  • dac
    dac
    +關(guān)注

    關(guān)注

    43

    文章

    2251

    瀏覽量

    190658
  • STM32
    +關(guān)注

    關(guān)注

    2263

    文章

    10849

    瀏覽量

    353905
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32 TIMER+DMA輸出PWM異常案例的問(wèn)題解析

    有人使用STM32U575的TIMER加上DMA做PWM輸出。具體就是利用某TIMER的一個(gè)通道的比較事件觸發(fā)DMA,通過(guò)DMA修改CCR值來(lái)實(shí)現(xiàn)指定占空比的PWM輸出。
    的頭像 發(fā)表于 09-28 09:04 ?7417次閱讀
    <b class='flag-5'>STM32</b> <b class='flag-5'>TIMER</b>+DMA輸出PWM異常案例的問(wèn)題解析

    DAC輸出在高阻抗模式中被電的問(wèn)題分析

    該篇將分析對(duì)象限定為一個(gè)DAC,其中的輸出緩沖器在正常模式下被電:零量程或中量程。文章將分析一下DAC輸出在高阻抗模式中被電的情況。同時(shí)提出一個(gè)針對(duì)
    的頭像 發(fā)表于 10-23 15:11 ?4998次閱讀
    <b class='flag-5'>DAC</b>輸出在高阻抗模式中被<b class='flag-5'>加</b>電的問(wèn)題分析

    STM32 系列 DAC的介紹與使用

    本文我們就來(lái)好好復(fù)習(xí)下 STM32DAC ,從應(yīng)用角度講講如何快速使用起來(lái)。
    的頭像 發(fā)表于 05-29 09:59 ?4648次閱讀
    <b class='flag-5'>STM32</b> 系列 <b class='flag-5'>DAC</b>的介紹與使用

    CubeMX配置stm32DAC

    我們使用 STM32CubeMX 軟件進(jìn)行配置。DAC 的配置是相對(duì)很簡(jiǎn)單的,如下圖所示。
    的頭像 發(fā)表于 06-12 09:18 ?2764次閱讀
    CubeMX配置<b class='flag-5'>stm32</b>的<b class='flag-5'>DAC</b>

    STM32 DAC+TIMER+DMA應(yīng)用演示

    現(xiàn)在有如下圖所示的這樣一個(gè)需求,希望使用STM32芯片來(lái)實(shí)現(xiàn)。
    發(fā)表于 07-12 09:21 ?1403次閱讀
    <b class='flag-5'>STM32</b> <b class='flag-5'>DAC+TIMER</b>+DMA應(yīng)用<b class='flag-5'>演示</b>

    STM32系列 DAC 的基本使用

    前言 一、STM32DAC 的系列 二、DAC 基礎(chǔ)簡(jiǎn)介 2.1 DAC輸出引腳 2.2 引腳配置 2.3 DAC輸出電壓計(jì)算方法 三
    的頭像 發(fā)表于 09-11 15:21 ?2493次閱讀
    <b class='flag-5'>STM32</b>系列 <b class='flag-5'>DAC</b> 的基本使用

    STM32U5系列TIMER+DMA+DAC應(yīng)用演示

    有人使用STM32U575芯片的DAC功能。他希望使用TIMER事件觸發(fā)DMA,并通過(guò)DMA傳輸內(nèi)存數(shù)據(jù)到DAC輸出寄存器,進(jìn)而產(chǎn)生相應(yīng)的DAC
    的頭像 發(fā)表于 01-24 09:10 ?1496次閱讀
    <b class='flag-5'>STM32</b>U5系列<b class='flag-5'>TIMER+DMA+DAC</b>應(yīng)用<b class='flag-5'>演示</b>

    STM32L431 ADC to DAC時(shí)間久了時(shí)鐘不同步是哪里的問(wèn)題?

    我在用STM32L431做一個(gè)音頻相關(guān)的項(xiàng)目。 我是用Timer6 設(shè)置32Khz ADC 采樣,然后把采樣點(diǎn)降采樣到4Khz后,然后輸出到DAC同步輸出。DAC
    發(fā)表于 03-26 06:32

    STM32_ DAC輸出電壓

    STM32_DAC輸出電壓
    的頭像 發(fā)表于 04-08 10:05 ?1w次閱讀
    <b class='flag-5'>STM32</b>_ <b class='flag-5'>DAC</b>輸出電壓

    2021-06-05 GD32F405VG 調(diào)試過(guò)程關(guān)于DAC/DMA/TIMER等問(wèn)題的解決

    GD32F405VG 調(diào)試過(guò)程關(guān)于DAC/DMA/TIMER等問(wèn)題的解決GD32F405與STM32F405外設(shè)完全兼容,外設(shè)的地址映射也是完全兼容。ST的標(biāo)準(zhǔn)庫(kù)中的名字與GD32的外設(shè)名字不一致
    發(fā)表于 12-03 09:06 ?13次下載
    2021-06-05 GD32F405VG 調(diào)試過(guò)程關(guān)于<b class='flag-5'>DAC</b>/DMA/<b class='flag-5'>TIMER</b>等問(wèn)題的解決

    STM32 DAC的配置與使用

    STM32DAC 模塊(數(shù)字/模擬轉(zhuǎn)換模塊)是 12 位數(shù)字輸入,電壓輸出型的DAC。
    發(fā)表于 02-08 16:30 ?28次下載
    <b class='flag-5'>STM32</b> <b class='flag-5'>DAC</b>的配置與使用

    STM32 系列DAC的基本使用

    一、STM32DAC 的系列 目前博主產(chǎn)品使用的芯片為 STM32L051C8 系列,本來(lái)還想著直接CubeMX 設(shè)置一下,直接測(cè)試,才發(fā)現(xiàn)這個(gè)片片根本沒(méi)有 DAC = =! 好
    的頭像 發(fā)表于 06-22 10:48 ?2025次閱讀
    <b class='flag-5'>STM32</b> 系列<b class='flag-5'>DAC</b>的基本使用

    STM32 DAC+TIMER+DMA的實(shí)現(xiàn)

    ,這里拿出來(lái)一起交流探討下。方法不是唯一的,尤其基于不同STM32系列。這里盡量使用通用、常規(guī)的方法,算是拋磚引玉。 顯然,我們可以考慮使用STM32DAC
    的頭像 發(fā)表于 07-13 10:29 ?1515次閱讀
    <b class='flag-5'>STM32</b> <b class='flag-5'>DAC+TIMER</b>+DMA的實(shí)現(xiàn)

    STM32L4定時(shí)器(TIMER)介紹

    電子發(fā)燒友網(wǎng)站提供《STM32L4定時(shí)器(TIMER)介紹.pdf》資料免費(fèi)下載
    發(fā)表于 08-01 14:24 ?0次下載
    <b class='flag-5'>STM32</b>L4定時(shí)器(<b class='flag-5'>TIMER</b>)介紹

    STM32G4 Advanced Timer Break功能詳解

    電子發(fā)燒友網(wǎng)站提供《STM32G4 Advanced Timer Break功能詳解.pdf》資料免費(fèi)下載
    發(fā)表于 09-19 15:09 ?1次下載
    <b class='flag-5'>STM32</b>G4 Advanced <b class='flag-5'>Timer</b> Break功能詳解