news 2026/6/9 20:06:42

[STM32C0] 【STM32C092RC 测评】定时器与PWM

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[STM32C0] 【STM32C092RC 测评】定时器与PWM

PWM(脉冲宽度调制)技术驱动LED实现呼吸灯效果,巧妙结合了LED的电流响应特性与人眼的视觉暂留效应,是电子领域中一项经典且实用的技术,同时也是深入学习开发板PWM功能与定时器应用的绝佳切入点。
LED的亮度与通过它的电流大小密切相关,对电流变化极为敏感。而人眼具有视觉暂留特性,当光线快速闪烁时,人眼无法即时捕捉到这种变化,而是会将一系列短暂的光信号在大脑中融合,形成一个相对稳定的亮度感知。PWM技术正是基于这两点原理来实现LED亮度的调节。
PWM通过精确控制LED的导通时间,即高电平在信号周期中所占的时间比例(占空比),来调控LED的亮度。当占空比较小时,LED在一个周期内导通时间短,呈现微弱光芒;随着占空比增大,LED导通时间变长,亮度也随之增强。通过连续、平滑地改变占空比,就能实现LED亮度的渐变,从而营造出呼吸灯的效果。例如,将占空比从10%逐渐增加到90%,再从90%逐渐减小到10%,LED就会呈现出由暗到亮,再由亮到暗的循环变化,如同呼吸一般自然。
PWM功能是定时器的高级功能之一,实现呼吸灯效果离不开定时器的精准定时功能。定时器最基本的用途是定时,当它与GPIO(通用输入输出)引脚结合使用时,能够衍生出丰富多样的功能。
在PWM信号生成过程中,定时器负责精确控制信号的周期和占空比。通过设置定时器的计数值和重装载值,可以确定PWM信号的周期长度。例如,设定定时器计数频率为1MHz,重装载值为1000,那么PWM信号的周期就是1ms。而占空比则通过在定时器计数过程中改变输出电平的时间来实现。在每个周期内,当定时器计数到某个设定值时,将GPIO引脚输出高电平,使LED导通;当计数到另一个设定值时,将GPIO引脚输出低电平,使LED熄灭。通过调整这两个设定值,就能改变占空比,进而控制LED的亮度。
在本次测试中,通过实现呼吸灯效果,我们不仅能够直观地体验开发板的PWM功能,还能深入了解定时器在电子系统中的应用。
硬件方面用到就是GPIO章节的按键和LED,我们这次通过按键去实现不同灯之间的呼吸效果切换。
LED1配置为TIM1_CH1:

LED2配置为TIM1_CH2:

接下来配置定时器1为PWM:

注意这里不同通道的功能选择,以及实际对弈的就是Period的百分比数;
还要用到一个定时器,这里选择的是定时器14:

定时10ms,用于修改占空比。
接下来就是软件功能的实现,按键的外部中断修改工作的LED,同时将另一个关闭:

复制

  1. <p>void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)</p><p>{</p><p> if(GPIO_Pin == GPIO_PIN_13)</p><p> {</p><p> if(LED_ChangeFlag == 0)</p><p>{</p><p>__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,0);</p><p>LED_ChangeFlag = 1;</p><p>}</p><p>else</p><p>{</p><p>__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,1000);</p><p>LED_ChangeFlag = 0;</p><p>}</p><p> }</p><p>}</p><p>void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)</p><p>{</p><p> if (htim->Instance == TIM14) {</p><p> HAL_IncTick();</p><p>Tim_cnt++;</p><p>if(Tim_cnt <= 100){</p><p>if(LED_ChangeFlag == 0)</p><p>__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,Tim_cnt*10);</p><p>else</p><p> __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,Tim_cnt*10);</p><p>}</p><p>else if(Tim_cnt > 100 && Tim_cnt <= 200){</p><p>if(LED_ChangeFlag == 0)</p><p>__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,(200-Tim_cnt)*10);</p><p>else</p><p>__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,(200-Tim_cnt)*10);</p><p>}</p><p>else if(Tim_cnt>=200)</p><p>Tim_cnt = 0;</p><p>}</p><p>}</p>


效果如下:


---------------------
作者:qintian0303
链接:https://bbs.21ic.com/icview-3450404-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/5 15:59:42

Markdown表情符号增强技术文章可读性

PyTorch-CUDA-v2.7 镜像&#xff1a;从部署到双模开发的深度实践 在 AI 研发节奏日益加快的今天&#xff0c;一个常见的场景是&#xff1a;刚拿到新服务器的研究员&#xff0c;满怀期待地准备训练模型&#xff0c;结果卡在了环境配置上——torch.cuda.is_available() 返回 Fals…

作者头像 李华
网站建设 2026/6/9 20:06:30

PyTorch-CUDA-v2.7镜像更新日志与功能亮点

PyTorch-CUDA-v2.7 镜像&#xff1a;构建高效深度学习环境的终极实践 在今天&#xff0c;一个AI项目的成败&#xff0c;往往不取决于模型结构多新颖、数据多庞大&#xff0c;而在于——你的环境能不能跑起来&#xff1f; 这听起来像是个玩笑&#xff0c;但在实际研发中却屡见不…

作者头像 李华
网站建设 2026/6/5 20:02:54

将本地PyTorch模型部署到云端GPU服务器的操作流程

将本地PyTorch模型部署到云端GPU服务器的操作流程 在深度学习项目开发中&#xff0c;一个常见的困境是&#xff1a;模型在本地笔记本电脑上调试通过后&#xff0c;一旦面对大规模数据或复杂网络结构&#xff0c;训练速度便变得难以忍受。更糟的是&#xff0c;当团队成员之间共享…

作者头像 李华
网站建设 2026/6/5 21:19:51

学长亲荐8个AI论文软件,研究生轻松搞定毕业论文!

学长亲荐8个AI论文软件&#xff0c;研究生轻松搞定毕业论文&#xff01; AI 工具如何助力论文写作&#xff1f; 在研究生阶段&#xff0c;论文写作是一项既重要又充满挑战的任务。无论是开题报告、文献综述还是最终的毕业论文&#xff0c;都需要大量的时间与精力投入。而随着 A…

作者头像 李华
网站建设 2026/6/5 5:17:48

Anaconda Prompt常用命令整理:高效管理PyTorch环境

Anaconda Prompt 常用命令整理&#xff1a;高效管理 PyTorch 环境 在深度学习项目开发中&#xff0c;一个稳定、可复现的环境往往比模型本身更难维护。你是否曾遇到过这样的场景&#xff1a;本地训练好的模型&#xff0c;在同事机器上却因“找不到 CUDA”或“版本不兼容”而无法…

作者头像 李华
网站建设 2026/6/6 7:36:39

Arbess速成手册(1) - 创建第一条流水线

Arbess 是一款开源免费的 CI/CD 工具&#xff0c;支持免费私有化部署&#xff0c;一键安装零配置&#xff0c;支持丰富多样的任务类型&#xff0c;支持分布式执行流水线。今天来介绍如何使用Arbess 配置你的第一条流水线&#xff0c;快速入门。 1、创建流水线 安装启动完毕后…

作者头像 李华