定时器与PWM的LED控制

用STM32F103C8T6的定时器与PWM控制LED灯亮灭(HAL库方式)【STM32开发板】【STM32CubeMX】 本次实验学习了定时器和PWM的原理及应用。通过使用定时器PWM模式对输出的控制可以使LED实现呼吸效果,并控制其时间及亮度。 阅读详情

1、PWM

PWM是脉冲宽度调制(Pulse Width Modulation)的缩写,是一种用于控制模拟电路的技术。通过控制脉冲信号的占空比(高电平时间占总周期的比例),可以实现对输出信号的平均功率的调节。在数字电路中,PWM通常用于控制电机、LED灯等设备的亮度、速度等参数。通过改变PWM信号的占空比,可以实现对设备的精确控制。

PWM的频率是指每个脉冲周期的重复率,通常以赫兹(Hz)为单位来表示。在实际应用中,PWM的频率可以根据具体的需求进行设定,常见的PWM频率范围为几十赫兹到几千赫兹不等。频率越高,脉冲信号的变化越快,对于一些灵敏性要求高的设备控制会更加精准。而低频率的PWM适用于一些功率控制或灯光调节等需要平稳变化的场景。在实际应用中,根据具体的控制需求来选择合适的PWM频率是非常重要的。

在STM32微控制器中,使用PWM(脉冲宽度调制)控制呼吸灯通常需要配置定时器和相应的GPIO端口。以下是一个初始化PWM控制呼吸灯的示例代码,这段代码使用了STM32的HAL库函数。

2、代码

#include "stm32f1xx_hal.h"
// 假设使用TIM2作为PWM定时器,使用PA0作为PWM输出引脚
TIM_HandleTypeDef htim2;
GPIO_InitTypeDef GPIO_InitStruct = {0};
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_TIM2_Init(void);
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_TIM2_Init();
  // 启动PWM信号输出
  HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
  while (1)
  {
    // 在这里可以改变PWM的占空比,实现呼吸灯效果
    // 例如,逐步增加占空比然后减少,模拟呼吸效果
  }
}
void SystemClock_Config(void)
{
  // 系统时钟配置代码,根据实际需求进行配置
}
static void MX_GPIO_Init(void)
{
  __HAL_RCC_GPIOA_CLK_ENABLE();
  // 初始化PA0为复用推挽输出,用于PWM输出
  GPIO_InitStruct.Pin = GPIO_PIN_0;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; // 复用推挽输出
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
static void MX_TIM2_Init(void)
{
  __HAL_RCC_TIM2_CLK_ENABLE();
  htim2.Instance = TIM2;
  htim2.Init.Prescaler = 0; // 预分频器
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP; // 向上计数模式
  htim2.Init.Period = 1000 - 1; // 自动重装载寄存器的值
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; // 时钟分频
  htim2.Init.RepetitionCounter = 0;
  HAL_TIM_PWM_Init(&htim2);
  TIM_OC_InitTypeDef sConfigOC = {0};
  sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = 500; // 初始占空比
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);
  HAL_TIM_MspPostInit(&htim2);
}


这段代码中,`MX_GPIO_Init`函数初始化了GPIOA的0号引脚,模式设置为`GPIO_MODE_AF_PP`,这正是复用推挽输出模式,允许PWM波形通过该引脚输出。`MX_TIM2_Init`函数初始化了TIM2定时器,并配置了PWM通道。最后,通过`HAL_TIM_PWM_Start`函数启动PWM信号输出。

改变CCR的值

void PWM_SetCompare1(uint16_t Compare)
{
    TIM_SetCompare1(TIM2, Compare);        //设置CCR1的值
}

主函数

int main(void)
{
    PWM_Init();            //PWM初始化
    
    while (1)
    {
        for (i = 0; i <= 100; i++)
        {
            PWM_SetCompare1(i);            //依次将定时器的CCR寄存器设置为0~100,PWM占空比逐渐增大,LED逐渐变亮
            Delay_ms(10);                //延时10ms
        }
        for (i = 0; i <= 100; i++)
        {
            PWM_SetCompare1(100 - i);    //依次将定时器的CCR寄存器设置为100~0,PWM占空比逐渐减小,LED逐渐变暗
            Delay_ms(10);                //延时10ms
        }
    }
}

3、现象

63be71dce2d94d7788dd480957ab3b0c.png 

532648566e214a1cb533a417b45ae231.png 

1198d39d09b149618ce15c4d3951715c.png 

eed1213c0b994187bbc7dc793266d3e7.png 

 


 

 

STM32定时器控制LED灯闪烁及PWM练习 让我理解了用控制器控制LED灯闪烁,明白了其中原理通过在STM32上配置PWM,了解了其中配置与认知,以及PWM的出现对这一系列单片机起着很重要的作用。 阅读详情

相关推荐

手把手教你用闲置安卓手机+蓝鲸支付,零成本搞定个人项目自动收款(附私有化部署教程)

本文详细介绍了如何利用闲置安卓手机和蓝鲸支付系统,零成本搭建个人项目自动收款解决方案。通过私有化部署教程,读者可以学习到从手机选择、系统配置到支付渠道对接的全流程,实现安全、高效的收款系统,特别适合个人开发者和小型项目使用。

weixin_29597551的博客 334

PWM

脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制。 pwm的频率: 是指1秒钟内信号从高电平到低电平再回到高电平的次数(一个周期); 也就是说一秒钟PWM有多少个周期 单位:Hz 表示方式: 50Hz 100Hz pwm的周期: T=1/f周期=1/频率 50Hz =20ms一个周期 如果频率为50Hz ,也就是说一个周期是20ms 那么一秒钟就有 50次PWM周期 占空比:是一个脉冲周期内,高电平的时间与整个周期时间的比例 单位:%...

yangteng0210的博客 1万+

LangChain4j 开发

市场上主流的 Java 调用大模型的工具库有两种:LangChain4j 是一个 面向 Java 的开源框架,用于构建 基于大语言模型(LLMs) 的应用程序。它是 LangChain(Python 生态中非常流行的 LLM 应用框架)的 Java 实现,旨在让 Java 开发者能够轻松地集成和使用各种 LLM 服务,快速开发 智能聊天机器人、智能搜索、文档问答、Agent系统 等 AI 驱动的应用。官网文档:https://docs.langchain4j.dev/。引入依赖(JDK17 及以上): 构建

m0_62943934的博客 2794

“深入解析脉冲宽度调制(PWM):理解频率、周期和占空比的作用“

pwm,嵌入式初学者。stm32f103

bess_void的博客 3万+

Keil 丢失编译器版本5、内核文件core_cm3.c报错

若用的是旧版本的core_cm3.c ,就使用编译器v5编译工程;若想用编译器v6,就更新4个相关的内核文件:(CMSIS:Cortex Microcontroller Software Interface Standard,ARM Cortex™ 微控制器软件接口标准)

qq_52804040的博客 6244

张量/数组存储方式与向量化展开/展平、view、reshape、permute对比

对于一个Tensor来说,我们可以认为它有两种存储方式。

欢迎关注,共同进步! 3434

PWM学习笔记

脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。 ​ pwm的频率:是指1秒钟内信号从高电平到低电平再回到高电平的次数(一个周期); 频率也指一秒钟pwm的周期次数。 pwm的周期: T=1/f; 如果频率为50Hz ,那么一个周期是20ms 那么一秒钟就有 50次PWM周期。 占空比:一个脉冲周期内高电平所占比例...

weixin_63090351的博客 5583

银河麒麟v10装Docker实战:在线离线安装与容器部署指南

容器技术作为现代软件交付的核心方式,通过将应用与依赖打包成镜像,实现了环境的一致性与快速部署。Docker作为最流行的容器引擎,其安装与配置是上云和国产化转型中的基础技能。在国产操作系统银河麒麟v10环境中,由于系统兼容性和网络环境的差异,Docker的部署需要特别注意在线与离线两种模式的选择。本文从基础概念出发,结合麒麟v10的实际环境,详细梳理了Docker引擎的安装、镜像加速、存储配置以及MySQL、Redis等常用容器的部署方法,并针对SELinux、cgroup驱动等常见问题给出了解决方案,帮助开

weixin_30431445的博客 146

PWM公式总结

PWM频率=更新频率=72M/(PSC+1)/(ARR+1)占空比=CCR/(ARR+1)

weixin_74128746的博客 1万+

EMB电子机械制动系统和EHB电子液压制动系统控制功能的对比

EMB电子机械制动系统相比EHB液压制动系统具有显著优势:响应速度更快(<100ms)、控制精度更高(±2N·m)、能实现单轮独立控制,支持0.1%级制动力调节。在ABS、ESC等安全功能上表现更优,制动平顺性和NVH性能更好,同时提升能量回收效率15%-20%。特别适合智能驾驶需求,可使AEB等系统响应时间缩短50ms,紧急制动距离减少1米以上。EMB系统完美契合高阶自动驾驶对快速响应和精准控制的要求。

m0_59012156的博客 886

24、交通信号协调算法与模型解析

本文深入解析了交通信号协调中的关键算法与模型,包括多路径进展模型、MAXBAND网络系统模型和松弛启用带模型。这些模型通过合理安排相位序列、优化绿波带宽等方式,提高了交通运行的效率。文章还探讨了交通控制从单点控制向网络协调的发展趋势,分析了当前面临的挑战与机遇,并提出了未来研究方向,如借助信息技术和机器学习,深入研究交通网络的基本构成,以实现智能化和精准化的信号协调。

agile9scrum的博客 134

LED调光之 PWM调光和CCR模拟调光的区别

PWM调光和CCR模拟调光的区别 编者:Romeo 一:什么是PWM调光 1.1 PWM调光概念 PWM (Pulse Width Modulation)调光也称为脉宽调制调光,主要是通过在一个周期内通过控制占空比的方式来实现调光的效果。其不止应用于LED照明领域,也广泛应用于电机、阀门、温度等工业化的应用中。不过在这里我们只谈其在LED照明技术领域的应用。 1.2 PWM调光概述 先来理解两个名词: 1)周期 2)PWM频率 3) 占空比 周期(T):一个完整的高低电平的信号周期。 单位:秒/s。

他们叫我春童太傅的博客 7192

RK3568平台(网络篇)WIFI模块RTL8821CU调试

RTL8821CU是瑞昱半导体推出的usb接口的wifi,下面的教程将介绍如何将RTL8821CU移植到rk3588的平台上。移植usb wifi需要修改的文件Android hal层需要修改的文件//kernel需要修改的文件kernel/arch/arm64/boot/dts/rockchip/rk3399-tve1030g.dtsi //除去板上的sdio的wifi。

weixin_49303682的博客 3905

【STM32】定时器与PWM的LED控制

STM32F103一共有8个定时器TIM1~TIM8。STM32的定时器分为基本定时器、通用定时器和高等定时器。①TIM6TIM7(基本定时器):基本定时器是只能向上计数的16位定时器,基本定时器只能有定时的功能,没有外部IO口,所以没有捕获和比较通道。②TIM2TIM3TIM4TIM5(通用定时器):通用定时器是可以向上计数,也可以向下计数的16位定时器。通用定时器可以定时、输出比较、输入捕捉,每个通用定时器具有4个外部IO口。③TIM1TIM8。

Pijiojio的博客 1527

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

STM32 定时器与PWM的LED控制

STMicroelectronics是STM32微控制器中的重要块,具有丰富的外设和功能,其中包括定时器(Timer),用于执行任务或生成时间延迟。STM32的定时器包括基本、通用和高级类型,分别用于不同的应用场景,如PWM输出、输入捕获等。通过STM32定时器,开发人员可以实现时间测量、周期性任务执行、PWM输出控制等功能,满足各种需求。在STM32开发中,熟练掌握定时器的配置和使用至关重要。PWM(Pulse Width Modulation,脉冲宽度调制)是一种利用脉冲宽度。

weixin_74345079的博客 1346

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

[STM32]定时器与PWM的LED控制

TIM(Timer)定时器定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型OC(Output Compare)输出比较。

weixin_50037440的博客 1215

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

[stm32]——定时器与PWM的LED控制

定时器就是用来定时的机器,是存在于STM32单片机中的一个外设。其本质就是计数器,只不过 计数器 记录的是STM32的外部情况,所接收的也是外部脉冲,而 定时器 则是由STM32自身提供的一个非常稳定的计数器,这个稳定的计数器就是STM32上连接的晶振部件。STM32的众多定时器中我们使用最多的是高级定时器和通用定时器,而高级定时器一般也是用作通用定时器的功能,下面我们就以通用定时器为例进行讲解,其功能和特点包括:位于低速的APB1总线上(APB1)

2201_75518371的博客 1932

STM32——定时器与PWM的LED控制

本次实验了解了定时器的基本概念与类别,了解了定时器的PWM输出模式,并且分别使用了通用定时器来点亮一个LED灯与使用PWM输出模式点亮一个呼吸灯,最后利用Keil仿真软件成功观察到相应的波形。由于本人认知浅薄,上述内容或有诸多不详错漏之处,望各位海涵并指出批正。

qq_74179376的博客 1433

stm32定时器输出PWM控制LED灯

stm32定时器输出PWM控制LED灯 wangxl@20180723 一、概述 本章中,通过查看原理图,我们的LED指示灯配置在PA4管脚上,查表得知PA4的管脚与TIM14的通道1重映射, 通过定时器产生 PWM 来控制指示灯的亮度。 二、本章学习目标 学会查看数据手册 理解stm32端口复用 学会配置STM32 的定时器 学会配置定时器输出PWM 三、PA端口复用 参见Data...

zhjmyx的专栏 2823

【STM32入门学习】定时器与PWM的LED控制

本次博客主要介绍了定时器和PWM,都是非常常用的模块,在单片机的使用过程中,通过计时器和PWM完成了很多延时、点灯、舵机旋转等工作,从中学习到很多东西。本人才疏学浅,还请各位友友批评指正。我们下期再见!

2301_78895982的博客 1064
上一篇: HAL库LED点灯
下一篇: uc/OS-III多任务程序
ooolips
博客等级 码龄4年 129粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值