在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

通過STM32 UART及DMA修改TIMER占空比示例

茶話MCU ? 來源:茶話MCU ? 作者:茶話MCU ? 2022-11-12 15:33 ? 次閱讀

現在有人談到這樣一個需求,他使用STM32F429芯片做開發,其中用到TIM2做3路PWM輸出。另外有個上位機跟STM32的UART接口相連,上位機可能不定期地需要通過UART接口給STM32發送新的占空比參數,而且每次都發送3個輸出通道的比較參數。如何快捷地實現這個功能呢?要求收到數據后盡快修改3個比較通道的參數。

STM32F429的TIM2是32位定時器,3個通道的CCR寄存器也是32位的。那么上位機每次發3個通道的參數對應12字節的數據。

顯然,整體上功能不算復雜。我們可以先通過UART收到12字節數據,稍加整理后手動將數據逐字寫到3個CCR寄存器來改變PWM輸出。說實在的,這個方案的實現過程還是很清晰的,相信也是很多人的選擇。或許有人覺得操作起來稍顯瑣碎,有沒有比這個操作更方便快捷的呢?

既然這樣,我們可以調整下做法。因為STM32的高級定時器和大部分通用定時器都支持基于定時器事件的DMABurst傳輸。即先通過UART收到12字節數據,稍加整理后借助于定時器事件的DMA Burst 傳輸 一次性地將3個字【12字節】的數據傳輸到CCR1CCR2CCR3三個寄存器,從而實現3個通道PWM的占空比的調整。實際上就是將上面第一種方案的手動逐個修改變為DMA批量修改。

毫無疑問,這個第2種方案也是可行、挺方便的。但使用該方案就得研究下基于定時器事件的DMABurst傳輸的內容,數據的修改需借助定時器事件。當然,所用定時器還得支持TIMERBurst DMA傳輸功能。說實在的,數據修改是變快捷了,但貌似難度提升了、代碼方面相比第一種方案變得復雜了。【為何說貌似,畢竟難易因人而異。】那有沒有一種更為通用的常規做法來實現上述功能呢?

我們不妨看看第3種方案。因為這里所選芯片STM32F429的DMA是帶4字FIFO的,我們可以通過UART按字節接收數據,然后經過FIFO打包成字,再通過DMA直接將數據送到3個輸出通道的CCR寄存器。這樣操作的話就非常簡單快捷,DMA的傳輸不涉及定時器事件,也不再要求定時器支持基于定時器事件的DMA Burst傳輸功能,自然也就無須使用者花精力研究這塊內容。相比前兩種方案,代碼方面也更為簡單。

那么,我這里就專門選擇第3種方案,來簡單演示下它的實現過程。

下面我用UART自發自收來模擬來自上位機的修改CCR參數的數據信號

TIM2使用3個通道做PWM輸出,參考配置如下:

99e524fc-3c7f-11ed-9e49-dac502259ad0.png

9a0962b8-3c7f-11ed-9e49-dac502259ad0.png

我這里選用USART1外設,開啟其TX/RX事件的DMA傳輸功能。參考配置如下:

9a2bd280-3c7f-11ed-9e49-dac502259ad0.png

9a4f7f28-3c7f-11ed-9e49-dac502259ad0.png

我用32位TxData【3】數組存放待傳輸的3個CCR值。

uint32_t TxData[]={2000,4000,8000};//3個初始值我隨便定的。

使用CubeMx配置完成后,添加相關用戶代碼。【基于HAL庫組織代碼】

9a5dbb92-3c7f-11ed-9e49-dac502259ad0.png

上面三行代碼的功能一目了然,即開啟TIM2定時器3個通道的PWM輸出功能。

下面循環體代碼,就是修改CCR的值、通過UART 發、收,利用DMA修改3個通道的值,進而調整PWM輸出占空比。這樣循環進行,我們通過示波器查看輸出結果。

9a794af6-3c7f-11ed-9e49-dac502259ad0.png

稍作編譯調試,即可通過示波器可以看到預期的結果。下面三副截圖代表不同時刻三個通道的輸出情況。

9a8e3006-3c7f-11ed-9e49-dac502259ad0.png

9ab2734e-3c7f-11ed-9e49-dac502259ad0.png

9abf7634-3c7f-11ed-9e49-dac502259ad0.png

從上面截圖不難看出,3個輸出通道的PWM占空比在動態改變。當然,我們也可以通過IDE的寄存器觀察窗口查看CCR值的改變,如下圖所示:

9bb1662e-3c7f-11ed-9e49-dac502259ad0.png

上面重點針對第3種方案的實現過程做了簡單的演示。基本配置、實現代碼都是3種方案中最簡捷的,也是較為常規的通用做法。其中的關鍵配置和實現代碼我都清晰地貼出來了,以便有需要的人士參考。其實,只要我們對STM32的DMA功能把握得比較好,吃透原理、把握細節,實現起來也不算難。

最后順便用一個與本文內容相關的小細節提醒來結尾。關于STM32的定時器的各個寄存器在地址空間中的地址安排,其中TIMx_CCR1,TIMx_CCR2, TIMx_CCR3,TIMx_CCR4這幾個寄存器的地址總是依次順序擺放的,了解這點對閱讀上面個別函數調用有幫助。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5396

    瀏覽量

    122457
  • STM32
    +關注

    關注

    2281

    文章

    10976

    瀏覽量

    360729
  • uart
    +關注

    關注

    22

    文章

    1249

    瀏覽量

    102587

原文標題:通過STM32 UART及DMA修改TIMER占空比示例

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

收藏 人收藏

    評論

    相關推薦

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

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

    STM32G4 UART+TIMER+DMA應用示例

    這里使用STM32G4系列Nucleo開發板演示如下需求的實現過程。
    的頭像 發表于 11-27 10:42 ?2847次閱讀
    <b class='flag-5'>STM32</b>G4 <b class='flag-5'>UART+TIMER+DMA</b>應用<b class='flag-5'>示例</b>

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

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

    教你一手 基于STM32Cube庫的Timer捕獲應用

    STMCU官網更新了一則實戰經驗文件,重點介紹利用STM32CubeMx初始化配置工具和STM32Cube庫如何通過TIMER的捕獲功能完成對頻率、
    發表于 06-25 15:05

    使用DMA(和更多)的UART傳輸示例代碼

    你好,CuSoMeMe使用的是M9AF112K。他希望使用DMA傳輸UART。1)有沒有使用DMAUART傳輸示例代碼?二)是特列表或類似
    發表于 08-29 16:09

    stm32 uart1如何通過DMA方式發送和接收數據?

    stm32 uart1如何通過DMA方式發送和接收數據?
    發表于 12-08 07:05

    STM32U575 Nucleo UART_TwoBoards DMA示例不會從終端接收怎么辦

    STM32U575 Nucleo UART_TwoBoards DMA 示例不會從終端接收,是何原因
    發表于 12-19 06:20

    IO_SOFT_UART_USE_TIMER

    IO_SOFT_UART_USE_TIMER_cIO_SOFT_UART_USE_TIMER_cIO_SOFT_UART_USE_TIMER_c
    發表于 12-29 10:54 ?0次下載

    UART需要使用DMA發送嗎 ?

    UART需要使用DMA發送嗎?
    的頭像 發表于 03-07 16:57 ?7343次閱讀

    STM32---UART使用DMA數據傳輸

    當預先不知道要接收的數據時,如何使用 DMAUART 上讀取數據的信息。在STM32中,通常有以下幾種模式:輪詢模式程序必須輪詢狀態位以檢查是否已收到新字符并以足夠快的速度讀取它以獲得所有字節
    發表于 12-03 10:06 ?8次下載
    <b class='flag-5'>STM32---UART</b>使用<b class='flag-5'>DMA</b>數據傳輸

    STM32CubeMX_UART_printf_接收中斷_DMA空閑中斷_LPUART

    文章目錄前言STM32CubeMX新建F767工程UART配置生成代碼串口發送printf支持串口接收中斷DMA空閑中斷工程代碼微信公眾號前言STM32CubeMX_環境搭建_GPIO
    發表于 12-06 18:36 ?6次下載
    <b class='flag-5'>STM32CubeMX_UART</b>_printf_接收中斷_<b class='flag-5'>DMA</b>空閑中斷_LPUART

    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>,實現2MHz連續采樣。1LSB分辨率,極低噪聲。

    stm32的串口DMA空閑中斷接收不等長數據,stm32F1的usart1-DMA-IDLE收發

    stm32DMA收發原理,見另一篇:https://blog.csdn.net/Mark_md/article/details/107243054stm32F1的串口DMA
    發表于 12-28 19:35 ?6次下載
    <b class='flag-5'>stm32</b>的串口<b class='flag-5'>DMA</b>空閑中斷接收不等長數據,<b class='flag-5'>stm32</b>F1的usart1-<b class='flag-5'>DMA</b>-IDLE收發

    遠程修改STM32 TIMER占空比的方案

    現在有人有這樣一個需求,他使用STM32F429芯片做開發,其中用到32位的TIM2實現3路PWM輸出。
    的頭像 發表于 09-30 09:23 ?1283次閱讀

    STM32 UART配置中斷DMA傳輸

    在處理UART數據的時候,DMA是一種非常靈活、高效的方式。
    的頭像 發表于 07-24 14:32 ?3569次閱讀
    <b class='flag-5'>STM32</b> <b class='flag-5'>UART</b>配置中斷<b class='flag-5'>DMA</b>傳輸
    主站蜘蛛池模板: 国产99在线播放免费 | 欧美一级别 | 色老头久久久久久久久久 | 天天爽夜夜 | 国产手机在线国内精品 | 国产午夜视频在永久在线观看 | 韩国朴银狐诱感在线观看 | bt天堂网在线资源www | 午夜特片网 | 免费大片黄国产在线观看 | 久久国产精品永久免费网站 | 精品欧美一区二区三区在线观看 | 久久综合九色综合欧洲 | 亚洲视频在线一区 | 都市激情综合 | 国产精品美女久久久久网 | 免费视频国产 | 永久视频在线观看 | 欧美色乱 | 欧美一区二区视频 | 六月丁香深爱六月综合激情 | 中文字幕一区二区精品区 | 国产精品久久福利网站 | 国内久久精品视频 | 免费人成网址在线观看国内 | 日韩欧美高清一区 | 色婷婷影院 | 九九热在线视频观看 | 偷偷操不一样的久久 | 天堂网久久 | 日本黄色视 | 色视频免费在线 | 五月综合激情久久婷婷 | 天堂a免费视频在线观看 | 新版天堂中文资源8在线 | 久久亚洲欧美成人精品 | 久久777国产线看观看精品卜 | 色视频免费观看高清完整 | 国产老师的丝袜在线看 | 国产卡一卡2卡三卡免费视频 | 日韩一级一欧美一级国产 |