色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

STM32 DAC+TIMER+DMA的實現

麥辣雞腿堡 ? 來源:茶話MCU ? 作者:茶話MCU ? 2023-07-13 10:29 ? 次閱讀

現在有如下圖所示的這樣一個需求,希望使用STM32芯片來實現。

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

圖片

此問題源于某高校STM32學習時的習題,這里拿出來一起交流探討下。方法不是唯一的,尤其基于不同STM32系列。這里盡量使用通用、常規的方法,算是拋磚引玉。

顯然,我們可以考慮使用STM32的DACTIMER以及片內其它資源加以實現。

對于這個實現我們可以分兩種方式完成,每一種方式同時也體現不同難度。

我們可以考慮下面兩種應用情形:

第一種方式:MCU除了做這一件事外,還做點別的,比方做按鍵響應、ADC采樣這些,整體上沒有太復雜的功能和要求。【中斷方式】

第二種方式:MCU的主要工作是別的而不再是這個輸出了,要求該輸出自啟動后不再需要CPU的參與,即由相應外設自行完成。【DMA方式】

對于第一種實現方式,我們可以用個TIMER作為時基,每到適當的計時點就通過TIMER中斷及時修改DAC的輸出值而改變輸出電壓。至于對DAC輸出寄存器賦值,可以直接在定時器中斷里操作,也可以先在定時器中斷里設置標志位后在主循環里實現修改,可以靈活決定。顯然,這樣操作也不會影響其它按鍵處理、ADC處理等。該方式的實現就介紹到這里,重點聊聊第二種方式。

對于第二種方式,顯然不能使用中斷,這里就得DMA出場了。因為人家要求該輸出自啟動后不再讓CPU參與。這里有兩個量都是變的,DAC的輸出值在變,不同DAC輸出所持續的時間也在變。這兩個變量都需要DMA幫忙完成,顯然DAC的輸出需要使用TIMER事件來觸發DMA,這里使用更新事件比較合理。那么,TIMER自身的數據更新又如何實現呢?我們可以考慮使用TIMER的比較事件來觸發另外的DMA請求以更新自己。

下面我使用STM32F4系列芯片的TIM1及DAC來實現第二種需求。【當然,使用STM32其它系列,比如G4,H5,H7,U5等都可以】

TIM1的更新事件觸發DMA,修改DAC的輸出寄存器的值以改變輸出。另外,選擇TIM1通道1的比較事件觸發DMA【哪個通道比較事件不重要,能觸發DMA即可】,使用TIMER DMA Burst傳輸同時修改TIM1的ARR,RCR,CCR1三個寄存器的值,此處RCR始終用0值。因為這里要修改CCR1的值,RCR夾在ARR和CCR1寄存器中間,做Burst傳輸時RCR必須每次被使用。【這里CCR1的值其實也可以固定不變。我是每次取ARR的中間值作為CCR1的值,不是必須的。主要是考慮到有些應用場合可能需要動態修改CCR值,在此特意拓展下TIMER Burst傳輸的應用介紹。】

下面是關于TIM1時基參數的初始配置,其中ARR和CCR1值我是隨便設定的,算是個過渡值,目的就是產生更新事件和比較事件,之后都會按照代碼中預定的數據運行。

圖片

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

圖片

下面截圖是關于DAC的CubeMx配置,比較簡單,開啟其輸出功能即可。

圖片

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

圖片

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

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

    關注

    146

    文章

    17307

    瀏覽量

    352163
  • dac
    dac
    +關注

    關注

    43

    文章

    2309

    瀏覽量

    191348
  • STM32
    +關注

    關注

    2270

    文章

    10921

    瀏覽量

    356990
收藏 人收藏

    評論

    相關推薦

    STM32 TIMER+DMA輸出PWM異常案例的問題解析

    有人使用STM32U575的TIMER加上DMA做PWM輸出。具體就是利用某TIMER的一個通道的比較事件觸發DMA,通過
    的頭像 發表于 09-28 09:04 ?8501次閱讀
    <b class='flag-5'>STM32</b> <b class='flag-5'>TIMER+DMA</b>輸出PWM異常案例的問題解析

    STM32 DAC+TIMER+DMA應用演示

    現在有如下圖所示的這樣一個需求,希望使用STM32芯片來實現
    發表于 07-12 09:21 ?1716次閱讀
    <b class='flag-5'>STM32</b> <b class='flag-5'>DAC+TIMER+DMA</b>應用演示

    STM32U5系列TIMER+DMA+DAC應用演示

    有人使用STM32U575芯片的DAC功能。他希望使用TIMER事件觸發DMA,并通過DMA傳輸內存數據到
    的頭像 發表于 01-24 09:10 ?2024次閱讀
    <b class='flag-5'>STM32</b>U5系列<b class='flag-5'>TIMER+DMA+DAC</b>應用演示

    STM32產生正弦波

    我現在用的是STM32F103RCT6型的單片機,我想請問,STM32DAC+Timer+DMA產生正弦波的原理是什么?它們是怎么聯動的?我看了官方給的正弦波程序,但有些地方不明白。譬如,那個正弦表是怎么來的?作用是什么?
    發表于 07-03 18:32

    請問DACdma請求具體怎么實現

    請問,DACdma請求具體怎么實現?手冊說的挺簡單,dma的 源 目的是什么??正如例程中的梯形波,dma
    發表于 04-28 06:15

    DMADAC之間如何配合工作

    要輸出正弦波,需要好幾個外設配合:TimerDACDMATImer用來設置正弦波的頻率的;DAC顧名思義將數字量轉換成模擬量,在這里就
    發表于 08-18 08:09

    stm32F4的ADC+DMA+Timer實現原理是什么

    1. stm32F4的ADC+DMA+Timer實現原理stm32F4的ADC參數
    發表于 02-17 06:34

    如何使用STM32CubeMX HAL通過DMA + DAC生成STM32G474信號?

    我正在嘗試使用 DMASTM32G474 上使用 DAC 生成周期信號。有很多這樣的例子,我過去用 STM32L4 和 F4 也做過同樣的事情,沒有任何問題。但是,我不確定
    發表于 12-15 07:17

    基于STM32中采用DMA實現方波的產生和捕獲

    基于STM32中采用DMA實現方波的產生和捕獲
    發表于 09-26 08:53 ?23次下載
    基于<b class='flag-5'>STM32</b>中采用<b class='flag-5'>DMA</b><b class='flag-5'>實現</b>方波的產生和捕獲

    STM32CUBEMX配置教程(十三)STM32的定時器觸發的固定頻率DAC輸出(使用DMA

    STM32CUBEMX配置教程(十三)STM32的定時器觸發的固定頻率DAC輸出(使用DMA
    發表于 11-24 14:06 ?46次下載
    <b class='flag-5'>STM32</b>CUBEMX配置教程(十三)<b class='flag-5'>STM32</b>的定時器觸發的固定頻率<b class='flag-5'>DAC</b>輸出(使用<b class='flag-5'>DMA</b>)

    STM32F103使用TIM DMA DAC實現播放WAV音樂

    STM32F103使用TIM DAC DMA播放wave音樂
    發表于 11-24 14:51 ?28次下載
    <b class='flag-5'>STM32</b>F103使用TIM <b class='flag-5'>DMA</b> <b class='flag-5'>DAC</b><b class='flag-5'>實現</b>播放WAV音樂

    2021-06-05 GD32F405VG 調試過程關于DAC/DMA/TIMER等問題的解決

    GD32F405VG 調試過程關于DAC/DMA/TIMER等問題的解決GD32F405與STM32F405外設完全兼容,外設的地址映射也是完全兼容。ST的標準庫中的名字與GD32的外
    發表于 12-03 09:06 ?13次下載
    2021-06-05 GD32F405VG 調試過程關于<b class='flag-5'>DAC</b>/<b class='flag-5'>DMA</b>/<b class='flag-5'>TIMER</b>等問題的解決

    STM32基礎-----DMA

    STM32基礎-------DMA
    發表于 12-20 19:35 ?11次下載
    <b class='flag-5'>STM32</b>基礎-----<b class='flag-5'>DMA</b>

    stm32F4的ADC+DMA+Timer實現2MHz連續采樣。1LSB分辨率,極低噪聲。

    1. stm32F4的ADC+DMA+Timer實現原理stm32F4的ADC參數
    發表于 12-20 19:48 ?56次下載
    <b class='flag-5'>stm32</b>F4的ADC+<b class='flag-5'>DMA+Timer</b>,<b class='flag-5'>實現</b>2MHz連續采樣。1LSB分辨率,極低噪聲。

    STM32DACTIMER應用演示

    ,這里拿出來一起交流探討下。方法不是唯一的,尤其基于不同STM32系列。這里盡量使用通用、常規的方法,算是拋磚引玉。 顯然,我們可以考慮使用STM32DACTIMER以及片內其它資
    的頭像 發表于 07-17 10:27 ?931次閱讀
    <b class='flag-5'>STM32</b>的<b class='flag-5'>DAC</b>加<b class='flag-5'>TIMER</b>應用演示
    主站蜘蛛池模板: 一级毛片皇帝 宫女| 午夜福利院电影| 亚洲 欧美 国产 在线 日韩| YELLOW在线观看高清视频免费| 久久久久久极精品久久久| 伊人情涩网| 我就去色色| 高清欧美一区二区三区| 色偷偷成人网免费视频男人的天堂| chinesevideoshd性舞| 欧美亚洲日本日韩在线| 成人bt下载| 午夜国产精品视频在线| 果冻传媒妈妈要儿子| 一个人在线观看免费视频| 看了n遍舍不得删的黄文| 91嫩草视频在线观看| 欧美性受xxxx狂喷水| 俄罗斯19girl video9| 亚洲 欧美 国产 综合 在线| 久 久 亚洲 少 妇 无 码| 中文字幕在线永久| 国产高清视频a在线大全| 午夜福利免费视频921000电影| 国产手机精品一区二区| 伊人亚洲AV久久无码精品| 免费精品美女久久久久久久久久| 99热在线播放| 天天狠狠色噜噜| 精品精品国产yyy5857香蕉| 1788福利视频在视频线| 日本阿v直播在线| 国产手机在线精品| 曰本xxⅹ孕妇性xxx| 欧美 国产 日产 韩国 在线| 一区两区三不卡| 麻豆精品传媒卡一卡二传媒短视频| free性中国hd护士高清| 特黄特黄aaaa级毛片免费看| 国内极度色诱视频网站| 91看片淫黄大片.在线天堂|