NUCLEO-F411RE RT-Thread 体验 (9) - GCC环境 PWM的驱动移植以及简单使用

news/2025/2/21 17:39:20/

NUCLEO-F411RE RT-Thread 体验 (9) - GCC环境 PWM的驱动移植以及简单使用

驱动移植

驱动位于drv_pwm.c文件中,components层代码位于rt_drv_pwm.c中。

修改Makefile文件

在这里插入图片描述

修改配置文件rtconfig.h

LED2链接PA5,而TIM2_CHANNEL1可从PA5输出PWM,所以我们需要配置TIM2,并使能TIM2_CH1.
在这里插入图片描述
在这里插入图片描述

修改RT-Thread-basic/Core/Src/stm32f4xx_hal_msp.c

在这里插入图片描述
HAL_TIM_MspPostInit 函数在stm32_hw_pwm_init函数中被调用。主要配置PA5。
HAL_TIM_PWM_MspInit函数在HAL_TIM_PWM_Init中被调用。而HAL_TIM_PWM_Init在stm32_hw_pwm_init中被调用。

RT-Thread-basic/libraries/HAL_Drivers/config/f4/pwm_config.h

在这里插入图片描述
此处channel并不与实际channel1对应,后面会重新赋值。
在这里插入图片描述
编译后,list_device后会出现pwm2设备
在这里插入图片描述

使用pwm命令测试

rt_drv_pwm.c中封装了pwm_set pwm_get pwm_enable pwm_disable
假设设置1KHZ 占空比50%的波形,命令如下:
pwm_set pwm2 1 1000000 500000
pwm_enable pwm2 1
period单位为ns,1s = 1000 * 1000 * 1000 ns
1Khz,每个周期占1/1000 = 1ms,1ms = 1000 * 1000ns,duty cycle 占一半,为500*1000ns。
驱动中如何设置的呢?
在这里插入图片描述
主要是做了个转换,
1s = 1000 * 1000 * 1000,那么1ms = 1000 * 1000,换成100M的工作频率即为1ms = 100 * 1000,所以period = (传过来的periond * timeclock)/ (1000 * 1000 * 1000)。
这个period可以理解为一个周期里的计数次数,
TIM的AutoReload的最大值也是这个period,但是在0-65535之间,如果大与65535,则要经过perscaler设置一下分频。所以这里psc = (period/MaxPperiod) + 1。意思是看看period大于几倍的65535,就设置几倍的分频。

简单测试程序

/** Copyright (c) 2006-2018, RT-Thread Development Team** SPDX-License-Identifier: Apache-2.0** Change Logs:* Date           Author       Notes* 2018-11-25     misonyo      first implementation.*/
/** 程序清单:这是一个 PWM 设备使用例程* 例程导出了 pwm_led_sample 命令到控制终端* 命令调用格式:pwm_led_sample* 程序功能:通过 PWM 设备控制 LED 灯的亮度,可以看到LED不停的由暗变到亮,然后又从亮变到暗。
*/
#include <rtthread.h>
#include <rtdevice.h>
#include "board.h"#define LED_PIN_NUM         GET_PIN(A, 5)     /* LED PIN脚编号,查看驱动文件drv_gpio.c确定 */
#define PWM_DEV_NAME        "pwm2"  /* PWM设备名称 */
#define PWM_DEV_CHANNEL     1       /* PWM通道 */
struct rt_device_pwm *pwm_dev;      /* PWM设备句柄 */static int pwm_led_sample(int argc, char *argv[])
{rt_uint32_t period, pulse, dir;period = 500000;    /* 周期为0.5ms,单位为纳秒ns */dir = 1;            /* PWM脉冲宽度值的增减方向 */pulse = 0;          /* PWM脉冲宽度值,单位为纳秒ns */// /* 设置LED引脚脚模式为输出 */// rt_pin_mode(LED_PIN_NUM, PIN_MODE_OUTPUT);// /* 拉高LED引脚 */// rt_pin_write(LED_PIN_NUM, PIN_HIGH);/* 查找设备 */pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);if (pwm_dev == RT_NULL){rt_kprintf("pwm sample run failed! can't find %s device!\n", PWM_DEV_NAME);return RT_ERROR;}/* 设置PWM周期和脉冲宽度默认值 */rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);/* 使能设备 */rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);while (1){rt_thread_mdelay(1000);if (dir){pulse += 5000;      /* 从0值开始每次增加5000ns */}else{pulse -= 5000;      /* 从最大值开始每次减少5000ns */}if (pulse >= period){dir = 0;}if (0 == pulse){dir = 1;}/* 设置PWM周期和脉冲宽度 */rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);}
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(pwm_led_sample, pwm sample);

代码

代码下载


http://www.ppmy.cn/news/516604.html

相关文章

nodejs q模块

nodejs module q q模块 promiseq模块的安装promise的使用 then 函数流式操作组合操作 Promise的创建 Using QfcallUsing DeferredsUsing QPromise 实际例子 测试服务器并行请求串行请求延时操作 接触nodejs时间不长&#xff0c;如果有所纰漏&#xff0c;请大家批评指正 nod…

08年4Q的购书清单

11月&#xff0c;12月在卓越亚马逊网站够了些书&#xff0c;应同事要求&#xff0c;放到blog里晒一晒。 订单时间&#xff1a;2008-12-02 商品&#xff1a;数学大师--从芝诺到庞加莱/当代科普名著系列/哲人石丛书 (1)中国科普名家名作-图形和逻辑的故事 (1)费曼的彩虹&#xf…

网站调研及分析工具4Q

网站调研及分析工具4Q Survey 2015年9月17日 BY 蓝鲸 LEAVE A COMMENT 4Q Survey是一个网站调研及分析工具。我的博客从2010年开始使用这个免费的用户调研工具。访问过我博客的朋友中20%的人应该都被这个工具“骚扰”过&#xff0c;4Q会在你开始阅读页面之前跳出来询问你本次…

白度云下载到存储卡的视频看不了_苹果手机从百度网盘下载的视频如何保存到相册,还有不知道的吗?...

大家好&#xff01;苹果手机从百度网盘下载视频到本地以后在相册里是不显示的&#xff0c;我们不能从相册直接进行播放等操作&#xff0c;视频编辑软件也检测不到该视频&#xff0c;编辑起来也很不方便&#xff0c;今天就给大家演示一下把视频导入相册的方法步骤&#xff0c;很…

微信公众号H5音频视频自动播放(安卓,苹果)

我们都知道音频视频的自动播放被浏览器或者微信给限制了&#xff0c;必须用户跟页面交互才可以播放音视频&#xff0c;解决办法就是引入微信的jssdk&#xff0c;然后监听“WeixinJSBridgeReady”&#xff0c;来实现自动播放 引入jssdk <script type"text/javascript&…

html5 video在uc不自动播放,uc浏览器无法播放视频怎么办

uc浏览器是一款 内容非常丰富的手机服务软件&#xff0c;如果在使用的过程中无法播放视频&#xff0c;那么要如何解决呢&#xff0c;用户在使用过程中会出现各种问题&#xff0c;用户可以根据自己的需求解决这些问题&#xff0c;只需要使用浏览器就可以了&#xff0c;无需其他的…

iOS无法播放MP4视频文件的解决方案

1.场景描述 服务端上传MP4视频文件&#xff0c;iOS客户端通过URL播放该视频文件。 2.问题描述 安卓手机可以正常播放视频&#xff0c;iOS手机无法播放&#xff0c;且PC段safari浏览器也无法播放。 3.问题分析 &#xff08;1&#xff09;通过内网ip地址播放MP4文件可以播放&…

苹果手机 h5网页或公众号视频无法播放问题处理

最近遇到奇葩问题&#xff0c;苹果手机公众号和h5网页中视频无法播放&#xff0c;在网络中找寻了好多解决方案&#xff0c;但还是没能彻底解决。 出现这个问题网上反馈多数因为两个情况&#xff0c;一、视频输出流问题&#xff1b;二、视频格式问题&#xff1b;围绕这两个点展开…