初学stm32-PWM的应用-呼吸灯

发布者:HarmoniousVibes最新更新时间:2022-05-28 来源: eefocus关键字:stm32  PWM  呼吸灯 手机看文章 扫描二维码
随时随地手机看文章

PWM概述

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

STM32F4 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。通过查看开发板的原理图(如下),可发现PF9引脚连接LED0,同时也是作为TIM14_CH1的复用输出端口,知道此前提,我们就可以开始搞事情了。

PWM输出步骤

使能定时器14和相关IO口时钟。

使能定时器14时钟:RCC_APB1PeriphClockCmd();

使能GPIOF时钟:RCC_AHB1PeriphClockCmd ();

初始化IO口为复用功能输出。函数:GPIO_Init();

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能

GPIOF9复用映射到定时器14

GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14);

初始化定时器:ARR,PSC等:TIM_TimeBaseInit();

初始化输出比较参数:TIM_OC1Init();

使能预装载寄存器: TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable);

使能自动重装载的预装载寄存器允许位 TIM_ARRPreloadConfig(TIM14,ENABLE);

使能定时器。

不断改变比较值CCRx,达到不同的占空比效果:TIM_SetCompare1();

呼吸灯实现

pwm.c


#include "pwm.h"


/*

引脚说明:

LED0灯连接PF9,TIM14通道1

TIM14 -- APB1,定时器频率:84MHZ

*/


void Pwm_Led0_Init(void)

{

GPIO_InitTypeDef GPIO_InitStruct;

TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;

TIM_OCInitTypeDef  TIM_OCInitStruct; //定时一个该结构体

//开启 TIM14 和 和 GPIO时钟,配置 PF9选择复用功能 AF9 (TIM14)输出。

//库函数使能 TIM14 时钟

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE);

//还需要使用到GPIOF9,所以也要使能该引脚 

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); 

//由于使用到PF9的复用功能,利用库函数使其引脚与TIM14定时器

GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14); 

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9; //GPIOF9

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; //配置引脚为复用功能

GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //速度 50MHz

GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; //推挽复用输出

GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; //上拉

GPIO_Init(GPIOF,&GPIO_InitStruct); //初始化 PF9,用库函数寄存器


TIM_TimeBaseStruct.TIM_Prescaler = 84-1 ; //设置定时器的分频值 1MHZ

TIM_TimeBaseStruct.TIM_Period = 500-1; //设置定时器的的自动重装载的值 周期为500us

TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;//设置定时器为向上计数模式

TIM_TimeBaseStruct.TIM_ClockDivision= TIM_CKD_DIV1;//设置定时器的时钟分频因子

TIM_TimeBaseInit(TIM14,&TIM_TimeBaseStruct);//初始化定时器 14

TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1; //选择PWM的模式,选择PWM模式1

TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_Low; //输出的极性,输出是高电平还是低电平,这里选择低电平

TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable; //用于设置输出的使能,使能PWM输出到端口

//根据设定信息配置TIM14 OC1 -- 通道1

TIM_OC1Init(TIM14, &TIM_OCInitStruct); 

//使能预装载寄存器:

TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable); 

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

TIM_ARRPreloadConfig(TIM14,ENABLE);


//使能定时器。

TIM_Cmd(TIM14, ENABLE);


}


main.c


#include "stm32f4xx.h"

#include "led.h"

#include "delay.h"

#include "pwm.h"



int main(void)

{

//NVIC分组(一个工程当中只能配置一次分组)抢占优先级2位,值范围:0~3;响应优先级2位,值范围:0~3;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

//LED灯初始化

Led_Init();

Delay_Init();

Pwm_Led0_Init();

//对比的灯

GPIO_ResetBits(GPIOE, GPIO_Pin_14);

int i;

while(1)

{

//值范围:0~499  灯渐亮

for( i = 0; i<= 499 ; i++)

{

TIM_SetCompare1(TIM14, i);

delay_ms(5);

}

//灯渐灭

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

{

TIM_SetCompare1(TIM14, i);

delay_ms(5);

}

}

return 0;

}


关键字:stm32  PWM  呼吸灯 引用地址:初学stm32-PWM的应用-呼吸灯

上一篇:初学stm32-通用定时器的使用
下一篇:STM32进阶-串口及蓝牙通信 控制开发板硬件详细步骤-USART1/2

推荐阅读最新更新时间:2024-11-10 12:31

STM32系列单片机命名规则
示例: STM32 F 100 C 6 T 6 B XXX 1 2 3 4 5 6 7 8 9 从上面的料号可以看出以下信息: ST品牌ARM Cortex-Mx系列内核32位超值型MCU,LQFP -48封装 闪存容量32KB 温度范围-40℃-85℃; 1.产品系列: STM32代表ST品牌Cortex-Mx系列内核(ARM)的32位MCU; 2.产品类型: F:通用快闪(Flash Memory); L:低电压(1.65~3.6V);F类型中F0xx和 F1xx系列为2.0~3.6V; F2xx和F4xx系列为1.8~3.6V;W:无线系统芯片,开发版. 3.产品子系列
[单片机]
东芝推出适用于3相无刷电机的600V正弦波PWM驱动器IC
东芝电子元件及存储装置株式会社(“东芝”)宣布推出新型3相无刷电机驱动器“TB67B000AHG”,能满足空调、空气净化器、除湿器和吊扇等家用电器的需求。新型驱动器是“TB67B000系列”中新增的高压产品,能在单个封装中实现高效无刷电机驱动,并降低噪声。 TB67B000AHG产品图 市场对有助于降低功耗的高效3相无刷电机的需求日益增长,特别是对新兴经济体而言,这种产品能很好地应对供电电压波动的问题。此类电机需要更高电压的PWM驱动器IC来确保产品的可靠性。 东芝最新开发的600V TB67B000AHG驱动器IC与现有的500V TB67B000HG引脚兼容,可以轻松替
[电源管理]
东芝推出适用于3相无刷电机的600V正弦波<font color='red'>PWM</font>驱动器IC
STM32PWM设置4路相差90度的输出信号
void TIM_Encoder_Config(u16 PPS)//设置编码器的4路相差90度的PWM信号 { double temp = 4000; /* Time Base configuration */ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_BDTRInitTypeDef TIM_BDTRInitStructure; temp = temp*72/PPS -1; TIM_TimeBaseStructure.TIM_Period = (u16)temp
[单片机]
stm32阶段总结录
一、C语言之预处理 预处理有三种:宏定义、条件编译、文件包含。 1.1、宏定义 #define EXT extern // 用EXT代替extern关键字 1.2、文件包含 #include “stm32f10x.h” 1.3、条件编译 防止同一个头文件被不同的文件多次包含,编译时所有文件编译成一个可执行文件有大量命名冲突。 #ifndef 标识符 //if not defined #define 标识符 代码段落 #endif #ifndef _public_h #define _public_h #include public.h #endif #空指令,无任何效果 #include包含一个源代码文
[单片机]
<font color='red'>stm32</font>阶段总结录
意法半导体发布安全软件,保护STM32边缘AI设备连接AWS IoT Core的安全
新开发者软件为STM32H5设计,利用ST的Secure Manager安全软件,简化物联网设备与AWS平台的安全连接 2023年10月10日, 中国--服务多重电子应用领域、全球排名前列的半导体公司意法半导体(STMicroelectronics,简称ST;)日前在STM32Cube开发工具包内新增一款软件,以简化高性能物联网(IoT)设备与AWS云的连接。 意法半导体发布了X-CUBE-AWS-H5扩展包,让物联网设备能够无缝、安全地接入AWS云。在这个软件扩展包中有一套为专门终端设备STM32H5系列高性能微控制器设计的软件库和应用代码示例。 该解决方案基于FreeRTOS开源实时操作系统和意法半导体的Se
[嵌入式]
意法半导体发布安全软件,保护<font color='red'>STM32</font>边缘AI设备连接AWS IoT Core的安全
STM32中较为常见的C语言基础知识
C语言是单片机开发中的必备基础知识,本文列举了部分 STM32 学习中比较常见的一些C语言基础知识。 1位操作 下面我们先讲解几种位操作符,然后讲解位操作使用技巧。C语言支持以下六种位操作: 下面,重点讲解一下位操作在单片机开发中的一些实用技巧。 在不改变其他位的值的状况下,对某几个位进行设值 这个场景在单片机开发中经常使用,方法就是我们先对需要设置的位用&操作符进行清零操作,然后用 | 操作符设值。 比如,我要改变 GPIOA 的状态,可以先对寄存器的值进行&清零操作: GPIOA- CRL&=0xFFFFFF0F;/*将第4~7位清零*/ 然后再与需要设置的值进行 |
[单片机]
<font color='red'>STM32</font>中较为常见的C语言基础知识
STM32-(13):GPIO的库函数使用
库函数实现串行通信 1、库函数的说明 2、硬件电路与重映射 3、程序调试技巧 固件函数库 用库函数的方法实现LED亮灭 核心板关于164通信引脚 由上图可知164串行通信的三个引脚: CLK:PB15 CLR:PE11 Data:PE10 底板关于164通信引脚 CLR是异步清零端,与同步通信没有关系,但这个引脚必须为高电平,同步通信才有效,Q1~Q8是输出引脚,连接的是八个发光二极管,当输出为高电平,二极管就会被点亮。 /*Include---------------------------*/ #include stm32f10x_lib.h //包含所有的头文件 #include stdio.h //----
[单片机]
STM32-(13):GPIO的库函数使用
ST最新STM32 ARM Cortex-M0微控制器提升集成度和用户体验
中国,2014年12月3日 —— 意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)最新的STM32F091 ARM® Cortex®-M0微控制器,克服了目前定位在经济型应用的同类产品的限制,可提供大容量片上存储器和多达8通用同步/异步串行接收/发送器 (USART, Universal Synchronous/Asynchronous Receiver/Transmitter),为车载音响或三相电表等应用节省多路复用通信端口。 STM32F091微控制器单片集成最高256KB的闪存和32KB的 SRAM存储器,足以实现Java堆栈,能够运行通常只有大存储容量或昂贵产品才能运
[嵌入式]

推荐帖子

PCB上的器件热耦合与散热解决方案
任何散热解决方案的目标都是确保设备的工作温度不超过其制造商规定的安全限值。在电子工业中,这个工作温度被称为器件的“结温”。例如,在处理器中,这个术语字面上指的是电能转换为热量的半导体结。为了保持工作,热量必须以确保可接受的结温的速率流出半导体。当热流从整个器件封装的结处移动时,这种热流遇到阻力,就像电子在流过导线时面对电阻一样。在热力学方面,这种电阻称为导电电阻,由几个部分组成。从结点开始,热量可以流向元件的壳体,可以放置散热器。这被称为ΘJC,或结至壳体的热阻。热量也可以从组件的顶
ohahaha PCB设计
【NUCLEO-U083RC】4.驱动段式LCD屏(1)
本来在计划中准备使用LCD1602作为显示屏的,但是看过ST对U0延长电池使用时间的定义后,发现LCD1602对于电池供电貌似不是很友好。所以本次测评使用LCD数码管进行测试1.LCD简介段式LCD(LiquidCrystalDisplay,液晶显示屏)是一种显示屏技术,通过排列成段的单个液晶单元格来形成文字和数字。与全点阵LCD不同,段式LCD的显示能力较为有限,通常用于显示简单的文本和数字,如计算器、电子表、家用电器和工业设备上的显示屏。段式LCD的
电子烂人 stm32/stm8
瑞萨 M16C/6S系列单片机
瑞萨科技株式会社在亚洲能源周展示了PLC(PowerLineCommunication)组件和电力马达平台。通过PLC,可以远程控制对电力仪表的自动检测和终端电压监视、仪表和变压器的负荷的监视和调整。展出的PLC组件中使用了瑞萨科技的M16C/6S单片机。M16C/6S是内置于YITRAN公司开发的电力线调制解调器IT800的单片机,是最适用于有线通讯化的单片机。有线通讯使用的频带为100~400kHz,在最大值7.5Kbps的情况下也可能进行通讯。同时,适用于微软公司主要针对家用
rain 单片机
高薪急聘硬件设计工程师兼职人员(北京)
职位介绍硬件设计工程师本公司正在做PDA项目的开发,使用的是ARM系统。已经完成第一版产品的开发和小批量生产。现欲招聘一名兼职硬件工程师,负责后续的生产以及后续产品的设计,调试和生产工作。PDA的硬件组成如下:单片机+ARM协处理器+Keyboard+LCD+NANDFlash+USB+RFModule(串口接口)。单片机负责扫描键盘,并启动ARM协处理器。职位描述及要求1.数字、模拟电子线路设计;2.电路调试、测试;3.小批量元器件采购;硬件实验室维护;4.电路
hibozhou 嵌入式系统
[求助]电压超限指示和报警电路的设计
这学期期末要搞一个电路设计,我们选择的课题是:电压超限指示和报警电路的设计,哪位大虾能帮我们设计一个,感激不尽!谢谢了.上面是参考电路~~~电压超限指示和报警电路的设计帮你是害了你,小弟电压超限指示可以使用比较器用运放或者专用比较器如LM339一类的然后输出电平驱动某一个东东报警Re:电压超限指示和报警电路的设计费劲一点的可以用电阻搭个分压电路,用ad采样电压值,用单片机控制。。可以实现模糊点的算法。比如持续超压500ms再报警之类的。这样可以避免毛刺等的误报!Re:电压超
cntjpu 单片机
嵌入式课程体系最佳设计
嵌人式系统是当前最热门最有发展前景的IT应用领域之一,我们平常用的手机、可视电话、数码相机、摄像机、机顶盒、路由器、数控设备或仪表、医疗仪器、航天航空设备等都是嵌入式系统,各个行业对嵌人式技术人才的需求日益旺盛。下面就由卓跃教育为您做一个介绍。对于嵌入式开发工程师来说,在技术上需要逾越三道关卡,分别是\"硬件\"开发、操作系统开发和应用软件开发,三者缺一不可(如果缺一环,在工作中的技术发展会受限)。逾越三个堡垒的最佳途径是通过平台级的应用软件开发,锻造良
zhenbaichi DIY/开源硬件专区
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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