当前位置: 首页 > news >正文

rt-thread pwm 多通道

一通道pwm参考
https://blog.csdn.net/yangshengwei230612/article/details/128738351?spm=1001.2014.3001.5501

以下主要是多通道与一通道的区别

芯片

stm32f407rgt6

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

添加PWM宏定义

#define BSP_USING_PWM8
#define BSP_USING_PWM8_CH1
#define BSP_USING_PWM8_CH2

在这里插入图片描述

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

使用STM32CubeIDE 生成 TIM 和 PWM驱动代码
2.1 使用STM32官方STM32CubeIDE配置TIM8 PWM CH1通道(即PI5)
定时器8:TIM8_CH1复用PI5
定时器8:TIM8_CH2复用PI6
在这里插入图片描述
使用外部高速时钟
在这里插入图片描述
配置时钟频率
在这里插入图片描述
设置生生成项目名称
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

将红框内的相关驱动代码拷贝到rt-thread pwm测试项目中的 drivers/drv_pwm.c 源文件在这里插入图片描述

2.3复制驱动代码

将上面keil中红框内的相关驱动代码拷贝到rt-thread pwm测试项目中的 drivers/drv_pwm.c 源文件
在这里插入图片描述
修改pwm_config.h文件
如果没有对应pwm配置则添加

#ifdef BSP_USING_PWM8
#ifndef PWM8_CONFIG
#define PWM8_CONFIG                             \{                                           \.tim_handle.Instance     = TIM8,         \.name                    = "pwm8",       \.channel                 = 0             \}
#endif /* PWM5_CONFIG */
#endif /* BSP_USING_PWM8 */

在这里插入图片描述

4、创建线程 PWM 驱动

4.1 具体线程测试代码如下

/** 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     1/* PWM通 道 */
#define PWM_DEV_CHANNEL_2    2 /* PWM通 道 */struct rt_device_pwm *pwm_dev; /* PWM设 备 句 柄 */static void pwm_led_thread_entry(void *parameter)
{rt_uint32_t period, pulse, dir, max_period;period = 250000; /* 周 期 为0.5ms, 单 位 为 纳 秒ns */dir = 1; /* PWM脉 冲 宽 度 值 的 增 减 方 向 */pulse = period/2; /* PWM脉 冲 宽 度 值, 单 位 为 纳秒ns */max_period = 500000;/* 查 找 设 备 */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_1, period, pulse);/* 使 能 设 备 */rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL_1);while (0){rt_thread_mdelay(50);if (dir){period += 500; /* 从0值 开 始 每 次 增加5000ns */}else{period -= 500; /* 从 最 大 值 开 始 每 次减 少5000ns */}if (period >= max_period  ){dir = 0;// period = 500000;}if (period <= 250000){dir = 1;// period = 250000;}pulse = period/2;/* 设 置PWM周 期 和 脉 冲 宽 度 */rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL_1, 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;}//ch2
static void pwm_ch2_thread_entry(void *parameter)
{rt_uint32_t period, pulse, dir, max_period;period = 250000; /* 周 期 为0.5ms, 单 位 为 纳 秒ns */dir = 1; /* PWM脉 冲 宽 度 值 的 增 减 方 向 */pulse = period/2; /* PWM脉 冲 宽 度 值, 单 位 为 纳秒ns */max_period = 500000;/* 查 找 设 备 */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_2, period, pulse);/* 使 能 设 备 */rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL_2);while (0){rt_thread_mdelay(50);if (dir){period += 500; /* 从0值 开 始 每 次 增加5000ns */}else{period -= 500; /* 从 最 大 值 开 始 每 次减 少5000ns */}if (period >= max_period  ){dir = 0;// period = 500000;}if (period <= 250000){dir = 1;// period = 250000;}pulse = period/2;/* 设 置PWM周 期 和 脉 冲 宽 度 */rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL_2, period, pulse);}
}static int pwm_ch2_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_ch2_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();pwm_ch2_init();while (count++){LOG_D("Hello RT-Thread!");rt_thread_mdelay(1000);}return RT_EOK;
}

相关文章:

rt-thread pwm 多通道

一通道pwm参考 https://blog.csdn.net/yangshengwei230612/article/details/128738351?spm1001.2014.3001.5501 以下主要是多通道与一通道的区别 芯片 stm32f407rgt6 1、配置PWM设备驱动相关宏定义 添加PWM宏定义 #define BSP_USING_PWM8 #define BSP_USING_PWM8_CH1 #d…...

C语言练习 | 初学者经典练习汇总

目录 1、下面代码输出多少&#xff0c;为什么&#xff1f; 2、你要好好学习么&#xff1f; 3、一直写代码&#xff0c; 4、两个数求最大值 5、输入1-5输出工作日&#xff0c;输入6-7输出休息日&#xff0c;其他输入错误 6、写一个输入密码的代码 7、怎么样当输入数字时候…...

华为OD机试 - 自动曝光(Python) | 机试题算法思路 【2023】

最近更新的博客 华为OD机试 - 卡片组成的最大数字(Python) | 机试题算法思路 华为OD机试 - 网上商城优惠活动(一)(Python) | 机试题算法思路 华为OD机试 - 统计匹配的二元组个数(Python) | 机试题算法思路 华为OD机试 - 找到它(Python) | 机试题算法思路 华为OD机试…...

「6」线性代数(期末复习)

&#x1f680;&#x1f680;&#x1f680;大家觉不错的话&#xff0c;就恳求大家点点关注&#xff0c;点点小爱心&#xff0c;指点指点&#x1f680;&#x1f680;&#x1f680; 目录 第五章 相似矩阵及二次型 &2&#xff09;方阵的特征值与特征向量 &3&#xff…...

1.1 硬件与micropython固件烧录及自编译固件

1.ESP32硬件和固件 淘宝搜ESP32模块,20-50元都有,自带usb口,即插即用. 固件下载地址:MicroPython - Python for microcontrollers 2.烧录方法 为简化入门难度,建议此处先使用带GUI的开发工具THonny,记得不是给你理发的tony老师. 烧录的入口是: 后期通过脚本一次型生成和烧…...

【MySQL进阶】视图 存储过程 触发器

&#x1f60a;&#x1f60a;作者简介&#x1f60a;&#x1f60a; &#xff1a; 大家好&#xff0c;我是南瓜籽&#xff0c;一个在校大二学生&#xff0c;我将会持续分享Java相关知识。 &#x1f389;&#x1f389;个人主页&#x1f389;&#x1f389; &#xff1a; 南瓜籽的主页…...

[Linux篇] Linux常见命令和权限

文章目录使用XShell登录Linux1.Linux常用基本命令&#xff1a;1.1 ls&#xff08;列出当前的目录下都有哪些文件和目录&#xff09;1.2 cd (change directory 切换目录)1.3 pwd&#xff08;查看当前目录的绝对路径&#xff09;1.4 touch&#xff08;创建文件&#xff09;1.5 ca…...

29岁从事功能测试被辞,面试2个月都找不到工作吗?

最近一个28岁老同学联系我&#xff0c;因为被公司辞退&#xff0c;找我倾诉&#xff0c;于是写下此文。 他是14年二本毕业&#xff0c;在我的印象里人特别懒&#xff0c;不爱学习&#xff0c;专业不好&#xff0c;毕业前因为都没找到合适工作&#xff0c;直接去创业了&#xf…...

【C#个人错题笔记1】

观前提醒 记录一些我不会或者少见的内容&#xff0c;不一定适合所有人 字符串拼接 int a3,b8; Console.WriteLine(ab);//11 Console.WriteLine("ab");//ab Console.WriteLine(a""b);//38 Console.WriteLine("ab"ab);//ab38 Console.WriteLine…...

基于lambda的mongodb查询插件

需求背景需要一个像mybatis plus 一样的基于lambda, 且面向对象的查询mongo数据的插件。在网上找了很久&#xff0c;没有发现有类似功能的插件。于是自己手写了一个&#xff0c;借助mongoTemplate屏蔽了底层查询语句的实现细节。在此基础上&#xff0c;实现了查询的统一封装。技…...

基于微信小程序的微信社团小程序

文末联系获取源码 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏览器…...

GEE学习笔记 七十三:【GEE之Python版教程七】静态展示影像和动态展示影像

我们使用GEE在线编辑可以直接通过在线的网页可以加载展示我们计算的结果&#xff0c;而python版的GEE要展示我们的计算结果可能就比较麻烦。如果有同学看过GEE的python版API中可以找到一个类ee.mapclient&#xff0c;这个类的介绍是它是GEE官方通过Tk写的一个加载展示地图的类。…...

PGLBox全面解决图训练速度、成本、稳定性、复杂算法四大问题!

图神经网络&#xff08;Graph Neural Network&#xff0c;GNN&#xff09;是近年来出现的一种利用深度学习直接对图结构数据进行学习的方法&#xff0c;通过在图中的节点和边上制定聚合的策略&#xff0c;GNN能够学习到图结构数据中节点以及边内在规律和更加深层次的语义特征。…...

超详细的 pytest 教程(一)使用入门篇

前言 pytest到目前为止还没有翻译的比较好全面的使用文档&#xff0c;很多英文不太好的小伙伴&#xff0c;在学习时看英文文档还是很吃力。本来去年就计划写pytest详细的使用文档的&#xff0c;由于时间关系一直搁置&#xff0c;直到今天才开始写。本文是第一篇&#xff0c;主…...

二叉树理论基础知识点

二叉树的种类 在我们解题过程中二叉树有两种主要的形式&#xff1a;满二叉树和完全二叉树 满二叉树 满二叉树&#xff1a;如果一棵二叉树只有度为0的结点和度为2的结点&#xff0c;并且度为0的结点在同一层上&#xff0c;则这棵二叉树为满二叉树。 如图所示&#xff1a; 这…...

【算法基础】堆⭐⭐⭐

一、堆 1. 堆的概念 堆(heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质: (1)堆中某个结点的值总是不大于或不小于其父结点的值; (2)堆总是一棵完全二叉树。 将根结点最大的堆叫做最大堆或大根堆,根结点…...

时序预测 | MATLAB实现CNN-SVM卷积支持向量机时间序列预测

时序预测 | MATLAB实现CNN-SVM卷积支持向量机时间序列预测 目录时序预测 | MATLAB实现CNN-SVM卷积支持向量机时间序列预测预测效果基本介绍研究回顾程序设计参考资料预测效果 基本介绍 CNN-SVM预测模型将深度学习模型作为特征学习器&#xff0c;将SVM 支持向量机 作为训练器进行…...

【TypeScrip】TypeScrip的任意类型(Any 类型 和 unknown 顶级类型):

文章目录一、安转依赖&#xff1a;【1】nodejs 环境执行ts【2】使用ts-node二、Any 类型 和 unknown 顶级类型【1】没有强制限定哪种类型&#xff0c;随时切换类型都可以 我们可以对 any 进行任何操作&#xff0c;不需要检查类型【2】声明变量的时候没有指定任意类型默认为any【…...

智能洗地机什么牌子好?智能洗地机排行

要说家庭清洁热门的产品&#xff0c;洗地机肯定首当其冲&#xff0c;集洗吸拖为一体的清洁工具&#xff0c;省时又省力&#xff0c;可谓是家里清洁好助手&#xff0c;今天笔者就为大家介绍几款重量轻、噪音轻、拖地干净的洗地机! 一、CEYEE希亦T800洗地机 在国内&#xff0c;洗…...

【数据结构与算法】链表1:移除链表 设计链表链表反转(双指针法、递归法)

文章目录今日任务1.链表理论基础&#xff08;1&#xff09;什么是链表&#xff1f;&#xff08;2&#xff09;链表的类型&#xff08;3&#xff09;链表的存储方式&#xff08;4&#xff09;链表的定义&#xff08;5&#xff09;链表的操作&#xff08;6&#xff09;性能分析2.…...

山东大学软件学院面向对象简答题整理【个人向】

面向对象简答题整理【个人向】 0.试用面向对象语言简述改写和重定义的异同&#xff0c;以及方法绑定时的差别 改写是子类的方法和父类的方法具有相同的方法名和类型签名重定义是子类的方法和父类的方法方法名相同但类型签名不同在方法绑定时&#xff0c;改写是动态绑定&#…...

JAVA时间类及JAVA8新时间类

文章目录Java旧时间类关系图![在这里插入图片描述](https://img-blog.csdnimg.cn/e2c2c26c841e40bdb9cc85d0fc4bc1df.png)GMT、时间戳、统一标准时间、时区Java时间类创建时间类示例java.text.DateFormat时间格式转换java.util.Calendar总结Java时间类Java8新时间类InstantCloc…...

ASEMI代理FGH60N60SFD,安森美FGH60N60SFD原装IGBT

编辑-Z 安森美FGH60N60SFD原装IGBT参数&#xff1a; 型号&#xff1a;FGH60N60SFD 集电极到发射极电压&#xff08;VCES&#xff09;&#xff1a;600V 栅极到发射极电压&#xff08;VGES&#xff09;&#xff1a;20V 收集器电流&#xff08;IC&#xff09;&#xff1a;120…...

【云原生之Docker实战】使用dokcer部署web端vscode

【云原生之Docker实战】使用dokcer部署web端vscode 一、vscode-server介绍二、检查本地docke环境1.检查系统版本2.检查docker版本3.检查docker状态三、下载vscode镜像四、部署vscode-server1.创建安装目录2.创建vscode容器3.查看vscode容器状态4.查看vscode容器日志五、访问vsc…...

Docker安装Tomcat、mysql、redis

目录 前言 一、安装Tomcat 二、安装mysql &#xff08;一&#xff09;简单版 &#xff08;二&#xff09;实战版 三、安装redis 前言 镜像可以先去Docker Hub Container Image Library | App Containerization 左上角搜&#xff0c;然后点进入可以看到具体的命令&#…...

【python 基础篇 八】python的常用数据类型操作-------集合

目录1.集合的基本概念2.集合的定义2.1 可变集合 set定义2.2 不可变集合 fronzenset 定义2.3 集合定义的注意事项3.单一集合的常用操作4. 集合之间操作4.1 交集4.2 并集4.3 差集4.4 判定1.集合的基本概念 无序的&#xff0c;不可随机访问的&#xff0c;不可重复的元素集合与数学…...

Spring框架中问题补充

BeanFactory 和 ApplicationContext BeanFactory和ApplicationContext是接口。BeanFactory接口时spring框架的顶层接口&#xff0c;定义管理bean的最基本的方法&#xff0c;例如获取实例、判断等功能。 DefaultListableBeanFactory实现BeanFactory 接口,是主要的创建bean的工…...

【Leedcode】顺序表必备的三道面试题(附图解)

顺序表必备的三道面试题&#xff08;附图解&#xff09; 文章目录顺序表必备的三道面试题&#xff08;附图解&#xff09;前言一、第一题1.题目2.思路图解3.源码二、第二题1.题目2.思路图解3.源码三、第三题1.题目2.思路图解3.源码总结前言 本文给大家介绍三道顺序表学习过程中…...

SOFA Weekly|开源人、本周贡献 issue 精选

SOFA WEEKLY | 每周精选 筛选每周精华问答&#xff0c;同步开源进展欢迎留言互动&#xff5e;SOFAStack&#xff08;Scalable Open Financial Architecture Stack&#xff09;是蚂蚁集团自主研发的金融级云原生架构&#xff0c;包含了构建金融级云原生架构所需的各个组件&#…...

2023美赛 ICM E题详细版思路

问题E&#xff1a;光污染注&#xff1a;楷体为题目原文&#xff0c;宋体为思路部分首先&#xff0c;我们需要考虑的就是美赛ABEF的核心问题&#xff0c;数据。这里E题是以光污染为背景的题目&#xff0c;首当其冲的我们就需要收集一些数据以支撑我们的模型。对于E题提出的问题&…...

电商模板网站免费/百度提升优化

前言&#xff1a;使用“宇宙最强IDE”开发项目时&#xff0c;都需要根据不同情况选择一个项目模板&#xff0c;来满足开发需求&#xff1a;如下VS为我们提供了基础的项目模板&#xff0c;但现有项目模板未包含基础功能如&#xff1a;日志输出、审计日志、SwaggerUI、认证等&…...

vs2015 手机网站开发/seo工程师招聘

原题链接&#xff1a;https://uva.onlinejudge.org/index.php?optioncom_onlinejudge&Itemid8&pageshow_problem&problem2031 题意 给你一个有向图&#xff0c;问你定义一个环的平均值为这个环上所有边的平均值&#xff0c;问你最小的环的平均值是多少。 题解 一种…...

好网站制作/淘宝指数

首先在vue.config.js文件中添加 module.exports = {publicPath:“./”}1.vue项目npm run build 得到dist文件夹 dist文件夹内容示例 2.hbuilderX中创建空的5+APP项目 新建5+APP项目 3.将vue项目中dist文件夹下的内容全部拷贝粘贴到刚刚创建的5+APP项目文件夹下(重复的就…...

长葛做网站/营销必备十大软件

java错误-java.lang.ClassNotFoundException: org.aspectj.lang.annotation.Around 标签&#xff1a; aspectjrtaopjava2015-08-31 13:53 5521人阅读 评论(0) 收藏 举报分类&#xff1a;JAVA&#xff08;61&#xff09; 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经…...

11电影网/北京自动seo

AOP是什么&#xff1f;    AOP是OOP的延续&#xff0c;Aspect Oriented Programming的缩写&#xff0c;即面向方面编程。AOP是GoF设计模式的延续&#xff0c;设计模式追求的是调用者和被调用者之间的解耦&#xff0c;AOP也是这种目标的一 种实现。    案例:在应用程序中…...

php手机网站/四年级摘抄一小段新闻

简介 之前我们想到Excel解析一般是使用POI&#xff0c;但POI存在一个严重的问题&#xff0c;就是非常消耗内存。所以阿里人员对它进行了重写从而诞生了easyexcel&#xff0c;它解决了过于消耗内存问题&#xff0c;也对它进行了封装让使用者使用更加便利。 新手同学&#xff0…...