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

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
在这里插入图片描述
在这里插入图片描述
至此,实验完成

实验结果

http://www.lryc.cn/news/539972.html

相关文章:

  • 【Web前端开发精品课 HTML CSS JavaScript基础教程】第二十四章课后题答案
  • 记录 pycharm 无法识别提示导入已有的模块解决方案 No module named ‘xxx‘
  • 网工项目实践2.6 广域网需求分析及方案制定
  • 【架构】分层架构 (Layered Architecture)
  • 玩客云 IP查找
  • Android - Handler使用post之后,Runnable没有执行
  • MyBatis-Plus之通用枚举
  • 基于Spring Boot的图书管理系统设计与实现(LW+源码+讲解)
  • 如何在 VS Code 中快速使用 Copilot 来辅助开发
  • 12.1 Android中协程的基本使用
  • 【黑马点评优化】2-Canel实现多级缓存(Redis+Caffeine)同步
  • php-fpm
  • Python3测试开发面试题2
  • qt + opengl 给立方体增加阴影
  • Webpack,Vite打包的理解
  • Vue 3 30天精进之旅:Day 25 - PWA支持
  • 机器学习-生命周期
  • 大道至简 少字全意 易经的方式看 缓存 mybatis缓存 rendis缓存场景 案例
  • 如何使用 Flutter DevTools 和 PerformanceOverlay 监控性能瓶颈
  • TS中Any和Unknown有什么区别
  • 【Mpx】-环境搭建项目创建(一)
  • PyQt加载UI文件
  • Java面试第二山!《计算机网络》!
  • Mysql基础语句
  • 连接池Java导包
  • 一些耳朵起茧子的名词解释
  • HBuilderX中,VUE生成随机数字,vue调用随机数函数
  • C#发送邮件
  • 2025-2-19学习笔记 : this关键字,constructor结构体,class类
  • 避坑:过早的文件结束符(EOF):解决“git clone龙蜥OS源码失败”的失败过程