一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

STM32G4 UART+TIMER+DMA應(yīng)用示例

茶話MCU ? 來源:茶話MCU ? 2023-11-27 10:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

這里使用STM32G4系列Nucleo開發(fā)板演示如下需求的實現(xiàn)過程。

TIMER2使用3個通道的PWM輸出,占空比可能被不時修改。修改的數(shù)據(jù)通過UART傳輸過來,UART接收的數(shù)據(jù)通過DMA傳輸?shù)絻?nèi)存。新的數(shù)據(jù)接收后,基于TIMER更新事件觸發(fā)DMA,利用TIMER的更新事件觸發(fā)DMA Burst 而一次性用新數(shù)據(jù)修改3個通道的CCR值以調(diào)整PWM輸出。每次新數(shù)據(jù)的接收允許以產(chǎn)生按鍵動作為準,即每次按鍵動作允許一次數(shù)據(jù)更新。

73121b38-8c23-11ee-939d-92fbcf53809c.png

這里有兩點要注意,TIM2是32位定時器,3個CCR數(shù)據(jù)使用32位格式。另外,3個數(shù)據(jù)的修改基于更新事件一次性修改,不能出現(xiàn)混亂,即不可以某一個時刻3個CCR寄存器的數(shù)據(jù)不是來自同一批的。為了避免數(shù)據(jù)混亂這種情況,我這里平常禁止TIMER2的更新事件的產(chǎn)生,只有每次收到新數(shù)據(jù)后才臨時允許更新事件的產(chǎn)生,并在TIMER觸發(fā)的DMA完成中斷里再次禁止更新事件的產(chǎn)生。

使用LPUART從外部接收新數(shù)據(jù),選用LPUART主要原因是它的TX/RX剛好跟G4Nucleo開發(fā)板的虛擬串口接在一起的,并無其它特別原因。至于按鍵就選用板載按鍵PC13,并開啟了對應(yīng)的外部中斷。

大致的數(shù)據(jù)傳輸流程如下圖所示:

73255220-8c23-11ee-939d-92fbcf53809c.png

關(guān)于定時器更新事件的能否產(chǎn)生的控制由TIMER的控制寄存器里的UDIS位決定:

734d78ea-8c23-11ee-939d-92fbcf53809c.png

我在代碼里對該位的操作,寫成宏的方式,便于閱讀。

73766a7a-8c23-11ee-939d-92fbcf53809c.png

該位默認為0。若該位被軟件置1,定時器的更新事件將不能產(chǎn)生,意味著開啟預(yù)裝功能時,影子寄存器內(nèi)容不能被更新,同時也不能因溢出操作、計數(shù)器復(fù)位操作而觸發(fā)相應(yīng)中斷或DMA請求 。

測試代碼的里幾個主要的基本操作:

一、響應(yīng)按鍵事件,啟動UART的DMA接收。

HAL_UART_Receive_DMA(&hlpuart1,(uint8_t*)CCR_rx, 12);

二、基于UART事件的DMA接收完成中斷,允許TIMER更新事件的產(chǎn)生,并啟動基于TIMER更新事件的DMA Burst 傳輸。

Permit_UpdateEvt; //Updated event permitted

HAL_TIM_DMABurst_MultiWriteStart(&htim2,TIM_DMABASE_CCR1,TIM_DMA_UPDATE,(uint32_t*)CCR_rx,TIM_DMABURSTLENGTH_3TRANSFERS,3);

三、基于TIMER事件的DMA完成中斷,禁止更新事件的產(chǎn)生,并基于串口通信提示可以接受下次數(shù)據(jù)更新。

__HAL_TIM_CLEAR_FLAG(&htim2,TIM_FLAG_UPDATE);

Forbid_UpdateEvt;//update event forbidden

Indicating_CCR_Updated();

再看看基本的CubeMx配置,配置比較簡單。下面是LPUART的配置貼圖。

73839f4c-8c23-11ee-939d-92fbcf53809c.png

739e7fc4-8c23-11ee-939d-92fbcf53809c.png

我開啟LPUART 的DMA接收,其發(fā)送功能使用查詢阻塞模式,主要用來輸出一些提示信息。

下面是TIM2的一些基本配置截圖。開啟3個通道的PWM輸出和基于TIMER更新事件的DMA傳輸。

73affb46-8c23-11ee-939d-92fbcf53809c.png

73c055c2-8c23-11ee-939d-92fbcf53809c.png

最后,我們來簡單驗證下。下面截圖就是通過串口助手鍵入新數(shù)據(jù)后TIMER的輸出結(jié)果。

73d42066-8c23-11ee-939d-92fbcf53809c.png

整體上,操作流程就是每次按鍵操作提示可以修改占空比了;串口終端鍵入新的3個字的數(shù)據(jù),基于UART接收事件的DMA傳輸完成后提示數(shù)據(jù)收到;基于TIMER事件的DMA完成完成后提示數(shù)據(jù)更新結(jié)束,提示等待下次按鍵動作。

好,今天的分享就到這里,下次再聊。如果有人想要完整的測試工程代碼的話,可以私下留言,只要時間不是過去太久且我這邊有保存的話,都可以分享供參考。

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

    關(guān)注

    8

    文章

    3124

    瀏覽量

    75269
  • STM32
    +關(guān)注

    關(guān)注

    2293

    文章

    11032

    瀏覽量

    364914
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1276

    瀏覽量

    103946
  • dma
    dma
    +關(guān)注

    關(guān)注

    3

    文章

    576

    瀏覽量

    103245
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5680

    瀏覽量

    104731

原文標題:STM32G4 UART+TIMER+DMA應(yīng)用示例

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

    請問STM32G4是不是不具備雙緩沖DMA功能?。?/a>

    請問STM32G4是不是不具備雙緩沖DMA功能???
    發(fā)表于 12-16 06:08

    基于STM32G4芯片的DAC應(yīng)用示例分享

    。這里要演示的基本功能就是讓DAM將內(nèi)存數(shù)據(jù)周期性傳輸給DAC數(shù)據(jù)寄存器,最后輸出一路正弦波。 結(jié)合STM32G4芯片的特性,這里可以有兩種實現(xiàn)方式。 第一種,DMA的請求來自于DAC1的轉(zhuǎn)換事件。第二種,DMA的請求來自于定時
    的頭像 發(fā)表于 11-26 11:39 ?5440次閱讀
    基于<b class='flag-5'>STM32G4</b>芯片的DAC應(yīng)用<b class='flag-5'>示例</b>分享

    通過STM32 UARTDMA修改TIMER占空比示例

    現(xiàn)在有人談到這樣一個需求,他使用STM32F429芯片做開發(fā),其中用到TIM2做3路PWM輸出。另外有個上位機跟STM32UART接口相連,上位機可能不定期地需要通過UART接口給
    的頭像 發(fā)表于 11-12 15:33 ?3238次閱讀

    STM32G4 系列壽命估算

    STM32G4 系列壽命估算
    發(fā)表于 11-21 08:11 ?2次下載
    <b class='flag-5'>STM32G4</b> 系列壽命估算

    AN5306_OPAMP在STM32G4系列中的應(yīng)用

    AN5306_OPAMP在STM32G4系列中的應(yīng)用
    發(fā)表于 11-21 08:11 ?4次下載
    AN5306_OPAMP在<b class='flag-5'>STM32G4</b>系列中的應(yīng)用

    AN4232_STM32F3和 STM32G4的模擬比較器入門指南

    AN4232_STM32F3和 STM32G4的模擬比較器入門指南
    發(fā)表于 11-21 17:06 ?10次下載
    AN4232_<b class='flag-5'>STM32</b>F3和 <b class='flag-5'>STM32G4</b>的模擬比較器入門指南

    AN5310_使用STM32F3系列與STM32G4系列設(shè)備的模擬特性指南

    AN5310_使用STM32F3系列與STM32G4系列設(shè)備的模擬特性指南
    發(fā)表于 11-21 17:06 ?2次下載
    AN5310_使用<b class='flag-5'>STM32</b>F3系列與<b class='flag-5'>STM32G4</b>系列設(shè)備的模擬特性指南

    STM32G4系列安全手冊

    STM32G4系列安全手冊
    發(fā)表于 11-22 08:21 ?4次下載
    <b class='flag-5'>STM32G4</b>系列安全手冊

    UM2492_從STM32G4系列的STM32CubeG4開始的用戶手冊

    UM2492_從STM32G4系列的STM32CubeG4開始的用戶手冊
    發(fā)表于 11-22 08:21 ?4次下載
    UM2492_從<b class='flag-5'>STM32G4</b>系列的<b class='flag-5'>STM32CubeG4</b>開始的用戶手冊

    STM32G4電機驅(qū)動實例

    電子發(fā)燒友網(wǎng)站提供《STM32G4電機驅(qū)動實例.pdf》資料免費下載
    發(fā)表于 07-31 17:00 ?9次下載
    <b class='flag-5'>STM32G4</b>電機驅(qū)動實例

    基于STM32G4的電機控制項目開發(fā)

    電子發(fā)燒友網(wǎng)站提供《基于STM32G4的電機控制項目開發(fā).pdf》資料免費下載
    發(fā)表于 08-01 16:35 ?19次下載
    基于<b class='flag-5'>STM32G4</b>的電機控制項目開發(fā)

    STM32G4 應(yīng)用程序與 Option Bytes 同時燒錄問題

    STM32G4 應(yīng)用程序與 Option Bytes 同時燒錄問題
    的頭像 發(fā)表于 09-28 18:02 ?1433次閱讀
    <b class='flag-5'>STM32G4</b> 應(yīng)用程序與 Option Bytes 同時燒錄問題

    STM32G4 Advanced Timer Break功能詳解

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

    STM32G4市場和特性篇

    電子發(fā)燒友網(wǎng)站提供《STM32G4市場和特性篇.pdf》資料免費下載
    發(fā)表于 09-19 14:44 ?1次下載
    <b class='flag-5'>STM32G4</b>市場和特性篇