当前位置: 首页 > 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
在这里插入图片描述
在这里插入图片描述
至此,实验完成

实验结果

相关文章:

  • 【PLL】应用:同步
  • EasyRTC:轻量化SDK赋能嵌入式设备,开启智能硬件音视频通讯新篇章
  • 用 Python 构建简易操作系统:探索与实践
  • 在 Mac ARM 架构 (Apple Silicon,例如 M1, M2, M3 芯片) 上使用官方安装包安装 MySQL
  • 贴片式TF卡——雷龙CS SD NAND实测体验
  • shell编程总结
  • Leetcode 位计算
  • 【算法】------区间问题(贪心)
  • 本地部署DeepSeek大模型
  • ORM框架详解:为什么不直接写SQL?
  • MYSQL的第一次
  • C++中const T为什么少见?它有什么用途?
  • 使用 Docker 部署 Flask 应用
  • 【Android】Android 悬浮窗开发 ( 动态权限请求 | 前台服务和通知 | 悬浮窗创建 )
  • Java反射机制
  • Golang访问Google Sheet
  • Java常见问题(一)
  • 新数据结构(12)——代理
  • python入门笔记5-集合与字典
  • 基于Springboot的公寓报修管理系统【附源码】
  • 《九龙城寨之围城》斩获香港金像奖九项大奖,包括最佳影片
  • 女乘客遭顺风车甩客、深夜丢高速服务区,滴滴霸道回应:赔五百元
  • 伊朗南部港口火势蔓延,部分集装箱再次发生爆炸
  • 仅退款正式成历史?仅退款究竟该不该有?
  • 乌克兰基辅遭大规模袭击,已致12人死亡
  • 印控克什米尔恐袭引爆印巴新一轮外交摩擦,地区安全风险骤增