STM32 PWM之实现呼吸灯

发布者:数据之翼最新更新时间:2019-08-22 来源: 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波

推荐阅读最新更新时间:2024-11-06 15:41

出货超40亿颗,STM32前景光明
意法半导体(以下简称ST)在MCU领域的地位是毋庸置疑的。 根据IHS 的数据统计显示,2018年,ST MCU(不含汽车和安全MCU)的全球出货量位居全球第二。其通用加汽车MCU在中国的出货量更是高居第一,领先于排名第二的的NXP。 STM 32 过去九年的的出货量 尤其是其STM32 MCU的出货,更是表现惊人。据IHS统计,过去四年,STM32的平均年复合增长率高达30%,去年公司的STM32出货量更是达到了12亿颗。统计2007年到现在的数据,公司的STM32出货量更是超过40亿片,服务的客户也超过四万家。能获得这样的成绩主要得益于公司过去多年来在产品和技术上的投入。 在日前于深圳举办的“STM32中
[单片机]
出货超40亿颗,<font color='red'>STM32</font>前景光明
STM32 串口通讯 发送 接收
STM32的使用有利有弊,种类多---但是种类有太多,资料也是比较乱的,还有就是库的调用,经常忘记一些函数的使用------比如最常用的串口------ ------------------------------------------------------------------------------USART ----设置------------------------------- void USART1_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure;
[单片机]
STM32 SysTick 精准延时 简单分析
在设计软件的时候,有的对时序要求比较严格,但是简单的延时函数又不能准确延时---STM32中有一个系统滴答时钟是不错的配置--- ----第一部分是---向滴答时钟寄存器写初值,也就是要根据系统频率来递减----然后为0 则产生中断 void SysTick_Init(uint32_t a) //a-us { /* SystemFrequency / 1000 1ms中断一次 * SystemFrequency / 100000 10us中断一次 * SystemFrequency / 1000000 1us中断一次 */ // if (SysTick_Config(SystemCoreClock
[单片机]
STM32 GPIO管脚工作模式和输出速度总结笔记
GPIO 输出速度 I/O口输出模式下有三种输出速度可选(2MHz,10MHz,50MHz),这个速度是指I/O口驱动电路的响应速度;I/O管脚内部有多个响应不同的驱动电路,用户可以根据自己的需要选择合适的驱动电路。 高低频比较 高频驱动电路:输出频率高,噪音大,功耗高,电磁干扰强; 低频驱动电路:输出频率低,噪音小,功耗低,电磁干扰弱;提高系统EMI(电磁干扰)性能; 总结:通过选择速度来选择不同的输出驱动模块,达到最佳的噪音控制和降低功耗的目的如果需要选择较高频率信号,但是却选择了低频驱动模块,很有可能会失真的输出信号;所以GPIO的引脚速度应与应用匹配。 举几个栗子: 1. 对于串口来说,加入最大波特率为115200,这样只
[单片机]
<font color='red'>STM32</font> GPIO管脚工作模式和输出速度总结笔记
STM32是如何驱动LCD的?
TFTLCD即薄膜晶体管液晶显示器。它与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个像素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。 ▲驱动流程01 使用FSMC驱动LCD 关于FSMC,把数据写入相应的地址,FSMC就会把地址从FSMC_A出去,写入的数据会会从FSMC_D发出去。至于片选等信号线都是自动的。读的话,直接读相应的地址,就会拿到改地址上的数据。 FSMC驱动外部SRAM时,外部SRAM的控制一般有: 地址线(如A0~A25) 数据线(如D0~D15) 写信号(WE,即WR) 读信号(OE,即RD) 片选信
[单片机]
<font color='red'>STM32</font>是如何驱动LCD的?
STM32固件库SYSTEM文件夹介绍
SYSTEM 文件夹里面的代码,此文件夹里面的代码由 ALIENTEK 提供,包含了几乎每个实验都可能用到的延时函数,位带操作,串口打印代码等。SYSTEM 文件夹下包含了 delay、 sys、 usart 等三个文件夹。分别包含了 delay.c、 sys.c、usart.c 及其头文件 delay.h,sys.h,usart.h。 delay 文件夹代码介绍 delay 文件夹内包含了 delay.c 和 delay.h 两个文件,这两个文件用来实现系统的延时功能,其中包含 3 个函数: void delay_init(u8 SYSCLK); //该函数用来初始化 2 个重要参数:fac_us 以及 fac_ms;同时把
[单片机]
STM32控制3路超声波传感器
使用STM32定时器输入捕获模块控制3路超声波传感器 本次使用的超声波传感器是常见HC-SR04,该传感器常常使用在小型机器人和智能小车的避障系统中。 在上图中,5v和GND为模块提供电能,Trig用于触发模块测距,Echo用于接受返回电平信号。 其操作时序图如下: 如上图所示,STM32给Trig引脚一个超过10us的高电平,就可以使能模块内部的测距电路,模块会循环发出8个40kHz脉冲,发射出超声波,然后通过检测Echo引脚的高电平时间就可以测量出模块与障碍物之间的距离。其计算公式可表示如下: distance=340∗Echo高电平时间2distance=340∗Echo高电平时间2 模块驱动程序如下: void
[单片机]
STM32 HAL库学习系列第11篇---定时器TIM---看门狗基本配置及使用
基本配置 使用cube配置溢出时间 记住准时喂狗 独立看门狗: /* IWDG 1s 超时溢出 */ MX_IWDG_Init(IWDG_PRESCALER_64,625); /* 启动独立看门狗 */ HAL_IWDG_Start(&hiwdg); LED1_ON; /* while部分是我们在项目中具体需要写的代码,这部分的程序可以用独立看门狗来监控 * 如果我们知道这部 分代码的执行时间,比如是50ms,那么我们可以设置独立看门狗的 * 溢出时间是60ms,比50ms多一点, 如果要被监控的程序没有跑飞正常执行的话,那么 * 执行完毕之后就会执行喂狗的程序,如果程序跑飞
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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