历史上的今天

今天是:2024年08月22日(星期四)

正在发生

2019年08月22日 | STM32 PWM之实现呼吸灯

发布者:数据之翼 来源: eefocus关键字:STM32  PWM  呼吸灯 手机看文章 扫描二维码
随时随地手机看文章

一、简述


        记--使用定时器4输出PWM来实现呼吸灯效果。


       在人眼辨识能力范围内,调节LED亮的时间,达到LED灯的亮度不同。例:给低电平LED就亮,如果一个脉冲中全是低电平那么LED最亮,如果一个脉冲一半是高电平,一半是低电平,那么LED就显得有点暗,这样调整脉冲中的高低电平的比例就可以达到LED的亮度调节。


        例子:链接: https://pan.baidu.com/s/1UEoZCFGvJSwpzSynFv73gA 提取码: 3ipx


二、效果


          LED1逐渐由暗变亮,接着由亮变暗。


   

三、工程结构

四、源文件


main.c文件


#include "stm32f4xx.h"

#include "led.h"

#include "pwm.h"

 

//粗延时

void delay_ms(int ms)

{

int i,j;

for(i=0; i for(j=0; j<10000;j++);

}

 

 

//主函数

int main(void)

{

int i;

//中断优先级分组

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

LED_Init();//初始化LED

Pwm_Init();//设置定时器4输出PWM

while(1)//呼吸灯

{

//从暗到亮

for(i=1; i<499; i++)//定时器4重装载值为499

{

TIM_SetCompare1(TIM14,i);//根据i的值设置比较值,调整占空比

delay_ms(20);//根据实际情况进行调整,方便观察效果

}

//从亮到暗

for(i=499; i>0; i--)

{

TIM_SetCompare1(TIM14,i);

delay_ms(20);

}

}

return 0;

}

pwm.h文件


#ifndef __PWM_H_

#define __PWM_H_

#include "stm32f4xx.h"

 

void Pwm_Init(void);

 

 

 

#endif

pwm.c文件 


#include "pwm.h"

 

void Pwm_Init(void)

{

GPIO_InitTypeDef  GPIO_InitStruct;

TIM_OCInitTypeDef TIM_OCInitStruct;

TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStruct;

//1、使能定时器14时钟:

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE);

//初始化GPIOF组时钟

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);

//2、初始化PF10引脚

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;  //引脚10 LED1

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; //复用

GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //速度

GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; //推挽

GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;  //上拉

GPIO_Init(GPIOF,&GPIO_InitStruct);

//3、引脚功能映射

GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14); 

//4、初始化定时器,配置ARR,PSC。

TIM_TimeBaseInitStruct.TIM_Prescaler = 84-1; //分频系统  84MHZ/84 = 1MHZ  每秒数1000 000数 1us数一个数 

TIM_TimeBaseInitStruct.TIM_Period = 500-1; //重装值 500数,用时500us

TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; //向上计数

TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; //分频因子

TIM_TimeBaseInit(TIM14,&TIM_TimeBaseInitStruct);

 

TIM_OCInitStruct.TIM_OCMode =  TIM_OCMode_PWM1;   //PWM1模式

TIM_OCInitStruct.TIM_OutputState=  TIM_OutputState_Enable;//输出使能

TIM_OCInitStruct.TIM_OCPolarity =  TIM_OCPolarity_Low;   //极性低

TIM_OC1Init(TIM14,&TIM_OCInitStruct);

//5、使能预装载寄存器: 

TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable); 

//6、使能自动重装载的预装载寄存器允许位

TIM_ARRPreloadConfig(TIM14,ENABLE);

//7、使能定时器。

TIM_Cmd(TIM14,ENABLE);

}

五、总结


       5.1 LED亮度调节实现

        5.2 相关概念


脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。

频率  :时钟速度   1GHZ = 1000MHZ = 1000 000 KHZ =1 000 000 000 HZ (如12MHz:1秒12 000 000个脉冲)

占空比:占空比是指在一个脉冲循环内,通电时间(有效电平)相对于一个脉冲总时间所占的比例。(可以简单理解为该高、低电平的占脉冲总时间的比例)

       5.3 设置定时器4输出PWM

           


TIM_OCInitStruct.TIM_OCMode      =  TIM_OCMode_PWM1;       //PWM1模式

TIM_OCInitStruct.TIM_OutputState    =  TIM_OutputState_Enable;   //输出使能

TIM_OCInitStruct.TIM_OCPolarity     =  TIM_OCPolarity_Low;    //极性低,设置低电平为有效状态

 

TIM_TimeBaseInitStruct.TIM_Period  = 500-1;     //重装值 500,用时500us          

 

TIM_SetCompare1(TIM14,i);//根据i的值设置比较值,调整占空比


关键字:STM32  PWM  呼吸灯 引用地址:STM32 PWM之实现呼吸灯

上一篇:STM32F103_SD卡FatFs文件系统移植
下一篇:基于STM32利用TIM3的通道输出四个不同的PWM波

推荐阅读

可以与人交流的个人家用机器人开始走出实验室,进入我们的客厅和厨房。但是邀请机器人进入人类的生活,人类准备好了吗? 人们花了几十年的研究才造出了机器人,但其复杂程度远不及流行科幻小说中出现的机器人。他们不太像那些早已在书中出现的虚构的机器人;他们大多不走路,只是有时会翻滚着行动,也经常有很多没有四肢的机器人。而且他们在语言、社交技...
2019年7月26日做小车的第5天。今天我又学习了一个新的知识:超声波测距。超声波测距(超声波测距模块US-025)的基本原理如下:Trig端:向此管脚输入一个超过10us以上的高电平,可触发模块测距Echo端:当测距结束时,此管脚会输出一个高电平,电平宽度为超声波往返时间之和。只需要在Trig管脚输入一个10US以上的高电平,系统便可发出8个40KHZ的超声波脉冲,...
自2019年下半年开始,得益于终端厂商推出的多摄像头在智能手机产品的普及率快速提升,应用于智能手机为主的低像素CIS芯片市场需求迎来了新一轮爆发式增长。一时之间,市场供需失衡使得产品开始出现缺货现象,低像素CIS芯片呈现涨价趋势。其中,坐稳国内中低端CIS芯片产品出货量头把交椅的格科微,在此次缺货潮事件中影响最大。晶圆供应受“制”于人格科微...
近期,随着小米MIX 4的发布上市,骁龙888 Plus旗舰的新机潮也被正式拉开,后续又陆续登场了iQOO 8系列、腾讯ROG游戏手机5S系列等等。  现在,国内的一款骁龙888 Plus游戏手机也即将登场。  根据知名爆料博主@数码闲聊站透露,目前一款名为NX669J-S的努比亚新机已经获得3C认证,其中显示该机将配备120W超级快充,结合此前产品信息来看,这...

史海拾趣

问答坊 | AI 解惑

红外线遥控开关芯片FLYK-HY01-A

红外线遥控开关芯片FLYK-HY01-A的引脚定义,我想做一个多路遥控开关但不知该芯片的用法,多路继电器输出…

查看全部问答∨

模数转换器时钟优化

系统时钟优化可以提升系统的性能,但也颇具挑战性。为模数转换器设计抖动为 350 飞秒(fs)的编码电路是相对容易的,但这是否能够满足当今的高速需求?例如,测试 AD9446-100 (16 bit 100 MHz ADC) 时,在 Nyquist 区使用 100 MHz 的采样时钟频率, 3 ...…

查看全部问答∨

烧写扬创2440 T70套餐开机LOGO的时间问题

按照开发板上的说明,出现的P表示正在进行烧写,我粗略的计算过,正常情况下每4秒出现一个P,每行会出现32个P,总共需要编写25行,烧写一个LOGO大概需要53.333min。可是当我将LOGO中的进度条变窄后,烧写的时间缩减至一半,不明白是什么原因,希望 ...…

查看全部问答∨

WinCE程序在实际器材上连部上网络的问题

我写的一个程序通过URL下载一些文件到本地,就是用了函数InternetOpen(); InternetOpenUrl();InternetReadFile();在模拟器上可以实现功能,拿到实际的WinCE器材上就不行了。函数连接不上。请问是什么问题啊? 在模拟器上我用的ActiveSync ...…

查看全部问答∨

求对2440熟悉的高手帮忙。

要求一:对2440的硬件比较熟悉;能熟练绘制或修改PCB图; 要求二:对2440的WINCE BSP 比较熟悉;常用的驱动:如显示;串口;键盘等比较熟悉;目前系统用的是WINCE5.0; PS : 最后要求在北京 有具备要求一的或要求二的,欢迎和我联系。 希望高手 ...…

查看全部问答∨

modbus

最近下了点程序学习如下,有些看不明白,咨询一下   程序   #include  "main.h"   /******************************   微控电子  www.mcuc.cn   modbus   ...…

查看全部问答∨

WINCE初学者,请各位大哥大姐提点意见!

我是WINCE初学者,请各们介绍一些WINCE的入门教材,本人万分感谢!!!…

查看全部问答∨

ST的型号表中高兴地看到的STM32F-2的型号了.

                                 但是, 怎么有 205,207 等型号, 却没有 203 呢?…

查看全部问答∨

邮箱投递几次消息后任务就不切换了

邮箱投递几次消息后任务就不切换了两个任务,一个任务投递键值一个任务依据键值显示菜单。我用邮箱投递键值,投递几次之后,邮箱的地址就不对了,然后这两个任务也不切换了。这是为什么?…

查看全部问答∨

我的m300u开发板的资料

&nbsp;&nbsp; 我的m300u开发板的资料,从淘宝上买散回来,然后自己焊的,呵呵…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved