stm32-kirk-lib使用笔记 - 006 点亮LED灯(PWM篇)

这篇博客介绍了如何使用STM32的PWM功能来控制LED灯的亮度,包括库函数的使用、初始化、亮度设置以及Gamma校正。通过调用特定函数,实现对LED亮度的动态调节,创建呼吸灯效果。
摘要由CSDN通过智能技术生成

有了前面点亮小灯的经验,我们可以试试PWM波来点亮小灯,满足调节亮度的需求。

1. 实验器材

  1. 一块单片机最小系统板或开发板
  2. ST-Link调试器或板载ST-Link

2. 实验准备

此处,小柯依然使用正点原子的阿波罗开发板。板载的两个LED灯泡DS0和DS1对应外设情况如下:

小灯编号 引脚 定时器端口 通道编号
DS0 PB1 TIM3 CH4
DS1 PB0 TIM3 CH3

根据以上信息,我们在工程中作如下配置:

  1. 将对应引脚设置为TIM的输出通道,此时引脚为黄色
    在这里插入图片描述

  2. 在对应的TIM外设中使能相关通道,此时引脚颜色转为绿色
    在这里插入图片描述

  3. 根据需要,对TIM参数进行进一步配置
    如选择内部时钟作为时钟源,将自动重载值(Auto Reload Register)改为65534.

当TIM用作PWM时,建议不要将自动重载值设置设置为最大值,之多是上限值减一。由于此处,该寄存器为16位,那便设置为65534.具体原因小柯会在介绍PWM中解释。

在这里插入图片描述

  1. 保存工程,生成代码

  2. 复制库文件,添加各头文件目录,将用到的 Klib_Device_Layer 目录作为编译的对象。
    详见 stm32-kirk-lib使用笔记 - 001 综述
    在这里插入图片描述

  3. 添加用到的源文件
    本实验中用到的源文件为 Klib_Device_Layer 目录下的 kdl.c 和 kdl_pwmled.c,将其他 c 文件移出编译范围。
    在这里插入图片描述

  4. 引用头文件,添加LED对象
    LED对象定义在 kdl_pwmled.h 头文件中,为 KDL_PWMLED_t。具体代码如下:

/* USER CODE BEGIN Includes */
#include "kdl_pwmled.h"
/* USER CODE END Includes */

/* USER CODE BEGIN PV */
KDL_PWMLED_t DS0;
KDL_PWMLED_t DS1;
/* USER CODE END PV */

3. 简介

3.1 宏定义简介

3.1.1 KDL_PWMLED_OnState

/**
 * @brief enum of PWMLED status for on
 */
typedef enum {
   
	KDL_PWMLED_ONSTATE_LOW = 0,
	KDL_PWMLED_ONSTATE_HIGH
} KDL_PWMLED_OnState;
项目 说明
名称 KDL_PWMLED_OnState
KDL_PWMLED_ONSTATE_LOW PWM输出为低时LED被点亮
KDL_PWMLED_ONSTATE_HIGH PWM输出为高时LED被点亮

3.1.2 默认值

#define KDL_PWMLED_GAMMA_SCALER 20000U
#define KDL_PWMLED_DEFAULT_GAMMA 44000U /* 2.2*2W=4W4 */
#define KDL_PWMLED_DEFAULT_BRIGHTNESSRANGE 255U
#define KDL_PWMLED_DEFAULT_BOUNDRANGE 255U
项目 说明
KDL_PWMLED_GAMMA_SCALER Gamma值的放大倍数
KDL_PWMLED_DEFAULT_GAMMA 默认Gamma值为2.2,放大后为44000
KDL_PWMLED_DEFAULT_BRIGHTNESSRANGE 默认亮度设置范围
KDL_PWMLED_DEFAULT_BOUNDRANGE 默认亮度限制

3.2 接口函数简介

3.2.1 KDL_PWMLED_Init

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小柯点子苑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值