主页 > 手机  > 

RT-Thread+STM32L475VET6实现呼吸灯

RT-Thread+STM32L475VET6实现呼吸灯

文章目录 前言一、板载资源资源说明二、具体步骤1.新建rt_thread项目2. 打开PWM设备驱动3. 在Stm32CubeMX配置定时器3.1打开Stm32CubeMX3.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. 配置PWM5.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实现呼吸灯由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“RT-Thread+STM32L475VET6实现呼吸灯