RM新时代网站-首页

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

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

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

STM32L475使用PWM輸出波形

GReq_mcu168 ? 來源:CSDN技術(shù)社區(qū) ? 作者:CSDN技術(shù)社區(qū) ? 2020-10-09 14:14 ? 次閱讀

本文描述了如何在搭載了 RT-Thread 操作系統(tǒng)的平臺上使用 PWM 輸出波形,包括 PWM 的應(yīng)用、配置和驅(qū)動的添加等。并給出了在正點原子 STM32L475 pandora 開發(fā)板上驗證的代碼示例。

硬件平臺簡介

本文基于正點原子 STM32L475 pandora 開發(fā)板,給出了 PWM 的具體應(yīng)用示例代碼,由于 RT-Thread 上層應(yīng)用 API 的通用性,因此這些代碼不局限于具體的硬件平臺,用戶可以輕松將它移植到其它平臺上。 STM32L475 pandora 是正點原子推出的一款基于 ARM Cortex-M4 內(nèi)核的開發(fā)板,最高主頻為 80Mhz,該開發(fā)板具有豐富的板載資源,可以充分發(fā)揮 STM32L475 的芯片性能。

使用 PWM

在 menuconfig 中打開 PWM 通道

打開 Env 工具,使用 menuconfig 工具配置工程,在 Env 命令行中輸入 menuconfig 進入配置界面。在 menuconfig 配置界面依次選擇 Hardware Driver Config ---> On-chip Peripheral Drivers ---> Enable pwm ---> Enable timer2 output pwm 如下圖所示:

選中需要使用的 PWM 通道后保存退出,使用 scons --target=mdk5 生成 mdk5 工程,打開工程進行編譯并下載程序,在終端輸入 list_device 命令可以看到 PWM2 設(shè)備已經(jīng)成功添加了,如下圖所示:

使用 PWM 輸出波形

應(yīng)用程序可以通過 RT-Thread 提供的設(shè)備管理接口來訪問 PWM 設(shè)備硬件,相關(guān)接口如下所示:

接口參數(shù)的具體描述請參考官網(wǎng)PWM 設(shè)備

鏈接:

https://www.rt-thread.org/document/site/programming-manual/device/pwm/pwm/

(以上鏈接請復(fù)制至外部瀏覽器打開)

PWM 設(shè)備使用步驟

PWM 設(shè)備的具體使用方式可以參考如下步驟:

初始化 PWM 設(shè)備。 使用 rt_device_find 查找指定的 PWM 設(shè)備。 使用 rt_pwm_set 設(shè)置通道的默認 PWM 周期和脈沖寬度。 使用 rt_pwm_enable 使能需要輸出波形的 PWM 通道。

使用 PWM 設(shè)備輸出波形。 使用 rt_pwm_set 輸出特定的波形。

關(guān)閉 PWM 輸出通道。 當不再需要使用 PWM 通道輸出波形時,可以調(diào)用 rt_pwm_disable 關(guān)閉對應(yīng)的輸出通道。

代碼如下所示:向滑動查看全部

1#definePWM_DEV_NAME"pwm2"/*PWM設(shè)備名稱*/ 2#definePWM_DEV_CHANNEL3/*PWM通道*/ 3#defineTHREAD_PRIORITY25/*線程優(yōu)先級*/ 4#defineTHREAD_STACK_SIZE512/*線程棧大小*/ 5#defineTHREAD_TIMESLICE5/*線程時間片大小*/ 6 7staticrt_thread_ttid1=RT_NULL;/*線程句柄*/ 8structrt_device_pwm*pwm_dev;/*PWM設(shè)備句柄*/ 9staticrt_uint32_tperiod=500000;/*周期為0.5ms,單位為納秒ns*/ 10staticrt_uint32_tpulse=0;/*PWM脈沖寬度值的增減方向*/ 11 12/*線程pwm_entry的入口函數(shù)*/ 13staticvoidpwm_entry(void*parameter) 14{ 15rt_uint32_tcount=0; 16 17while(count++

運行 PWM 測試程序

要運行 PWM 測試程序,需要在終端輸入 pwm_test 由于此 BSP 的 PWM2 通道 3 的輸出并沒有連接到外設(shè)上,無法直觀的看到現(xiàn)象,所以這里使用邏輯分析儀來抓取 PWM 輸出的波形,波形輸出如下圖所示:

從邏輯分析儀抓取的波形可以看到,PWM 波形已經(jīng)成功輸出。

添加 PWM 驅(qū)動

如果使用的 BSP 在 menuconfig 中沒有給出 PWM 通道的配置項,那么就需要自己添加 PWM 的驅(qū)動,下面就如何自己添加 PWM 驅(qū)動展開講解。

檢查驅(qū)動文件是否支持 PWM

進入 rt-threadspstm32librariesHAL_Drivers 目錄檢查 drv_pwm.c 文件是否支持相應(yīng)的 PWM 外設(shè)輸出。檢查驅(qū)動文件是否支持相應(yīng)的 PWM 外設(shè)(PWM1、2、n)

檢查驅(qū)動文件是否支持相應(yīng)的 PWM 輸出通道(1、2、3、4)

初始化 PWM 通道引腳

進入 rt-threadspstm32l475-atk-pandoraoardCubeMX_Config 目錄,雙擊打開 STM32L475VE.ioc 文件初始化 PWM 通道對應(yīng)的引腳,這里以 PWM2 通道 3 為例,如下圖所示:

點擊 GENERATE CODE 按鈕生成代碼,雖然 STM32CubeMX 生成了多個文件用來初始化外設(shè),但 RT-Thread 只使用了 STM32CubeMX 生成的 stm32fxx_hal_msp.c 文件和 stm32fxx_hal_conf.h 文件,生成的 PWM 代碼如下所示:

配置 Kconfig 文件

進入 rt-threadspstm32l475-atk-pandoraoard 目錄,添加 Kconfig 選項,如下圖所示:

使用 scons --target=mdk5 命令生成 mdk5 工程,打開工程并編譯,如果工程提示 PWMn_CONFIG 未定義。 可以在stm32/libraries/HAL_Drivers/config/f4/pwm_config.h 中進行定義,如下圖所示:

完成以上步驟就可以在 menuconfig 菜單中添加支持的 PWM 輸出通道,至于如何使用 PWM 通道輸出波形請參考上一章節(jié)。 到這一步為止,如何在搭載了 RT-Thread 操作系統(tǒng)的平臺上如何使用 PWM 的介紹就結(jié)束了。

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

    關(guān)注

    114

    文章

    5181

    瀏覽量

    213793
  • 輸出波形
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    8944

原文標題:STM32 上使用 PWM

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    stm32l475 ADC采集失效的原因有哪些?

    stm32l475 ADC采集失效問題求助
    發(fā)表于 04-11 07:38

    STM32L475開發(fā)指南-RT-Thread例程_V1.1

    STM32L475開發(fā)指南-RT-Thread例程_V1.1
    發(fā)表于 05-05 09:07

    STM32L475開發(fā)指南-裸機例程_V1.1

    STM32L475開發(fā)指南-裸機例程_V1.1
    發(fā)表于 05-05 09:08

    STM32L475開發(fā)指南-裸機例程_V1.1

    STM32L475開發(fā)指南-裸機例程_V1.1
    發(fā)表于 07-22 19:11

    如何在搭載了RT-Thread操作系統(tǒng)的平臺上使用PWM輸出波形?

    本文描述了如何在搭載了 RT-Thread 操作系統(tǒng)的平臺上使用 PWM 輸出波形,包括 PWM 的應(yīng)用、配置和驅(qū)動的添加等。并給出了在正點原子 S
    發(fā)表于 03-30 07:07

    如何在搭載RT-Thread操作系統(tǒng)的平臺上使用PWM輸出波形

    本文描述了如何在搭載了 RT-Thread 操作系統(tǒng)的平臺上使用 PWM 輸出波形,包括 PWM 的應(yīng)用、配置和驅(qū)動的添加等。并給出了在正點原子 S
    發(fā)表于 08-24 07:33

    STM32L475開發(fā)板支持的串口模式及特征是什么?

    STM32L475開發(fā)板支持的串口模式及特征是什么?UART初始化結(jié)構(gòu)體的定義是什么?
    發(fā)表于 12-13 07:25

    STM32L475低功耗實例分享

    1.項目背景MCU:STM32L475外部AD:ADS1220外部RTC:DS3231擴展Flash:sst25vf016b外部SDUSB溫濕度計4852.目標MCU運行在低功耗模式,每1小時讀取
    發(fā)表于 02-11 07:17

    stm32l475多個串口的中斷優(yōu)先級大小在哪里設(shè)置?

    使用了stm32l475多個串口,是在哪里配置的各個串口的中斷優(yōu)先級大小呀?默認是設(shè)置的什么呀,可以改嗎?
    發(fā)表于 03-23 14:27

    請問目前是否增加了對stm32L475低功耗串口的驅(qū)動代碼呢

    背景我使用的mcu 為stm32L475,其中有一組串口為低功耗串口lpuart1。bug在stm32l475中,低功耗串口lpuart1和uart1 是兩組不同的串口,目前無法根絕串口名稱成功打開低功耗串口lpuart1。請問目前是否增加了對低功耗串口的驅(qū)動代碼呢?
    發(fā)表于 08-05 10:15

    如何設(shè)置STM32L475中的EOC標志呢?

    附圖中顯示了stm32L475參考手冊的描述。這里,它顯示 EOC 標志被 SW 設(shè)置為清除。我們可以清除標志,但 SW 如何設(shè)置 EOC 標志。我懷疑這是文檔中的錯誤。任何人都可以幫助我,不管我是對還是錯?
    發(fā)表于 12-28 08:23

    STM32L475物聯(lián)網(wǎng)套件編譯錯誤是何原因?如何解決呢?

    我剛得到一個 stm32L475 物聯(lián)網(wǎng)套件。編譯后,我得到了這個錯誤。st-flash 1.7.0-23-ga9adf9c2021-05-21T22:17:24 INFO common.c
    發(fā)表于 01-03 11:05

    使用X-CUBE-NFC3與STM32L475定制板和SPI2而不是SPI1?

    在我第一次涉足 STM32 世界時,我一直在嘗試使用 STM32L475 和 ST25R95 定制板讀取 nfc 標簽。我花了一段時間才習(xí)慣 CUBE IDE,因為多次包含庫會導(dǎo)致錯誤,特別是因為我
    發(fā)表于 02-06 06:52

    STM32L475低功耗實例驗證

    1.項目背景MCU:STM32L475外部AD:ADS1220外部RTC:DS3231擴展Flash:sst25vf016b外部SDUSB溫濕度計4852.目標MCU運行在低功耗模式,每1小時讀取
    發(fā)表于 12-07 16:21 ?11次下載
    <b class='flag-5'>STM32L475</b>低功耗實例驗證

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南
    發(fā)表于 02-22 18:23 ?9次下載
    RT-Thread文檔_RT-Thread 潘多拉 <b class='flag-5'>STM32L475</b> 上手指南
    RM新时代网站-首页