RT-Thread+STM32L475VET6实现呼吸灯
文章目录
- 前言
- 一、板载资源资源说明
- 二、具体步骤
- 1.新建rt_thread项目
- 2. 打开PWM设备驱动
- 3. 在Stm32CubeMX配置定时器
- 3.1打开Stm32CubeMX
- 3.2 使用外部高速时钟,并修改时钟树
- 3.3打开定时器1,并配置通道一为PWM输出模式(定时器根据自己需求调整)
- 3.4 打开串口
- 3.5 生成工程
- 4. 修改时钟源
- 4.1 进入CubeMX生成的main.c,复制SystemClock_Config函数的函数体,粘贴到drivers文件下drv_clk.c的system_clock_config函数中,覆盖原内容
- 4.2 修改外部时钟
- 5. 配置PWM
- 5.1声明PWM及其通道
- 5.2 剪切CubeMX生成的stm32l4xx_hal_msp.c中的两个函数,粘贴到driver文件下的board.c中,并修改名称
- 6. 完成上述步骤后,编译下载
前言
本文采用开发板为STM32L475VET6(潘多拉开发板),使用RT_Thread Studio基于芯片开发模式,完成PWM实验,实现板载呼吸灯效果

一、板载资源资源说明
PE9,对应开发板的板载RGB蓝灯,同时对应定时器1的通道1
二、具体步骤
1.新建rt_thread项目

2. 打开PWM设备驱动
在RT-Thread Setting的组件栏中

3. 在Stm32CubeMX配置定时器
3.1打开Stm32CubeMX

3.2 使用外部高速时钟,并修改时钟树


3.3打开定时器1,并配置通道一为PWM输出模式(定时器根据自己需求调整)
打开即可,参数可不设置

3.4 打开串口

3.5 生成工程

4. 修改时钟源
项目默认使用内部时钟源,这里改成外部时钟源,本步可选可不选
4.1 进入CubeMX生成的main.c,复制SystemClock_Config函数的函数体,粘贴到drivers文件下drv_clk.c的system_clock_config函数中,覆盖原内容


4.2 修改外部时钟

5. 配置PWM
官方给出配置步骤,第一步已在RT-Thread Setting中打开

5.1声明PWM及其通道

5.2 剪切CubeMX生成的stm32l4xx_hal_msp.c中的两个函数,粘贴到driver文件下的board.c中,并修改名称


6. 完成上述步骤后,编译下载
测试代码
/** 程序清单:这是一个 PWM 设备使用例程* 例程导出了 pwm_led_sample 命令到控制终端* 命令调用格式:pwm_led_sample* 程序功能:通过 PWM 设备控制 LED 灯的亮度,可以看到LED不停的由暗变到亮,然后又从亮变到暗。
*/#include <rtthread.h>
#include <rtdevice.h>#define PWM_DEV_NAME "pwm1" /* PWM设备名称 */
#define PWM_DEV_CHANNEL 1 /* PWM通道 */struct rt_device_pwm *pwm_dev; /* PWM设备句柄 */int main(void)
{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;}/* 设置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);}return 0;
}
下载后,打开终端,如果出现反复按重启键,程序无响应,则需要打开libc


至此,实验完成
实验结果
相关文章:
RT-Thread+STM32L475VET6实现呼吸灯
文章目录 前言一、板载资源资源说明二、具体步骤1.新建rt_thread项目2. 打开PWM设备驱动3. 在Stm32CubeMX配置定时器3.1打开Stm32CubeMX3.2 使用外部高速时钟,并修改时钟树3.3打开定时器1,并配置通道一为PWM输出模式(定时器根据自己需求调整)3.4 打开串口…...
【Web前端开发精品课 HTML CSS JavaScript基础教程】第二十四章课后题答案
文章目录 问题1:问题2:问题3: 问题1: 在HTML中嵌入JavaScript,应该使用的标签是( )。 选项: A. <style></style> B. <script></script> C. <js><…...
记录 pycharm 无法识别提示导入已有的模块解决方案 No module named ‘xxx‘
在windows下,使用pycharm开发项目,每个项目都有自己独立的虚拟环境,有时候就会出现,在该项目中明明已经安装了某个模块,但是在写代码的时候就是导入不了,无法识别导入,在运行的时候却又是正常的…...
网工项目实践2.6 广域网需求分析及方案制定
本专栏持续更新,整一个专栏为一个大型复杂网络工程项目。阅读本文章之前务必先看《本专栏必读》。 全网拓扑展示 一.广域网互联方式 1.专线 优点 稳定 独享。绝对安全。可靠性高,带宽高,完全取决于终端接口。 缺点: 费用高。建设时间长。难…...
【架构】分层架构 (Layered Architecture)
一、分层模型基础理论 模型是一种常见的软件设计架构,它将软件系统按照功能划分为不同的层次,每个层次都有特定的职责和功能…...
玩客云 IP查找
1.玩客云使用静态IP在不同网段路由器下不能使用,动态不好找IP地址 1.1使用python3 实现自动获取发送 import requests import os import socket# 从环境变量获取 PushPlus 的 token 和群组编码 PUSH_PLUS_TOKEN os.getenv("PUSH_PLUS_TOKEN") PUSH_PLU…...
Android - Handler使用post之后,Runnable没有执行
问题:子线程创建的Handler。如果 post 之后,在Handler.removeCallbacks(run)移除了,下次再使用Handler.postDelayed(Runnable)接口或者使用post时,Runnable是没有执行。导致没有收到消息。 解决办法:只有主线程创建的…...
MyBatis-Plus之通用枚举
MyBatis-Plus之通用枚举 前言 MyBatis-Plus中提供了通用枚举,简单来说就是将数据库中的某一字段的代替的含义转换成真实的含义将数据展示给用户,用户在存储时也会将真实值转换成代替的数字存入到数据库中。举个例子:用户性别在数据库中存储…...
基于Spring Boot的图书管理系统设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
如何在 VS Code 中快速使用 Copilot 来辅助开发
在日常开发中,编写代码往往是最耗时的环节之一。而 GitHub Copilot,作为一款 AI 编码助手,可以帮助开发者 自动补全代码、生成代码片段,甚至直接编写完整的函数,大幅提升编码效率。那么,如何在 VS Code 中快…...
12.1 Android中协程的基本使用
文章目录 前言1、导入依赖2、使用协程获取服务器中的数据2.1 定义请求回调结果的数据类2.2 网络请求 3、网络回调结构4、通过ViewModel处理网络请求数据 前言 在使用协程的时候一直没有一个具体的概念,只知道协程能够使得异步操作等同于同步操作,且不会…...
【黑马点评优化】2-Canel实现多级缓存(Redis+Caffeine)同步
【黑马点评优化】2-Canel实现多级缓存(RedisCaffeine)同步 0 背景1 配置MySQL1.1 开启MySQL的binlog功能1.1.1 找到mysql配置文件my.ini的位置1.1.2 开启binlog 1.2 创建canal用户 2 下载配置canal2.1 canal 1.1.5下载2.2 配置canal2.3 启动canal2.4 测试…...
php-fpm
摘要 php-fpm(fastcgi process manager)是PHP 的FastCGI管理器,管理PHP的FastCGI进程,提升PHP应用的性能和稳定性 php-fpm是一个高性能的php FastCGI管理器,提供了更好的php进程管理方式,可以有效的控制内存和进程,支…...
Python3测试开发面试题2
python的内存池机制 在Python中,内存管理是通过Python的内存管理器和C语言实现的,特别是依赖于CPython的实现。CPython使用一种名为“内存池”(memory pool)的技术来优化小对象(如小整数、短字符串等)的内…...
qt + opengl 给立方体增加阴影
在前几篇文章里面学会了通过opengl实现一个立方体,那么这篇我们来学习光照。 风氏光照模型的主要结构由3个分量组成:环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照。下面这张图展示了这些光照分量看起来的样子: 1 环境光照(Ambient …...
Webpack,Vite打包的理解
Webpack 和 Vite 都是现代前端开发中常用的构建工具,用于打包和优化项目代码。尽管它们的目标相似,但在设计理念、工作方式和适用场景上存在显著差异。 Webpack Webpack 是一个模块打包工具,主要用于将多个模块(如 JavaScript、…...
Vue 3 30天精进之旅:Day 25 - PWA支持
一、引言 在前面的24天中,我们已经深入探讨了Vue 3的许多核心概念和高级特性。今天,我们将进入一个全新的领域——PWA(Progressive Web App)。PWA是一种现代Web应用程序的开发模式,它结合了Web和原生应用的优点&#…...
机器学习-生命周期
假如一个用户向银行申请贷款,银行该如何对这个用户进行评估?很明显,银行首先需要调查清楚该用户的资金储备情况和信用历史等,然后再决定是否向其放款。 整个机器学习生命周期如下图所示: 1、定义问题 在使用机器学习中的术语表…...
大道至简 少字全意 易经的方式看 缓存 mybatis缓存 rendis缓存场景 案例
目录 介绍 mybatis缓存 一级缓存 1.是什么 2.特点 3.场景 mybatis 二级缓存 1.是什么 2.特点 3.配置步骤 注意 一级缓存问题 二级缓存问题 扩展 1.MyBatis集成 Redis 2.直接使用Redis redis 缓存 一、String 字符串 二、Llst 列表 三、Hash 哈希 四、Set…...
如何使用 Flutter DevTools 和 PerformanceOverlay 监控性能瓶颈
使用 Flutter DevTools 和 PerformanceOverlay 监控性能瓶颈:详细分析与实战 在开发 Flutter 应用时,性能问题可能会导致用户体验下降,比如页面卡顿、掉帧、内存泄漏等。为了定位和解决这些问题,Flutter 提供了强大的性能监控工具…...
基于深度学习的蔬菜识别系统,resnet50,vgg16,resnet34【pytorch框架,python代码】
更多图像分类、图像识别、目标检测、图像分割,图像检索等项目可从主页查看 功能演示(要看shi pin下面的简介): 蔬菜识别系统 resnet50,vgg16,resnet34 深度学习 卷积神经网络【pytorch框架,python源码】_哔哩哔哩_bil…...
4 种方法将 Mac 联系人同步到 iPhone
在 Mac 和 iPhone 之间管理联系人总会遇到各种问题。如果你也遇到这种情况,别担心,本文将教你4 种最省心的方法把 Mac 联系人同步到 iPhone,还会额外附上 iPhone 联系人传到 Mac 的技巧。跟着下面的方法操作,选择最适合你的即可。…...
如何用CaptainHook实现PHP项目的终极Git钩子配置:提升代码质量的7个实用技巧
如何用CaptainHook实现PHP项目的终极Git钩子配置:提升代码质量的7个实用技巧 【免费下载链接】awesome-php A curated list of amazingly awesome PHP libraries, resources and shiny things. 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-php 在P…...
AI+网络安全实战:构建人机协同工作流与提示工程技巧
1. 项目概述:一个聚焦于AI安全实战的技能图谱最近在GitHub上看到一个挺有意思的仓库,叫“Anthropic-Cybersecurity-Skills”。光看名字,你可能会觉得这又是一个关于网络安全技能树的普通列表。但点进去之后,我发现它的定位非常独特…...
高级PCB封装设计总翻车?问题不在布线,而在底层逻辑
做高速、高密度、高可靠产品的硬件工程师,几乎都被高级 PCB 封装坑过:BGA 扇出后信号眼图闭合、QFN 散热不均导致高温降额、微型器件焊接连锡虚焊、车规产品高低温后焊点脱落。明明照着手册画封装、DRC 全绿,一到打样量产就问题不断ÿ…...
我猜你也在找内网渗透的教程,这篇难道还不够你嚼烂?
前言 近年来,攻击者潜伏在企业内网进行攻击的安全事件屡见不鲜,攻击者在经常会企业的内网进行横向渗透,令防守方防不胜防。因此,我们应该严格控制好网络区域之间的访问规则,加大攻击横向渗透的阻力。本文由锦行科技的…...
AI内容安全工程:构建企业级LLM应用的防护体系
为什么内容安全是LLM应用的必答题? 2025年,全球已有多起因LLM应用内容安全缺失导致的重大事故:客服机器人被诱导发表种族歧视言论、AI助手泄露用户隐私数据、教育应用输出不适合未成年人的内容。随着AI监管法规趋严,内容安全不再是…...
别再死记硬背ATT协议了!用ESP32-C3实战拆解BLE属性读写(附代码避坑)
用ESP32-C3实战拆解BLE属性读写:从协议到代码的避坑指南 当你第一次在ESP-IDF环境中尝试BLE通信时,是否曾被这些场景困扰:手机APP发送的数据总是截断前20字节?明明设置了通知却收不到回调?权限配置看起来正确但设备始终…...
【Docker WASM边缘部署终极指南】:20年架构师亲授5大避坑法则与3个生产级优化技巧
更多请点击: https://intelliparadigm.com 第一章:Docker WASM边缘部署的核心价值与适用边界 为什么WASM正在重塑边缘容器范式 WebAssembly(WASM)以其沙箱安全、跨平台二进制可移植性及毫秒级冷启动能力,成为Docker在…...
ArchivePasswordTestTool:基于7zip引擎的高效压缩包密码自动化测试工具
ArchivePasswordTestTool:基于7zip引擎的高效压缩包密码自动化测试工具 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 在数字资…...
