BearPi Std 板从入门到放弃 - 先天神魂篇(2)(RT-Thread LED PWM驱动)

news2024/12/23 23:11:29

简介

基于 BearPi Std 板从入门到放弃 - 先天神魂篇(1)(RT-Thread 指令点亮LED) 创建的项目, 添加PWM驱动LED的方式实现呼吸灯功能, 电路板及相关使用到的配件说明
开发板 : Bearpi Std(小熊派标准板)
主芯片: STM32L431RCT6
E53_ST1扩展板/E53_IA1扩展板: 因为这两块扩张板都有LED灯接到
PA0 : PA0/TIM2_CH1 的PWM输出引脚
项目在Keil中进行编程使用

步骤

  1. 打开 CubeMX_Config.ioc
    双击项目目录下的 stm32l431-BearPi\board\CubeMX_Config\CubeMX_Config.ioc
    配置PA0 引脚为 TIM2_CH1 及 设置 TIM2
    参考 : BearPi Std 板从入门到放弃 - 引气入体篇(10)(PWM)

  2. RT-Thread 开启PWM支持
    a. stm32l431-BearPi/rtconfig.h 添加
    /* 开启RT-RThread PWM模块功能 /
    #define RT_USING_PWM
    /
    注册PWM2设备 */
    #define BSP_USING_PWM
    #define BSP_USING_PWM2
    #define BSP_USING_PWM2_CH1

b. 打开env 并 输入 scons --target=mdk5 -s 重新生成项目,pwm的相关库才会添加到Keil工程配置文件中

c. board/board.h 添加
#define BSP_USING_PWM
#define BSP_USING_PWM2
#define BSP_USING_PWM2_CH1
d. 双击打开 board/CubeMX_Config\CubeMX_Config.ioc, 配置 PA0 口
PA0 口设置
在这里插入图片描述
TIM2 设置
在这里插入图片描述
e. 生成代码
在这里插入图片描述
3. 编译烧录
打开串口软件并连接上设备 输入指令 list device
在这里插入图片描述
4. 添加用户代码

a. 在 applications 目录下创建led_pwm.c文件, 并添加到项目中
led_pwm.c文件

#include <board.h>
#include <rtthread.h>
#include <drv_gpio.h>
#include <rtdevice.h>

#define PWM_DEV_NAME "pwm2" /* PWM设备名称 */
#define PWM_DEV_CHANNEL 1 /* PWM通道 */
struct rt_device_pwm *pwm_dev; /* PWM设备句柄 */

static void led_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;
		}
		/* 设置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(int argc, char *argv[])
static int pwm_led(void)
{
		rt_thread_t tid = RT_NULL;
		rt_err_t ret = RT_EOK;
	
		tid = rt_thread_create("pwm_led",
														led_entry,
														RT_NULL,
														512,
                            RT_THREAD_PRIORITY_MAX / 3,
                            20);
	
		if (tid != RT_NULL)
		{
				rt_thread_startup(tid);
		}
		else
		{
				ret = RT_ERROR;
		}
		
		return ret;
}

/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(pwm_led, pwm led test);

  1. 编译烧录
  2. 测试
    list device # 可以看到pwm2设备
    help # 可以看到pwm_led 的指令
    pwm_led # 可以看到E53_IA1 扩展板上的LED灯 有呼吸效果
    list thread # 可以看到pwm_led的线程在执行
    在这里插入图片描述

项目代码

参考:
RT-Thread 内核 - 线管管理
RT-Thread PWM 设备
BearPi Std 板从入门到放弃 - 引气入体篇(10)(PWM)
RT-Thread 工程创建

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【acwing】92. 递归实现指数型枚举

穿越隧道 递归枚举、位运算 方法① 从1到n&#xff0c;顺序访问每位数&#xff0c;是否选择&#xff0c;每位数有两种状态&#xff0c;选1或不选0. AC代码如下&#xff1a; #include <iostream> using namespace std;const int N 100; // bool st[N]; int n;void dfs(in…

智能优化算法应用:基于指数分布算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于指数分布算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于指数分布算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.指数分布算法4.实验参数设定5.算法结果6.参考…

优雅玩转实验室服务器(一)登录服务器

这篇文章更加偏向于使用python程序进行研究的朋友们 原料 Windows主机实验室Linux服务器&#xff08;可以访问互联网&#xff09;一点点耐心 step.0 windows terminal is all you need 别跟我说什么putty&#xff0c;什么winscp&#xff0c;我就是单推Win11自带的软件——win…

DNS漫游指南:从网址到IP的奇妙之旅

当用户在浏览器中输入特定网站时发生的整个端到端过程可以参考下图 1*4vb-NMUuYTzYBYUFSuSKLw.png 问题&#xff1a; 什么是 DNS&#xff1f; 答案 → DNS 指的是域名系统&#xff08;Domain Name System&#xff09;。DNS 是互联网的目录&#xff0c;将人类可读的域名&#…

佛山陶企再造行业新风口,开启中国陶瓷下半场

近年来&#xff0c;消费形态逐渐呈现年轻化、时尚化、数字化的趋势&#xff0c;新一地居住者对于居住环境的品质和舒适度要求日益提高。伴随着新消费势力的崛起&#xff0c;家居建材行业消费转型升级已成必然。“千年陶都”佛山作为我国陶瓷行业的风向标&#xff0c;率先推进技…

漏洞复现-云安宝-云匣子Fastjson命令执行(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

在做题中学习(32):只出现一次的数字 III

260. 只出现一次的数字 III - 力扣&#xff08;LeetCode&#xff09; 根据题目可知&#xff1a;有两个元素只出现一次&#xff0c;其余出现两次。 而在只出现一次的数字 I 里&#xff0c;只有一个元素出现一次&#xff0c;可以用异或的方式直接得到最后的答案&#xff0c;而此…

基于导数Zernike多项式拟合技术的干涉测量二维相位展开算法(原文翻译)

Zixin Zhao1&#xff0c;Hong Zhao1、Lu Zhang 1&#xff0c;Fen Gao2&#xff0c;Yuwei Qin3&#xff0c;Hubing Du 摘要: 我们提出了一种适用于一般干涉测量应用的相位展开方法。所提出的方法依赖于导数泽尼克多项式拟合&#xff08;DZPF&#xff09;技术&#xff0c;其中相…

Datawhale聪明办法学Python(task2Getting Started)

一、课程基本结构 课程开源地址&#xff1a;课程简介 - 聪明办法学 Python 第二版 章节结构&#xff1a; Chapter 0 安装 InstallationChapter 1 启航 Getting StartedChapter 2 数据类型和操作 Data Types and OperatorsChapter 3 变量与函数 Variables and FunctionsChapte…

马赛克,克星,真来了!v2.0

大家好&#xff0c;今天继续聊聊 AI 开源项目 AI 开源项目 1、DemoFusion AI 绘画的潜力还没有充分挖掘出来&#xff0c;仍然还有上升的空间。 DemoFusion 就是这么一个开源项目&#xff0c;继续深挖了 AI 绘画在高分辨率图片生成的效果。 提高分辨率&#xff0c;马赛克&a…

算法 - 二分搜索法 / 二分法(704)

原理&#xff1a; 利用数组的有序性&#xff0c;每次取查找范围的中间点&#xff0c;缩窄一半的查找空间。比较中间值和目标值的大小&#xff0c;直到找到目标值或者查找区间为空时返回。 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目&…

2023-12-05 Qt学习总结10

点击 <C 语言编程核心突破> 快速C语言入门 Qt学习总结 前言二十六 学生信息管理系统插入介绍: QTableView和QSqlTableModelQTableViewQSqlTableModel 程序所用数据库表格程序组成以及界面学生端源码:管理员端源码: 总结 前言 要解决问题: 学习qt最核心知识, 多一个都不…

在线原型设计网站有哪些?这7个超好用!

如今&#xff0c;在线软件逐渐成为主流&#xff0c;网站原型设计工具也不例外。与桌面相比&#xff0c;在线原型工具具有独特的优势。都不需要安装、限制位置或限制操作系统。以下将为您推荐 7 款非常实用的在线原型设计工具。看看有没有你会喜欢的呢。 1、即时设计 即时设计是…

sleep和wait区别,并且查看线程运行状态

一、sleep和wait区别 区别一&#xff1a;语法使用不同 wait 方法必须配合 synchronized 一起使用&#xff0c;不然在运行时就会抛出 IllegalMonitorStateException 的异常 而 sleep 可以单独使用&#xff0c;无需配合 synchronized 一起使用。 区别二&#xff1a;所属类不同…

【动态规划精选题目】1、斐波那契数列模型

此动态规划系列主要讲解大约10个系列【后续持续更新】 本篇讲解入门级&#xff1a;斐波那契模型&#xff0c;会在讲解题目同时给出AC代码 为什么叫斐波那契数列模型&#xff1f;因为本篇4道题的状态转移方程都跟斐波那契递推方程差不多&#xff0c;但这点不重要&#xff0c;请往…

Python 全栈体系【四阶】(四)

第四章 机器学习 一、人工智能概述 1. 什么是人工智能 人工智能&#xff08;Artificial Intelligence&#xff09;是计算机科学的一个分支学科&#xff0c;主要研究用计算机模拟人的思考方式和行为方式&#xff0c;从而在某些领域代替人进行工作。 2. 人工智能的学科体系 …

Unity-小工具-LookAt

Unity-小工具-LookAt &#x1f959;介绍 &#x1f959;介绍 &#x1f4a1;通过扩展方法调用 gameObject.LookAtTarget&#xff0c;让物体转向目标位置 &#x1f4a1;gameObject.StopLookat 停止更新 &#x1f4a1;可以在调用时传入自动停止标记&#xff0c;等转向目标位置后自…

conda环境下ImportError: libmkl_intel_lp64.so.1: cannot open shared object file问题解决

1 问题描述 conda环境下运行模型推理&#xff0c;出现如下错误&#xff1a; (retalking) [rootlocalhost video-retalking]# python inference.py --face examples/face/01.mp4 --audio examples/audio/01.wav --outfile results/01.mp4 Traceback (most recent call last):F…

Fiddler中AutoResponder的简单使用

AutoResponder&#xff0c;自动回复器&#xff0c;用于将 HTTP 请求重定向为指定的返回类型。 这个功能有点像是一个代理转发器&#xff0c;可以将某一请求的响应结果替换成指定的资源&#xff0c;可以是某个页面也可以是某个本地文件 1.使用 打开“Fiddler”&#xff0c;点击…