一、简述
记--使用定时器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 } //主函数 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”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。 5.3 设置定时器4输出PWM TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1; //PWM1模式五、总结
频率 :时钟速度 1GHZ = 1000MHZ = 1000 000 KHZ =1 000 000 000 HZ (如12MHz:1秒12 000 000个脉冲)
占空比:占空比是指在一个脉冲循环内,通电时间(有效电平)相对于一个脉冲总时间所占的比例。(可以简单理解为该高、低电平的占脉冲总时间的比例)
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的值设置比较值,调整占空比
上一篇:stm32f103呼吸灯(PWM脉冲宽度调制)
下一篇:STM32f103核心板点呼吸灯教程
推荐阅读最新更新时间:2024-11-17 09:18
推荐帖子
- 画板子搞设计要懂规格书里的三视图
- 在学校学习的时候,三视图一般都会多少学过,可能结构设计学的多,电子专业的学的少一些,但三视图的几个图相信大家还是知道一些的。三视图就是主视图、俯视图、左视图的总称。pcblayout培训在元器件规格书里面,大多数情况是很规范的三视图,当然有些简单是有两个图,因为这两个图已经可以表达所有的尺寸关系了。有些时候,还附带有立体图,那这样就更好理解。我们要习惯看没有立体图的较抽象的尺寸图,在很多时候,我们是先做好板,再看到实物的。一个物体有六个视图:从物体的前面向后面投射所得
- qwqwqw2088 PCB设计
- 菜鸟请教D12驱动应用程序问题
- 菜鸟请教D12驱动应用程序问题小弟使用D12和51做一个大量数据传输的东西。固件使用ZLG的,驱动是用DriverStudio3.1直接生成的。使用DS里面的函数OpenByInterf()打开USB设备,用ReadFile()阻塞模式来读取USB数据因为在51那里是连续发的,所以我的应用程序也是循环读取,但老是读不到数据如果只是读一次(ReadFile())的话,就可以读到数据但我使用循环读的时候,在读完一帧数据的时候(端点2,64Byte),再Sleep几十微秒,也可以正确的读
- lmx5078 嵌入式系统
- NJR_Wearable_Shanghai_201608
- NJR_Wearable_Shanghai_201608
- lemonade815 汽车电子
- 【MSP430 编译器使用经验】+Energia初探
- Energia是一种挺有意思的工具,界面简单,功能清晰。如果用习惯了CCS,KEIL,就会觉得有些简陋。不过用一段时间后,才发现,用在MSP430上,正好。CCS是集成的开发工具,包括了全部的TI产品,以及丰富的文档。但是MSP430系列本身就具有低功耗,精简系统和集成的特点,其实有限的硬件资源上实现功能,代码开发是非常精简的。为了帮助开发,TI有GRACE,非常简单易用,不过多少牺牲了灵活性。但是用ENERGIA,即能集成了MSP430的全部开发流程。而且文档也很丰富,访问http://e
- fyaocn 微控制器 MCU
- 16-TCP 协议(同时关闭)
- 有同学会问,为什么不写同时打开?(同时打开指的是两端都是服务器,两端同时向对方建立连接请求)。一方面,在我们实际生活中几乎遇不到;另一方面,很多操作系统实际都不能正确的支持同时打开,所以,这里就不写了,如果你对这个很感兴趣,请参考《TCP/IP详解卷1:协议》的18.8小节。1.同时关闭同时关闭,指的是已建立连接的两端同时发起主动关闭。TCP协议允许这种事情发生。见图1.图1同时关闭应用层的进程,同时发出关闭命令,两端均从ESTABLIS
- 兰博 嵌入式系统
- 学学绕制高频变压器
- 变压器参数需:磁芯:EE22原边:134T(1-3脚),辅助:32T(5-4脚),输出:15T(10-9脚)原边电感:138010%uH漏感:44uH引脚分布图:特别注意:绕制方法为网上下载,其中变压器绕制方法是对的,但其中存在着很多问题(比如,正规变压器的绕组的头和尾是要添加铁氟龙套管的,每一层之间也得打挡墙增加绝缘,要使变压器耦合好,通常的做法是三明治绕法,比如,1-3先绕35圈然后10-9,然后3-2绕35圈,然后绕5-
- qwqwqw2088 模拟与混合信号
设计资源 培训 开发板 精华推荐
- LT1952MPGN 36V 至 72V、3.3V、40A 同步正向转换器的典型应用电路
- 具有 3.3V、±5V 输出的 LT1940 降压型稳压器的典型应用电路
- 使用 Richtek Technology Corporation 的 RT8015D 的参考设计
- TWR-K20D72M: Kinetis K24 72 MHz MCU塔式系统模块
- LTC3867EUF 1.2V、10A 输出同步降压控制器的典型应用电路
- LTC3615EUF-1 双路 4MHz、3A 同步降压型 DC/DC 转换器的典型应用
- L7806A 固定输出稳压器的典型应用
- 基于stm32的物联网时钟
- 30W、-27V、5.8V、5.8V、15V、24V、33V交流转直流多路输出电源
- LT8570IMS8E-1 1.5MHz、5V 至 12V 输出升压转换器的典型应用