datasheet

曾道人一码经书公开:stm32成长记之LED呼吸灯

2019-05-24来源: eefocus关键字:stm32  LED  呼吸灯

141期曾道人 www.w9okj.cn 拍的GIF太朦胧了,就不备份了。。。


呼吸灯的实现实则是通过PWM控制的LED的亮灭时间间隔,由于人眼视觉的暂缓效应,达到预期的效果。


那么呼吸灯的设计思路是怎么的呢?


①需要点灯--LED的配置和实现(GPIO_InitTypeDef结构体)


②时间的调用--定时器的配置(TIM_TimeBaseInitTypeDef结构体)


③时间间隔的控制--PWM的配置和实现(TIM_OCInitTypeDef结构体)


通俗的讲,就是理论上想让LED达到图a的亮灭的效果(LED灯由亮逐渐熄灭后在逐渐点亮),然而在MCU的识别到的高电平为2.2~2.9V以上,也就是说MCU电平变化只有两种情况,高电平(或1)低电平(或0),它没办法达到在电压上 的逐渐升高。因此,利用人眼的暂缓效应,代码设计思想为图b,通过LED的亮灭时间间隔来达到预期的效果。


通过LED8(PC7)实现呼吸灯功能,通过查找数据手册的GPIO复用功能可知,应该使用定时器3的通道2。


void pwm_init()

{

GPIO_InitTypeDef GPIO_InitStructure;   

 

 

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;

 

 

TIM_OCInitTypeDef TIM_OCInitStructure;//初始化外设TIMx

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

 

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

GPIO_Init(GPIOC,&GPIO_InitStructure);

 

 

TIM_TimeBaseInitStructure.TIM_Period = 900; //PWM频率 = 720000/900=8KHz   

TIM_TimeBaseInitStructure.TIM_Prescaler = 0;//100Khz计数频率

TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;//时钟分割

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

TIM_TimeBaseInit(TIM3, & TIM_TimeBaseInitStructure);

 

 

GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);//改变指定管脚的映射

 

 

//PWM参数配置

TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1; //定时器模式

TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//PWM输出使能

TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;    //指定输出引脚的极性

 

 

TIM_OC2Init(TIM3,&TIM_OCInitStructure);//开启定时器3的通道2

 

 

 

TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);//使能TIMx在CCR2上的预装载寄存器

TIM_Cmd(TIM3,ENABLE);//使能TIMx外设

}






主函数相对简单,使用的普中的例子。




int main()

{

u8 fx=1;//呼吸方向位

u32 ti=0;     

pwm_init();  

while(1)

{

delay_ms(10);

if(fx==1)

{

ti++;

if(ti>300)

{

fx=0;

}

}

else

{

ti--;

if(ti==0)

{

fx=1;

}

}

TIM_SetCompare2(TIM3, ti);//设置TIMx捕获比较2寄存器值

}

}



关键字:stm32  LED  呼吸灯

编辑:什么鱼 引用地址://www.w9okj.cn/mcu/ic462820.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:stm32成长记之定时器时间计算
下一篇:stm32成长记之中断介绍

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32点亮led的详细步骤

STM32 点亮LED灯的步骤1:先是在点亮LED灯那个引脚使能,相当于修路,比如是PIN5引脚,就要使能对应的GPIO。使能函数是控制一个固件发挥作用:第一步就是把它对应的总线时钟使能,第二步配置对应的结构体里的成员,第三部调用函数初始化对应的寄存器地址,最后一步控制输入输出条件(设置高低电平)/*GPIO配置使用步骤1.使能RCC_APB2PeriphClockCmd(RCC_APB2Periph_外设名,ENABLE);第一个参数是挂载在APB2总线下面的外设第二个参数是允许(ENABLE)或不允许(DISABLE然后就是配置引脚的工作方式,这是要配置的,配置的函数如下:2.定义GPIO配置结构体的变量
发表于 2019-06-24

STM32学习第二课——(操作)按键控制LED灯

对于按键控制LED灯这一课,首先要看小黑板的原理图如下所示 , 查看可知KEY0按键对应的IO口是PC1,KEY1按键所对应的IO口是PC13。这样就可以操作写代码了吗?不不不,在写代码之前必须要清楚自己要干什么,要实现一个什么样的功能,还有程序的基本流程图等等以下是代码部分://FUNCTION:按键所对应的IO口初始化//DATA:20180914void key_Init(void){    GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量       RCC_APB2PeriphClockCmd
发表于 2019-06-24
STM32学习第二课——(操作)按键控制LED灯

STM32开发系列之寄存器(一)按键控制LED灯

入门学习STM32开发,首先要选择一种开发方式。STM32的开发方式主要有标准库开发、寄存器开发和HAL库开发(这个我没使用过,不太了解)。比较多的人选择的开发方式是库开发,使用这两种方式比较方便,但因经过函数封装,对底层的理解不足。由于我入门也是由标准库开发入门的,所以这里想专门写一下寄存器开发,边写边学习,欢迎一起探讨。1、一般写法注:采用的STM32F103ZET6芯片ST官方提供了stm32f10x.h的头文件,里面有各个寄存器的地址定义,因此可以直接操作寄存器来对IO口进行配置,下面就以案件控制LED灯为例。在stm32f10x.h头文件里有以下的IO口的宏定义及结构体①假设LED灯接在GPIOB5引脚,根据手册
发表于 2019-06-24
STM32开发系列之寄存器(一)按键控制LED灯

STM32跑马灯-库函数

GPIO时钟->调用GPIO_init(a,b),b参数需要自己定义以及配置相关寄存器,切勿忘记使能时钟。#include "led.h"   void LED_Init(void){  GPIO_InitTypeDef GPIO_InitStructure;  //切勿忘记使能GPIO是时钟  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; 
发表于 2019-06-24

STM32跑马灯-寄存器

;delay.h" #include "led.h" int main(void){  Stm32_Clock_Init(336,8,2,7);//设置时钟,168Mhz delay_init(168); //初始化延时函数 uart_init(84,115200); //串口初始化为115200 led_init();             //led初始化 while(1) { LED0 = 0; LED1 = 1; delay_ms(500);  LED0 = 1; LED1
发表于 2019-06-24
STM32跑马灯-寄存器

STM32蜂鸣器-库函数

; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);    GPIO_Init(GPIOF, &GPIO_InitStructure);    GPIO_SetBits(GPIOF, GPIO_Pin_8);} 3.main.c#include "stm32f4xx.h"#include "usart.h"#include "delay.h"#include
发表于 2019-06-24

小广播

何立民专栏

单片机及嵌入式宝典

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

电子工程世界版权所有 京ICP证060456号 141期曾道人 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright ? 2005-2019 www.w9okj.cn, Inc. All rights reserved
  • 提升双创教育质量的关键在机制协同 2019-06-23
  • 观世变专题汇总页不让历史撒谎 2019-06-09
  • 5分钟搞定的微波炉米麻薯,颜值口感双满分 2019-06-08
  • 以大刀阔斧改革激发社会活力 2019-06-04
  • 央视4频道每天下午播放。 2019-06-03
  • 细数vivo NEX亮点 骁龙8458GB+256GB屏幕指纹 2019-06-03
  • 五月来电排行榜——五大热盘最火 ——凤凰网房产北京 2019-05-29
  • 2018年全军院校招生计划下达:计划招收学员3.05万名 2019-05-28
  • 新疆喀纳斯湖再现不明水生物 2019-05-28
  • 各地一周答复网民留言四千项 最受关注领域与你息息相关 2019-05-27
  • 北京冬奥场馆建设注重赛后利用 2019-05-25
  • 侯德义:用全生命周期理念推动环境修复行业发展 2019-05-21
  • 中山八路总站 调整12公交线 2019-05-15
  • 让山里娃感受智慧科技乐趣 2019-05-09
  • 余静:“有一肚子的好消息想说给乡亲们说” 2019-05-09
  • 彩客网官网 开奖历史记录表2019 福彩p62开奖结果查询 上海时时彩开奖号码结果查询 黑龙江十一选五走势图正好 青海十一选五遗漏数据 新疆18选7开奖规则 广西快3遗漏隔期统计表 竟彩计算器混合过关 北京赛车冠军记录 ok广东快乐十分走势图 浙江七星彩走势图 足球彩票2019121 河南十一选五技巧 江苏11选5在线投注