吴忠躺衫网络科技有限公司

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

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

3天內不再提示

手把手教你基于RT-Thread Studio使用STM32單片機的PWM外設

冬至配餃子 ? 來源:樂樂愛學習 ? 作者:樂樂愛學習 ? 2023-09-28 15:12 ? 次閱讀

一、使用說明

目前我使用的是STM32L475系列單片機,是ali當時在PDD 50塊錢賣的一個開發板,其他STM32單片機參考即可,這里會手把手教大家基于RTT Studio 來使用PWM。

二、創建工程

1.創建工程

首先大家打開RT-Thread Studio 來基于單片機創建工程。點擊左上角文件,新建 RT-Thread項目
Project name就是項目名稱,如果大家想自定義路徑保存,就取消掉缺省位置然后自定義路徑。

1.jpg

2.芯片參數設置

選擇基于芯片,下面的參數需要大家根據自己的主板來選擇,我這個板子 使用LPUART作為CMD輸出,單片機型號,下載器比如JLINK或者STLINK等等都需要自己適配開發板。

1.jpg

3.下載設置

創建項目完成后大家可以先編譯后下載進開發板測試一下 CMD的輸出。
這里可以開啟下載后自動軟件復位。

1.jpg

4.編譯 下載

大家在編譯后就可以嘗試下載。

1.jpg

我使用的工具是XShell,可以看到復位后有啟動log輸出,就正常啦。

1.jpg

三、修改時鐘并配置串口

在創建工程的時候,RT-Thread Studio 默認使用的是內部低俗時鐘,我們需要更改到外部高速時鐘來提高MCU工作性能,后面PWM 的時鐘外設也使用的是外部高速時鐘。

1.打開CUBEMX

雙擊工程中的CUBEMX圖標,可以打開cubemx,如果沒有安裝請自行安裝。

1.jpg

2.打開高速時鐘

打開CUBEmx的 System Core,選擇RCC配置,將HSE與LSE均設置為Crystal/Ceramic Resonator,然后點擊左上角文件保存。

1.jpg

3.配置時鐘樹

打開 Clock Configuration

1.jpg

鎖相環PLL選擇HSE,然后Clock Mux選擇PLLCLK,PLLM數值選擇合適的數值,這個一般都有參考,每種單片機時鐘頻率不同,大家可以搜索對應的時鐘樹設置。

1.jpg

4.打開LPUART

因為在創建工程時,默認打開了LPUART,但是使用cubemx獲取代碼后,LPUART是關閉的,我們需要重新打開LPUART。

1.jpg

首先在右側選擇 PB10與PB11 為LPUART外設,然后在左側 Connectivity -LPUART外設中將Mode選擇為Asynchronous 模式,就已經成功打開了。

5.獲取代碼

首先點擊左上角文件 選擇Save Project,然后點擊右上角 Generate Code,代碼獲取完成后就可以關閉CubeMX了。

6.修改時鐘定義

剛才Cubemx已經幫我們生成了時鐘代碼,但是代碼需要我們手動加入到 BSP中,找到cubemx 里的src 然后打開main.c文件。

1.jpg

然后將 void SystemClock_Config(void) 這個函數內容復制到 drivers里的 drv_clk.c 文件中 void system_clock_config(void)。

1.jpg

7.編譯下載

這時候時鐘已經修改完成了,可以編譯下載應該是沒有錯誤的。
有一個reboot的調用警告,這是因為目前FINSH_FUNCTION_EXPORT_ALIAS 這個函數已經沒有調用了,

1.jpg

MSH_CMD_EXPORT(reboot, Reboot System);
將這句代碼替換掉上面的 FINSH_FUNCTION_EXPORT_ALIAS 即可。

四、配置PWM

1.使能PWM

首先打開RT-Thread Settings 打開PWM驅動。

1.jpg

選擇組件,設備驅動程序,使能PWM,然后點擊左上角保存。

1.jpg

2.配置時鐘

配置時鐘我們仍然需要使用CUBEMX工具,我目前要使用的PWM是A0引腳,將A0設置為TIM2的通道1

1.jpg

然后選擇Timers 的TIM2 將通道1 設置為 比較輸出模式。然后點擊左上角保存,右上角獲取代碼。

3.修改驅動

這時候 CUBEMX已經幫我們生成了需要使用的代碼,我們還需要將它修改到BSP里。
打開 cubemx的src文件夾,打開stm32l4xx_hal_msp.c,將以下三個函數的實現全部剪貼到drivers的board.c的最下面

1.jpg

void HAL_TIM_OC_MspInit(TIM_HandleTypeDef* htim_oc)
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
void HAL_TIM_OC_MspDeInit(TIM_HandleTypeDef* htim_oc)

1.jpg

4.修改調用

打開drivers 里的 drv_pwm.c 找到 stm32_hw_pwm_init這個函數,在TIM初始化之前初始化以下時鐘引腳。

在圖里所示的位置調用這個函數。

HAL_TIM_OC_MspInit(tim);

1.jpg

5.配置PWM通道

這時候PWM的驅動就已經做好了,打開board.h ,打開需要使用的PWM通道
比如你使用的是TIM1,就是 pwm1, 通道同理。

#define BSP_USING_PWM2
#define BSP_USING_PWM2_CH1

1.jpg

6.保存編譯

這時候我們需要使用的驅動已經全部構建完成了,接下來就使用RT-Thread的接口來完成用戶代碼吧。

五、用戶代碼

1.新建一個.c文件來存放用戶代碼,名字隨便起,我放在了applications里,文件格式一定要加.c

1.jpg

2.PWM相關API
3.查找設備
rt_device_t rt_device_find(const char* name);
這個API會返回設備句柄
4.設置PWM參數
rt_err_t rt_pwm_set(struct rt_device_pwm *device,
int channel,rt_uint32_t period,rt_uint32_t pulse);
struct rt_device_pwm *device PWM設備句柄

int channel PWM通道數

rt_uint32_t period PWM周期,單位ns

rt_uint32_t pulse PWM脈沖寬度,單位ns

如果設置成功,會返回RT_EOK,

頻率= 1000000000/period
占空比 = pulse/period

3.使能PWM通道

rt_err_t rt_pwm_enable(struct rt_device_pwm *device, int channel);
struct rt_device_pwm *device 這是設備句柄

int channel PWM通道數

如果使能正常的話會返回RT_EOK,其他錯誤就是使能失敗。

3.PWM用戶Demo
/*

Copyright (c) 2006-2021, RT-Thread Development Team

SPDX-License-Identifier: Apache-2.0

Change Logs:
Date Author Notes
2022-03-13 desktop the first version
/
#include
#include
//設置log文件
#define DBG_TAG "pwm_test.c"
#define DBG_LVL DBG_LOG
#include
#define PWM_DEV_NAME "pwm2" /
PWM 設 備 名 稱 */
#define PWM_DEV_CHANNEL 1
struct rt_device_pwm pwm_dev; / PWM 設 備 句 柄 /
static int pwm_test(void)
{
rt_uint32_t period , pulse;
//設置周期及 脈沖長度
period = 200000;
pulse = 100000;
pwm_dev = (struct rt_device_pwm
)rt_device_find(PWM_DEV_NAME); //查找PWM設備
//配置PWM
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse); //占空比應該是50%
if (rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL) == RT_EOK)
{
LOG_D("PWM Init is ok tn");
return RT_EOK;
}
return RT_EOK;
}
MSH_CMD_EXPORT(pwm_test, pwm device sample);

代碼注釋基本上已經寫清楚啦,我用的是TIM2的通道1,就是pwm2的通道1,大家可以參考這個Demo。

4.命令行調用

完成了代碼,我們編譯下載進單片機,打開命令行 輸入help命令,可以將main中的log日志代碼刪除掉,不然會一直彈 Hello RT-Thread

1.jpg

可以看到help 顯示的命令, pwm_test就是我們剛才用戶代碼的命令,

1.jpg

然后我用邏輯分析儀抓一下 PWM波形,應該是50%占空比。

1.jpg

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

    關注

    114

    文章

    5198

    瀏覽量

    214874
  • RCC
    RCC
    +關注

    關注

    0

    文章

    93

    瀏覽量

    27060
  • PWM波
    +關注

    關注

    0

    文章

    99

    瀏覽量

    16947
  • STM32單片機
    +關注

    關注

    59

    文章

    549

    瀏覽量

    58818
  • STM32L4
    +關注

    關注

    1

    文章

    42

    瀏覽量

    9435
  • RTThread
    +關注

    關注

    8

    文章

    132

    瀏覽量

    40999
收藏 人收藏

    評論

    相關推薦

    手把手教你單片機之AVR入門視頻教程

    `手把手教你單片機之AVR入門視頻教程AVR單片機軟硬件設計視頻教程-入門篇本視頻是 力天電子 尹延輝 錄制的 詳情請登 力天電子第01講-單片機
    發表于 03-02 11:04

    手把手教你單片機c語言》視頻教程

    `《手把手教你單片機C語言》視頻教程電驢、優酷、迅雷等下載地址《手把手教你單片機c語言》視頻
    發表于 10-26 14:14

    力天手把手教你單片機視頻全集下載

    .rarhttp://115.com/file/e7fv6828#17.第九講.輸出型外設與51的IO口上--力天手把手教你單片機之實戰篇.rarhttp://115.com/fil
    發表于 02-14 17:06

    手把手教你單片機

    小宋老師單片機教程手把手教你單片機 鏈接: http://pan.baidu.com/s/1kTvEOo3 密碼: vzox
    發表于 12-07 17:59

    手把手教你學CPLD/FPGA與單片機聯合設計》-周興華

    作者從2009年1月起,在《電子世界》雜志上連載了《手把手教你學CPLD/FPGA設計》講座。《手把手教你學CPLD/FPGA與單片機聯合設
    發表于 12-29 17:10

    手把手教你實戰RT-Thread Nano,不信都這樣了你還不會

    手把手教你實戰RT-Thread Nano,不信都這樣了你還不會
    發表于 11-23 10:30

    手把手教你STM32單片機

    整理資料來源【正點原子】 手把手教你STM32單片機教學視頻 嵌入式 之 F103-基于新戰艦V]NANO_STM32F103開發指南-H
    發表于 08-19 07:08

    手把手教你學LabVIEW視覺設計

    手把手教你學LabVIEW視覺設計手把手教你學LabVIEW視覺設計手把手教你學LabVIEW視
    發表于 03-06 01:41 ?3182次閱讀

    手把手教你單片機程序框架的PDF電子書免費下載

    本文檔的主要內容詳細介紹的是手把手教你單片機程序框架的PDF電子書免費下載
    發表于 04-22 17:24 ?287次下載
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b><b class='flag-5'>單片機</b>程序框架的PDF電子書免費下載

    手把手教你學會AVR單片機pdf.01

    手把手教你學會AVR單片機pdf.01
    發表于 09-30 17:33 ?0次下載

    手把手教你學會AVR單片機pdf.02

    手把手教你學會AVR單片機pdf.02
    發表于 09-30 17:34 ?0次下載

    手把手教你學會AVR單片機pdf.03

    手把手教你學會AVR單片機pdf.03
    發表于 09-30 17:36 ?0次下載

    手把手教你學會AVR單片機pdf.04

    手把手教你學會AVR單片機pdf.04
    發表于 09-30 17:37 ?0次下載

    手把手教你學會AVR單片機pdf.05

    手把手教你學會AVR單片機pdf.05
    發表于 09-30 18:19 ?0次下載

    手把手教你開發基于單片機的wifi通信的物聯網項目(遠程燈控制)

    手把手教你開發基于單片機的wifi通信的物聯網項目(遠程燈控制)
    發表于 11-12 19:36 ?18次下載
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b>開發基于<b class='flag-5'>單片機</b>的wifi通信的物聯網項目(遠程燈控制)
    米其林百家乐的玩法技巧和规则| 德州市| 百家乐官网真人视屏游戏| 百家乐赢新全讯网| 云博娱乐城| 百家乐官网怎么玩请指教| 大发888娱乐注册| 网上百家乐官网真的假的| 百家乐无损打法| 澳门百家乐官网心理| 极速百家乐真人视讯| 百家乐官网视频游戏双扣| 菲律宾百家乐娱乐| 娱乐城百家乐官网打不开| 立博百家乐的玩法技巧和规则 | 星空棋牌舟山清墩| 免费百家乐官网过滤工具| 网络篮球投注| 百家乐算牌皇冠网| 杨浦区| 电脑百家乐玩| 在线百家乐官网3d| 威尼斯人娱乐棋牌下载| 网上百家乐官网是真是假天涯论坛| 大发888娱乐城 34hytrgwsdfpv| 百家乐官网软件代理打| 明升备用| 澳门百家乐娱乐城送彩金| 百家乐官网怎么看门路| 方形百家乐筹码| 精通百家乐官网的玩法技巧和规则 | 威尼斯人娱乐城老lm0| 百家乐官网机器图片| 大发88817| 机器百家乐官网心得| 国美百家乐的玩法技巧和规则| 时尚| 百家乐五湖四海娱乐场| 打百家乐官网的介绍| 欢乐谷百家乐官网的玩法技巧和规则 | 百家乐官网庄闲作千|