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

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

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

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

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

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

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

STM32F429的TIM2是32位定時器,3個通道的CCR寄存器也是32位的。那么上位機每次發(fā)3個通道的參數(shù)對應(yīng)12字節(jié)的數(shù)據(jù)。

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

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

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

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

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

下面我用UART自發(fā)自收來模擬來自上位機的修改CCR參數(shù)的數(shù)據(jù)信號

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

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

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

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

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

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

我用32位TxData【3】數(shù)組存放待傳輸?shù)?個CCR值。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    關(guān)注

    31

    文章

    5424

    瀏覽量

    123487
  • STM32
    +關(guān)注

    關(guān)注

    2290

    文章

    11017

    瀏覽量

    362632
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1269

    瀏覽量

    103342

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

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

收藏 人收藏

    評論

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

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

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

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

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

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

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

    教你一手 基于STM32Cube庫的Timer捕獲應(yīng)用

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

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

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

    stm32 uart1如何通過DMA方式發(fā)送和接收數(shù)據(jù)?

    stm32 uart1如何通過DMA方式發(fā)送和接收數(shù)據(jù)?
    發(fā)表于 12-08 07:05

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

    STM32U575 Nucleo UART_TwoBoards DMA 示例不會從終端接收,是何原因
    發(fā)表于 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
    發(fā)表于 12-29 10:54 ?0次下載

    UART需要使用DMA發(fā)送嗎 ?

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

    STM32---UART使用DMA數(shù)據(jù)傳輸

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

    STM32CubeMX_UART_printf_接收中斷_DMA空閑中斷_LPUART

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

    stm32F4的ADC+DMA+Timer,實現(xiàn)2MHz連續(xù)采樣。1LSB分辨率,極低噪聲。

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

    stm32的串口DMA空閑中斷接收不等長數(shù)據(jù),stm32F1的usart1-DMA-IDLE收發(fā)

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

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

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

    STM32 UART配置中斷DMA傳輸

    在處理UART數(shù)據(jù)的時候,DMA是一種非常靈活、高效的方式。
    的頭像 發(fā)表于 07-24 14:32 ?3814次閱讀
    <b class='flag-5'>STM32</b> <b class='flag-5'>UART</b>配置中斷<b class='flag-5'>DMA</b>傳輸
    主站蜘蛛池模板: 国产三级精品视频 | 康熙古代高h细节肉爽文全文 | 色秀视频免费网站在线观看 | 亚洲激情a | 欧美一级在线观看视频 | 嗯好舒服好爽好快好大 | 三级视频网 | 免费一级特黄 | 午夜视频1000| 精品国产柚木在线观看 | 婷婷四房综合激情五月性色 | 午夜视 | 亚洲国产精品综合久久2007 | 天堂资源在线种子资源 | 亚洲mv在线观看 | 日日干夜夜爽 | 久久精品视频网站 | 澳门三级bd高清 | 曰本福利写真片视频在线 | 天天做天天爱天天爽综合区 | 欧美一区二区三区免费高 | 久久精品国产清自在天天线 | video欧美性精品 | 三级免费黄色片 | 欧美尺寸又黑又粗又长 | 四虎影院永久 | 黄色国产视频 | 色老头网站久久网 | 欧美日韩高清一区 | 亚洲欧美日韩色图 | 又黄又湿又爽吸乳视频 | bt天堂电影| 欧美三四级片 | 91大神精品在线观看 | 亚洲欧美精品 | 日韩免费三级 | 国色天香精品亚洲精品 | 7777奇米 | 国产三级日本三级日产三级66 | 日本内谢69xxxx免费 | 五月天婷婷网亚洲综合在线 |