RM新时代网站-首页

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

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

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

通過(guò)STM32 UART及DMA修改TIMER占空比示例

茶話MCU ? 來(lái)源:茶話MCU ? 作者:茶話MCU ? 2022-11-12 15:33 ? 次閱讀

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

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

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

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

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

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

那么,我這里就專(zhuān)門(mén)選擇第3種方案,來(lái)簡(jiǎn)單演示下它的實(shí)現(xiàn)過(guò)程。

下面我用UART自發(fā)自收來(lái)模擬來(lái)自上位機(jī)的修改CCR參數(shù)的數(shù)據(jù)信號(hào)。

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

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

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

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

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

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

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

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

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

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

上面三行代碼的功能一目了然,即開(kāi)啟TIM2定時(shí)器3個(gè)通道的PWM輸出功能。

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

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

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

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

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

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

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

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

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

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

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5336

    瀏覽量

    120228
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10895

    瀏覽量

    355721
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1235

    瀏覽量

    101352

原文標(biāo)題:通過(guò)STM32 UART及DMA修改TIMER占空比示例

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

    這里使用STM32G4系列Nucleo開(kāi)發(fā)板演示如下需求的實(shí)現(xiàn)過(guò)程。
    的頭像 發(fā)表于 11-27 10:42 ?2252次閱讀
    <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,并通過(guò)DMA傳輸內(nèi)存數(shù)據(jù)到DAC輸出寄存器,進(jìn)而產(chǎn)生相應(yīng)的D
    的頭像 發(fā)表于 01-24 09:10 ?1787次閱讀
    <b class='flag-5'>STM32</b>U5系列<b class='flag-5'>TIMER+DMA</b>+DAC應(yīng)用演示

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

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

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

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

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

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

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

    STM32U575 Nucleo UART_TwoBoards DMA 示例不會(huì)從終端接收,是何原因
    發(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 ?7129次閱讀

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

    當(dāng)預(yù)先不知道要接收的數(shù)據(jù)時(shí),如何使用 DMAUART 上讀取數(shù)據(jù)的信息。在STM32中,通常有以下幾種模式:輪詢(xún)模式程序必須輪詢(xún)狀態(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空閑中斷工程代碼微信公眾號(hào)前言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,實(shí)現(xiàn)2MHz連續(xù)采樣。1LSB分辨率,極低噪聲。

    1. stm32F4的ADC+DMA+Timer的實(shí)現(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>,實(shí)現(xiàn)2MHz連續(xù)采樣。1LSB分辨率,極低噪聲。

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

    stm32DMA收發(fā)原理,見(jiàn)另一篇: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>空閑中斷接收不等長(zhǎng)數(shù)據(jù),<b class='flag-5'>stm32</b>F1的usart1-<b class='flag-5'>DMA</b>-IDLE收發(fā)

    遠(yuǎn)程修改STM32 TIMER占空比的方案

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

    STM32 UART配置中斷DMA傳輸

    在處理UART數(shù)據(jù)的時(shí)候,DMA是一種非常靈活、高效的方式。
    的頭像 發(fā)表于 07-24 14:32 ?3058次閱讀
    <b class='flag-5'>STM32</b> <b class='flag-5'>UART</b>配置中斷<b class='flag-5'>DMA</b>傳輸
    RM新时代网站-首页