rtthread pwm

news/2023/5/28 8:17:03

在这里插入图片描述

1、配置PWM设备驱动相关宏定义

1.1 配置PWM和TIM设备驱动

在RT-Thread Settings 配置界面中,在设备驱动程序目录下勾选 HWTIMER 和 PWM设备驱动程序,如下图所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

配置完后在 rtconfig.h 中可以查看刚刚配置的 RT_USING_HWTIMER 和 RT_USING_PWM 的设备驱动宏定义。
在这里插入图片描述

#define RT_USING_HWTIMER
#define RT_USING_PWM

修改 stm32f1xx_hal_conf.h

1.2 drivers/stm32f1xx_hal_conf.h 头文件查看是否已宏定义HAL_TIM_MODULE_ENABLED 和 HAL_PWR_MODULE_ENABLED,如果没有自动配置则手动取消相关注释打开

#define HAL_TIM_MODULE_ENABLED
#define HAL_PWR_MODULE_ENABLED

在这里插入图片描述

1.3修改board.h文件

在dervers/board.h 增加 #define BSP_USING_PWM4 和 #define BSP_USING_PWM4_CH1 宏定义

添加时钟宏定义

#define BSP_USING_TIM8

在这里插入图片描述

添加PWM宏定义

//使用的第几个时钟就是BSP_USING_PWM几, 我这里使用的是TIM8
#define BSP_USING_PWM8
#define BSP_USING_PWM8_CH1

在这里插入图片描述
在这里插入图片描述

2添加配置的TIM和PWM设备硬件驱动代码

使用STM32CubeIDE 生成 TIM 和 PWM驱动代码

2.1 使用STM32官方STM32CubeIDE配置TIM8 PWM CH1通道(即PI5)

定时器8:TIM8_CH1复用PI5

在这里插入图片描述

使用外部高速时钟

在这里插入图片描述

配置时钟频率

在这里插入图片描述

设置生生成项目名称

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.2 keil mdk5中打开tim.c查看TIM和PWM代码

在这里插入图片描述

2.3复制驱动代码

将红框内的相关驱动代码拷贝到rt-thread pwm测试项目中的 drivers/drv_pwm.c 源文件

在这里插入图片描述

修改pwm_config.h文件

如果没有对应pwm配置则添加
在这里插入图片描述

4、创建线程 PWM 驱动

4.1 具体线程测试代码如下

main.c
在这里插入图片描述

/** Copyright (c) 2006-2023, RT-Thread Development Team** SPDX-License-Identifier: Apache-2.0** Change Logs:* Date           Author       Notes* 2023-01-19     RT-Thread    first version*/#include <rtthread.h>#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>#include <rtdevice.h>
#define PWM_DEV_NAME        "pwm8" /* PWM设 备 名 称 */
#define PWM_DEV_CHANNEL     1 << 0/* PWM通 道 */struct rt_device_pwm *pwm_dev; /* PWM设 备 句 柄 */static void pwm_led_thread_entry(void *parameter)
{rt_uint32_t period, pulse, dir;period = 500000; /* 周 期 为0.5ms, 单 位 为 纳 秒ns */dir = 1; /* PWM脉 冲 宽 度 值 的 增 减 方 向 */pulse = 0; /* PWM脉 冲 宽 度 值, 单 位 为 纳秒ns *//* 查 找 设 备 */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;}rt_kprintf("pwm sample run ! find %s device!\n", PWM_DEV_NAME);/* 设 置PWM周 期 和 脉 冲 宽 度 默 认 值 */rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);/* 使 能 设 备 */rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);while (1){rt_thread_mdelay(50);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);}
}static int pwm_led_init(void)
{static rt_thread_t tid_pwmled = RT_NULL;rt_err_t ret = RT_EOK;/* 创建 serial 线程 */tid_pwmled = rt_thread_create("t_pwmled",pwm_led_thread_entry, RT_NULL, 512, 24, 10);/* 创建成功则启动线程 */if (tid_pwmled != RT_NULL){rt_thread_startup(tid_pwmled);}else{ret = RT_ERROR;}return ret;}int main(void)
{int count = 1;//初始化pwmpwm_led_init();while (count++){LOG_D("Hello RT-Thread!");rt_thread_mdelay(1000);}return RT_EOK;
}

使用示波器查看
在这里插入图片描述
因为main代码中修改的是占空比,使用万用笔测量PI5 也会发现电压在循环从小到大变化

#常见错误

…/drivers/drv_pwm.c:182:5: error: ‘PWM8_CONFIG’ undeclared here (not in a function)
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-4579036.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

抠图再也不用ps啦

大家在处理图片的时候经常会为了抠图头大吧.... 尤其是没有PS基础的小编们,特别费劲的用ps软件慢慢的抠图&#xff0c;效果还不满意真是心累呀~ 制作微信公众号文章中想要设置透明的图片放到背景图里&#xff0c;抠图是必须要做的一件事&#xff0c;这边给大家介绍下如何快速…

怎么批量抠复杂的图_PhotoShop怎么抠图?ps最简单的抠图方法是什么?

步骤1&#xff1a;正确选择图片为了获得最佳效果&#xff0c;您的图像应 在要剪切的对象和背景之间具有 最大的分辨率和对比度。这对于快速&#xff0c;干净地排除对象至关重要。步骤2&#xff1a;选择主题要应用新的“选择主题”功能&#xff0c;在Photoshop CC 2018&#xff…

ps抠图的两种方式[杂]

1.前言&#xff1a;以前工作需要学了点抠图的技巧&#xff0c;输出的文档倒是很详细&#xff0c;但是因为隐私问题不便公开&#xff0c;趁周末翻出来整理下做个移动笔记&#xff0c;顺便复习下。 2.目标和资源&#xff1a;目标是要抠出来这两张图片&#xff0c;psd资源&#x…

java成员变量/局部变量2023017

成员变量/局部变量 1.定义位置不同&#xff0c;成员变量定义在类里&#xff0c;局部变量定义在类的方法里。 来自网络 2.成员变量中&#xff0c;其中类变量从该类的准备阶段起开始存在&#xff0c;直到系统完全销毁这个类&#xff0c;类变量的作用域与这个类的生存范围相同&…

基于Distflow的最优潮流模型(OPF)--模型推导篇

开篇 前言&#xff1a;自打上期内容火电机组经济调度建模及求解——基础篇推出以后&#xff0c;有小伙伴留言&#xff1a;“不考虑潮流问题的经济调度都是耍流氓。”作为一个有文化的流氓&#xff0c;我们尝试着为大家科普潮流计算。对于电力系统而言&#xff0c;潮流计算是一…

NCF模型

NCF 论文地址&#xff1a;https://arxiv.org/pdf/1708.05031.pdf 论文名称&#xff1a;Neural Collaborative Filtering 目前深度学习在推荐中的应用&#xff0c;主要采用一些辅助信息&#xff0c;例如&#xff1a;item的文本描述、音乐的声学特征。当采用协同过滤对用户和I…

Lua脚本如何调用C/C++模块,Windows以及Linux版本演示

Windows下 我用的是vs2019&#xff0c;由于Windows下不像Linux可以直接直接安装lua程序直接运行lua代码&#xff0c;所以这里我们演示的是&#xff0c;通过c/c调用lua脚本&#xff0c;lua脚本再调用其他的C/C文件。 先用vs2019创建一个windows桌面向导–控制台程序的工程 注…

阅读LXH《FFMPEG+SDL的视频播放器》总结

一、原文地址 https://blog.csdn.net/leixiaohua1020/article/details/46889389 在此向雷霄骅致敬&#xff01;&#xff01;&#xff01; 二、视频播放器实现思路 1&#xff09;视频播放器大致可分为&#xff0c;视频文件IO模块&#xff0c;解复用模块&#xff0c;音视频解码模…

爬虫 Pinterest 多个接口分析(uqPN4sH5tPPJ5727zfjVvg==)

目标网站&#xff1a;aHR0cHM6Ly93d3cucGludGVyZXN0LmNvbS8关键词搜索正文接口正文接口①正文接口②评论数接口父评论子评论粉丝数接口粉丝数接口①粉丝数接口②关键词搜索 selenium 输入关键词模拟按键回车 el driver.find_element_by_xpath(//input[contains(value, &quo…

一波面经。。。

美团2015校招面经-软件研发岗 (拿到offer) 一面上来我问“要自我介绍不&#xff1f;”。面试官一上来说不用了&#xff0c;先写几段代码吧&#xff01;然后&#xff0c;第一题&#xff1a;给你两个字符串str1&#xff0c;str2&#xff0c;找出str2在str1中的位置。我一看题目心…

JAVA 工程师的成长路程

在知乎中发现了一个问题&#xff0c;很有共性&#xff0c;给大家个借鉴。当然你不可以是一个小菜鸟。 在北京三年java开发经验月薪16k&#xff0c;如何在四年经验时要到20k&#xff1f; 本人半道出家的程序员&#xff0c;从不伪造简历&#xff0c;起点低&#xff0c;所以三年时…

ArcMap进行插值分析

1、使用空气监测站数值制作插值专题图 [1]导航至【6-Data】-【data2】文件夹。 [2]新建一个gdb&#xff0c;用于保存分析的结果&#xff0c;在文件夹上点击鼠标右键&#xff0c;选择【新建】-【文件地理数据库】。 [3]将我们新建的gdb设为【默认地理数据库】。 [4]加载数据&am…

Python 重写一个提取字符串中行政区划的 Series(下)

Python 重写一个提取字符串中行政区划的 Series&#xff08;下&#xff09;创作背景思路分析 - 编写类方法返回一个结果返回 Series 结果结尾创作背景 本菜鸡最近在数据分析时遇到这样一列数据&#xff0c;如图 我想进行的操作是&#xff1a; 提取其中 各行政区划及名称。eg…

iDesktopX空间数据处理之行政区划拆分(分组拆分)

一、需求 之前遇到一个使用场景&#xff0c;拿到一份全国的空间数据&#xff0c;需要按照记录所属省份进行拆分&#xff0c;拆分结果为每个省一个数据集。 数据情况描述&#xff1a;数据类型为点数据集&#xff0c;属性中未包含所属省份信息 二、解决思路 使用iDesktopX的空间数…

【数据分析】费米问题

目录 1、破题能力 2、框架与逻辑 需求端 供给端 供需结合 3、发散思维 4、相关题目 转载1&#xff1a;https://mp.weixin.qq.com/s/gEHs2MWgBFn70StSmJD2tQ 转载2&#xff1a;WX公众号《阿狸与小兔》 1、破题能力 这里要强调的第一条原则也是最重要的原则&#xff1a;…

IP3 三阶交调截取点测试

放大器、混频器和振荡器的通用规范 本文介绍并定义了在混频器、放大器和振荡器的数据资料中用到的RF术语,包括增益、变频增益、相位噪声、三阶截取点、P1dB、插入损耗、输出功率、调谐增益和调谐范围,另外还给出了图形和图像以阐明关键的概念。 这些在无线IC数据资料中出现的通…

三阶截断点 IP3: third-order intercept point

双音或多音信号在非线性器件中会产生交调&#xff1a; 多数交调产生的信号在带外&#xff0c;不会引入问题。但是3阶信号离基频最近&#xff0c;有可能落入带内&#xff0c;从而使输出产生非线性或者失真。 IP3就是一个很重要的测量参数 例如放大器&#xff0c;基频是1&#xf…

三阶交调

作者&#xff1a;桂。 时间&#xff1a;2018-03-26 23:18:58 链接&#xff1a;http://www.cnblogs.com/xingshansi/p/8654795.html 前言 接收机中&#xff0c;人们总希望同时获得高灵敏度和大动态范围&#xff0c;遗憾的是&#xff0c;在接收机中增益越高&#xff08;灵敏度越…

Java三阶(1)-网络编程

文章目录网络基础相关概念网络通信IP地址域名端口号&#xff08;酒店房间号&#xff09;网络协议TCP和UDPInetAddress类相关方法Socket基本介绍TCP网络通信编程基本介绍应用案例1&#xff08;使用字节流&#xff09;案例2&#xff08;使用字节流&#xff09;案例3&#xff08;使…

悼念王选:伟大发明家和失意企业家间的孤独者(2006.03.13 来自:IT时代周刊)

“就像新闻联播里的国家领导人一样&#xff0c;感觉很遥远。”当微软亚洲研究院的曾凤萍来到王选的灵堂&#xff0c;向自己的师爷——王选告别时&#xff0c;他对王选还是那么陌生。王选已经淡出人们视野好几年了。直到2006年2月13日&#xff0c;他的突然辞世才重新引发人们的关…