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

简介

基于 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 工程创建

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

buuctf-Misc 题目解答分解82-84

82.从娃娃抓起 汉字编码 有两种一种是GB2312 另一种是五笔输入 带数字的是电报码 电报码在线翻译&#xff08;国际摩尔斯电码及中文电码&#xff09; - 千千秀字 解密是人工智能 汉字五笔编码批量查询&#xff1a;86版五笔编码、98版五笔编码、18030版五笔编码&#xff1b;五…

智慧文旅云平台建设方案:PPT全文30页,附下载

关键词&#xff1a;智慧文旅解决方案&#xff0c;智慧文旅建设方案&#xff0c;智慧文旅仓&#xff0c;智慧旅游景区方案&#xff0c;智慧旅游服务平台&#xff0c;智慧旅游技术应用&#xff0c;智慧旅游典型案例 一、智慧文旅云平台建设背景 1、旅游消费升级&#xff1a;随着…

文件搜索项目演示

演示功能搜索功能1&#xff1a;根据文件名搜索2&#xff1a;根据文件路径搜索3&#xff1a;根据文件名拼音(全拼、首拼)搜索 选择更新目录功能自动初始化和定时更新功能程序文件项目知识介绍 演示功能 搜索功能 1&#xff1a;根据文件名搜索 2&#xff1a;根据文件路径搜索 3…

【WebRTC】【Unity】Unity Web RTC1-Unity中简单实现远程画面

【项目资源下载】 本篇配套直接打开可用的项目包地址&#xff0c;欢迎下载&#xff1a; https://download.csdn.net/download/weixin_41697242/88612084 【背景】 想要在Unity中实现实时远程桌面&#xff0c;找到了Render Streaming这个手段&#xff0c;本篇介绍相应的使用方…

Nginx实际问题解决——如何指定地址访问指定页面

Nginx实际问题解决——如何指定地址访问指定页面 问题复现 /var/www/dist/biographicalNotes/下面有一个Html文件 biographicalNotes.html,我实际的nginx代理是这样的 server {listen 8080;server_name localhost;root /var/www/dist;index index.html;location / {try_files…

使用Emscripten开发网页应用的注意事项

一.小心int64 导出C/C函数包含int64 WebAssembly原生&#xff08;c/c&#xff09;支持int64位整型数算术运算。 JavaScript只有一种数值类型&#xff1a;number——等同于C语言中的double&#xff0c;JavaScript本质上无法直接表达64位整型数&#xff0c;因此目前的WebAssem…

C++模板类的介绍

C模板类的介绍 C模板类是一种通用编程技术&#xff0c;允许程序员创建可处理多种数据类型的通用类。通过使用模板&#xff0c;我们可以编写一段能够处理不同类型数据的代码&#xff0c;而无需为每一种数据类型单独编写特定的代码。这大大增强了代码的复用性和灵活性。 基本概念…

飞天使-linux操作的一些技巧与知识点2-TCP的三次握手以及四次挥手以及转换状态

文章目录 TCP 的三次握手四次挥手转换状态 TCP 的三次握手 第一次&#xff0c;客户端与服务端建立链接&#xff0c;需要发送请求连接的消息 第二次&#xff0c;服务端接口到数据后&#xff0c;返回一个确认的操作*&#xff08;至此客户端和服务端链路建立成功&#xff09; 第三…

binlog+mysqldump恢复数据(误删数据库或者表)

表删除恢复 1、准备数据 首先准备数据库环境&#xff0c;测试数据库为speech1&#xff0c;如下&#xff1a; 为test数据表添加3条记录&#xff0c;如下&#xff1a;三行为新加的记录&#xff0c;添加后将test表删除。 2、恢复数据 查看binlog日志状态 SHOW MASTER STATUS…

汽车服务行业分析:预计2028年将达到38亿元

在推进加快检验机构建设同时&#xff0c;综合评估检验机构数量、分布和检测能力&#xff0c;探索试点汽车 4S 店开展检验&#xff0c;提供维修、保养、车检一体化服务。汽车服务主要是指围绕汽车展开的一系列服务活动&#xff0c;包括维修、美容、金融等&#xff0c;除具有一般…

c/c++ 结构体、联合体、枚举

结构体 结构体内存对齐规则&#xff1a; 1、结构体的第一个成员对齐到结构体变量起始位置偏移量为0的地址处 2、其他成员变量要对齐到某个数字&#xff08;对齐数&#xff09;的整数倍的地址处。 对齐数&#xff1a;编译器默认的一个对齐数与该成员变量大小的较小值。 vs 中…

【STM32】电机驱动

一、电机分类 二、直流电机的分类 1.有刷电机 2.无刷电机 3.直流减速电机 三、H桥电路 正向旋转 驱动Q1和Q4 反向旋转 驱动Q2和Q3 四、MC3386电机驱动芯片 1.基本原理图 1&#xff09;前进/后退&#xff1a;IN1和IN2的电平顺序决定电机的正反转 2&#xff09;调节速度&#…

设计未泄密,图纸有守护者——迅软DSE加密软件专题解析!

为何使用图纸加密软件&#xff1f; 对于许多设计单位&#xff08;如&#xff1a;建筑设计、鞋服设计、勘察测绘、平面设计等&#xff09;而言&#xff0c;其内部海量的设计图纸都是以电子文件的形式存在于终端电脑和服务器上。而在图纸的设计生产过程中&#xff0c;一般会经过…

【ArcGIS微课1000例】0079:ArcGIS Earth根据经纬坐标生成点shapefile

本文以气象台站数据的生成为例,详细介绍ArcGIS Earth中导入X、Y经纬度坐标,生成Shapefile点数据的流程。 文章目录 一、气象台站分布二、添加经纬度坐标三、符号化设置四、另存为一、气象台站分布 根据气象台站的经纬度坐标,可以很方便的在各种GIS平台上生成点,并保存为多…

Python从入门到精通七:Python函数进阶

函数多返回值 学习目标&#xff1a; 知道函数如何返回多个返回值 问: 如果一个函数如些两个return (如下所示)&#xff0c;程序如何执行&#xff1f; 答&#xff1a;只执行了第一个return&#xff0c;原因是因为return可以退出当前函数&#xff0c;导致return下方的代码不执…

如何通过上下滑动实现亮度和音量调节(ArkUI)

场景说明 在音视频应用中通常可以通过上下滑动来调节屏幕亮度和音量大小&#xff0c;本例即为大家介绍如何实现上述UI效果。 说明&#xff1a; 由于当前亮度和音量调节功能仅对系统应用开发&#xff0c;所以本例仅讲解UI效果的实现。 效果呈现 本例效果如下&#xff1a; 当在…

Apollo入门与工作原理Apollo与Nacos的区别

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;2022年度博客之星全国TOP3&#xff0c;专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化&#xff0c;文章内容兼具广度、深度、大厂技术方案&#xff0c;对待技术喜欢推理加验证&#xff0c;就职于…

【尘缘送书第七期】2023年度盘点:智能汽车 | 自动驾驶 | 车联网

【文末送书】今天推荐几本智能汽车 | 自动驾驶 | 车联网领域优质书籍。 目录 引言1 《智能汽车》2 《SoC底层软件低功耗系统设计与实现》3 《SoC设计指南》4 《蜂窝车联网与网联自动驾驶》5 《智能汽车网络安全权威指南&#xff08;上册&#xff09;》6 《智能汽车网络安全权威…

智能优化算法应用:基于萤火虫算法3D无线传感器网络(WSN)覆盖优化 - 附代码

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

Mybatis映射接口的动态代理实现原理

Mybatis映射接口的动态代理实现原理 在上一节中&#xff0c;我们介绍了MyBatis的核心配置文件加载流程&#xff0c;Mybatis核心配置文件加载流程详解 在文中&#xff0c;我们介绍了MyBatis在加载配置文件的过程中会针对每个接口类都生成一个相应的MapperProxyFactory动态代理工…