基于STM32的PWM呼吸灯系统设计

发布者:温柔阳光最新更新时间:2021-11-02 来源: eefocus关键字:STM32  PWM 手机看文章 扫描二维码
随时随地手机看文章

一、简述


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


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

 

二、效果

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

 

三、工程结构

四、源文件

#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;

}


#ifndef __PWM_H_

#define __PWM_H_

#include "stm32f4xx.h"

 

void Pwm_Init(void);

 

#endif

#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呼吸灯(PWM脉冲宽度调制)
下一篇:STM32f103核心板点呼吸灯教程

推荐阅读最新更新时间:2024-11-11 11:26

STM32 IAP升级遇到的问题总结
一,串口通信问题 1,串口通信两端的TTL电平要一致,看选用的芯片,要么都是3.3V要么都是5V。。当两端电平不一致时通常是收不到数据的。。当检测程序等都没有问题但是依然收不到数据时,考虑检测一下两端的电平是否一致。。可用 示波器 查看收发数据时的电平 2,在写IAP是使用的官方的库函数,结果串口一直收不到正确的数据。不管我发什么,收到的都是0x58或者0xF6,而且我发5个字节只能收到2个。。确定自己的程序逻辑没问题,然后怀疑是使用的库函数有问题。使用beyond compare挨着对照了一下以前写过的正确的程序。。发现系统初始化时外部晶振没有改。。在SystemInit();时就是为了/* 配置系统时钟为168M 使用
[单片机]
<font color='red'>STM32</font> IAP升级遇到的问题总结
STM32的SWD烧录模式No Target Connected 错误的一种情况
一、问题 最近做项目第一次用到STM32F405RGT6这款单片机,之前用的是STM32F407;SMT贴片焊接,拿到板子准备烧录程序进行测试,使用的是STlink的SWD烧录模式,但是MDK弹出“No target connected”,也就是说检测不到单片机! 二、问题分析和尝试 查看了魔法棒的Debug选项中stlink的“setting”,结果如图1所示。 图1.错误状态下的SWD设备检测状态 既然显示检测不到单片机,那么首先考虑是否电路板的电源供给状态会否有错?接地是否可靠?测试结果显示正常;既然供电正常,那么是否是接线错误?检查结果显示正常;那么单片机的BOOT引脚配置呢?资料显示BOOT引脚的配置
[单片机]
<font color='red'>STM32</font>的SWD烧录模式No Target Connected 错误的一种情况
基于STM32单片机的路灯系统设计
一.系统设计 整个系统以STM32 单片机作为核心控制器,通过DS1302进行定时,通过光敏模块识别光照强度,通过光电管识别人体,识别后通过单片机控制LED灯的闪烁和OLED屏的显示,通过无线通信模块将检测到的数据上传到手机。 图1 系统框图 二.硬件设计 本设计所采用的STM32F103C8T6是以Cortex-3为核心的单片机,该系统主要由光敏电阻模块,OLED显示模块,DS1302模块,光电管模块,无线通信模块。 图2 硬件电路 三.软件设计 系统在完成系统初始化后就开始通过光电管进行红外识别人体,通过光敏电阻模块检测光强,通过DS1302设置定时,通过OLED进行显示,当判断在定时时间内则继续判断是否检测到人,是则
[单片机]
基于<font color='red'>STM32</font>单片机的路灯<font color='red'>系统</font>设计
STM32三种启动模式中存储器的存储介质
STM32三种启动模式对应的存储介质均是芯片内置的,它们是: 1)用户闪存 = 芯片内置的Flash。 2)SRAM = 芯片内置的RAM区,就是内存啦。 3)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。 在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序,见下表: BOOT1=x BOOT0=0 从用户闪存启动,这是正常的工作模式。 BOOT1=0 BOOT0=1 从系统存储器启动,这种模式启
[单片机]
STM32串口USART2程序
简介:对控制LED指示灯的IO口进行了初始化,将端口配置为推挽上拉输出,口线速度为50Mhz。PA2,PA2端口复用为串口2的TX,RX。在配置某个口线时,首先应对它所在的端口的时钟进行使能。否则无法配置成功,由于用到了端口B, 因此要对这个端口的时钟。进行使能,同时由于用到复用IO口功能用于配置串口。因此还要使能AFIO(复用功能IO)时钟。 原理图: 程序分析: int main(void) { uint8_t a=0; /* System Clocks Configuration */ RCC_Configuration();//系统时钟设置 /*嵌套向量中断控制器 说明了U
[单片机]
<font color='red'>STM32</font>串口USART2程序
小白都看得懂的STM32的DMA知识
一、DMA简介 1、DMA简介 DMA(Direct Memory Access:直接内存存取)是一种可以大大减轻CPU工作量的数据转移方式。 CPU有转移数据、计算、控制程序转移等很多功能,但其实转移数据是可以不需要CPU参与。比如希望外设A的数据拷贝到外设B,只要给两种外设提供一条数据通路,再加上一些控制转移的部件就可以完成数据的拷贝。 DMA就是基于以上设想设计的,它的作用就是解决大量数据转移过度消耗CPU资源的问题。有了DMA使CPU更专注于更加实用的操作--计算、控制等。 2、DMA的工作原理 DMA的作用就是实现数据的直接传输,而去掉了传统数据传输需要CPU寄存器参与的环节,主要涉及四种情况的数据传输,但本质上是一样
[单片机]
小白都看得懂的<font color='red'>STM32</font>的DMA知识
STM32 USB HID设备驱动分析
一、USB HID的设备描述符分析 USB HID的设备描述符用以下结构定义: Device_Property DEVICE_PROP Device_Property = { CustomHID_init, CustomHID_Reset, CustomHID_Status_In, CustomHID_Status_Out, CustomHID_Data_Setup, CustomHID_NoData_Setup, CustomHID_Get_Interface_Setting, CustomHID_GetDeviceDescripto
[单片机]
基于STM32的数字PDA系统的设计与实现
0 引言 以Cortex-M3为内核的处理器由于其低功耗以及低成本并且是32位处理器,越来越多的研究人员已经从51处理器、AVR等处理器开始转移到这个领域。数字PDA系统设计采用的是以Cortex-M3的内核STM32ZET6控制器,但是由于STM32ZET6内部没有MMU,不能移植WincE,Linux等操作系统,故只能应用ucLinux, C/OS-Ⅱ等实时操作系统。传统的操作系统ucLinux, C/OS-Ⅱ在微控制器中移植后,应用程序就开始了与操作系统、以及硬件驱动之间的交互,一旦要添加新的应用程序或者对应用程序的更改,代码的修改量以及整个操作系统的稳定性都会收到影响。这时就需要一种新的机制,能够在保证系统稳定性的基础上快
[单片机]
基于<font color='red'>STM32</font>的数字PDA<font color='red'>系统</font>的设计与实现

推荐帖子

LPC2366的几个问题
1.LPC2366的三个VDD(DCDC)(3V3)引脚是否一定要接3.3V电源?周立功的资料说这三个引脚不使用可以悬空。。。但是当这三个引脚悬空时整个单片机根本就没有工作,H-JTAG无法识别芯片,ISP也无法连接,说明这三个脚应该是给内部某些关键模块供电的,有谁知道这三个脚到底什么作用吗?希望能给小弟指点一二。2.LPC2366复位问题。因为要用到EEPROM,所以外接了一个CAT1025,通过此芯片产生一个稳定的复位信号,来复位LPC2366,但是发现一个问题,复位完成以后部分IO
5586 嵌入式系统
【瑞萨电子MCU套件免费试用】自行车炫彩风火轮开发应用笔记——(2)系统设计与硬件
本帖最后由xsunset于2014-9-2216:17编辑 1自行车风火轮系统设计原理如前所述,风火轮的主要原理是在不同的角度,控制沿着车轮辐条半径或直径分布的LED的颜色、亮度等数据,将一个圆周360°分为2n等分,相当于角度间隔是360/2n度,半径上分布着m个像素。根据前述分析的功能,对项目的系统设计提出了如下要求。1.1.LED及其驱动为了实现全彩,需要有独立控制RGB三色的LED,同时由于本项目要求
xsunset 瑞萨电子MCU
明纬电源板的器件的布局是怎么做的,看高人分析,,
功率变压器在电源中起着能量变换和能量传送的作用(联接信号源与负载的中介)。一般的变压器模型是一个双端口网络,在大部分仿真软件中的模型如下:不过因为双端口模型不利于我们的分析,我们一般不直接使用这种模型。(当然软件中大部分都是这么分析)这种模型忽略了漏磁电感和激磁电抗,需要进行改进才能得出比较精确的结果。我们也可以将变压器与负载分开(独立的器件),变压器则等效成为附加一定电抗的电感器,次边电磁参数以一定变换归一化到原边进行处理,可看成一个单口网络进行等效,从而使模
qwqwqw2088 模拟与混合信号
在datasheet中获取二极管的有效信息!
一,二极管的分类●二极管按其用途可分为:普通二极管和特殊二极管。●普通二极管:整流二极管、快速二极管、稳压二极管、检波二极管、开关二极管等。●特殊二极管:光二极管、变容二极管、隧道二极管、触发二极管等。本文,主要介绍整流二极管、快速二极管和稳压二极管。二,规格书的认识●整流二极管和快速二极管整流二极管结构主要是平面接触型,其特点是允许通过的电流比较大,反向击穿电压比较高,但PN结电容比较大,一般广泛应用于处理频率不高的电路中
木犯001号 电源技术
跪求图片上红外接收/发射模组型号,谢谢!
如图片所示,上面丝印为5X2F,麻烦有知道的DX告知下,万分感谢!跪求图片上红外接收/发射模组型号,谢谢!对这个芯片来个特写大镜头,根本看不清楚红外接收/发射组件是很常用的,它没有标准,都是由厂家自己作主,如果出于修理需要,可以将内部的二极管更换掉即可,如果是开发目的,完全可以不受别人电路设计、PCB布局限制。
perryzhan 传感器
被同一个坑绊倒了两次-俺的100mWZIGBEE节点调试心得
拿到一个新的PAIC,台湾某厂的UP2202,2.4G频段专用,号称增益25db,输出功率能轻而易举的达到20dbm,恰好有个zigbee项目需要增加功率,于是毫不犹豫的上了它,嘿嘿!按照原理图,俺画了块板子,看起来貌似该ic使用起来很“弱智”,所以我直接和zigbee芯片,RF开关集成了,谁知道,噩梦就此开始!画板这些都是小事,俺当然没有弱智到把传输线周围紧挨着全都铺上地,虽然微带线俺的经验是2mm线宽就差不离,但是俺还是仿真了一下,主席说过,万事都怕认真二字(是不是主席说的俺忘了,权
clj2004000 RF/无线
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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