PWM输出实验步骤,PWM输出代码

发布者:诚信与爱最新更新时间:2024-07-03 来源: elecfans关键字:PWM输出  脉冲宽度调制  STM32 手机看文章 扫描二维码
随时随地手机看文章

  脉冲宽度调制(PWM),是英文“ Pulse Width Modulation” 的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4路的 PWM 输出。

  PWM输出实验步骤,PWM输出程序

  PWM输出实验步骤,PWM输出程序

  CCR1:捕获比较(值)寄存器(x=1,2,3,4):设置比较值。

  CCMR1: OC1M[2:0]位:对于PWM方式下,用于设置PWM模式1【110】或者PWM模式2【111】、CCER:CC1P位:输入/捕获1输出极性。0:高电平有效,1:低电平有效。CCER:CC1E位:输入/捕获1输出使能。0:关闭,1:打开。

  实验内容:使用 TIM3 的通道 2,把通道 2 重映射到 PB5, 产生 PWM 来控制 DS0 的亮度。

  实验步骤

  1、使能定时器3和相关IO口时钟。

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

  使能GPIOB时钟:RCC_APB2PeriphClockCmd();

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

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

  3、这里我们是要把PB5用作定时器的PWM输出引脚,所以要重映射配置,

  所以需要开启AFIO时钟。同时设置重映射。

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

  GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);

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

  5、初始化输出比较参数:TIM_OC2Init();

  6、使能预装载寄存器: TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

  7、使能定时器。TIM_Cmd();

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

  代码

  #include “led.h”

  #include “delay.h”

  #include “usart.h”

  #include “time.h”

  #include “pwm.h”

  int main()

  {

  u16 led0pwmval = 0;

  u8 dir = 1;

  delay_init();

  LED_Init();

  TIM3_CH2_PWM_Init(899, 0); // 不分频,PWM 频率= 72000/900 = 80KHz;

  while(1)

  {

  delay_ms(10);

  if(dir)

  led0pwmval++;

  else

  led0pwmval--;

  if (led0pwmval 》 300)

  dir = 0;

  if (led0pwmval == 0)

  dir = 1;

  TIM_SetCompare2(TIM3, led0pwmval);

  }

  }

  123456789101112131415161718192021222324252627282930313233343536

  pwm.h

  #ifndef __PWM_H

  #define __PWM_H

  #include “sys.h”

  void TIM3_CH2_PWM_Init(u16 arr, u16 fprer);

  #endif

  12345678910

  pwm.c

  #include “pwm.h”

  void TIM3_CH2_PWM_Init(u16 arr, u16 psc)

  {

  GPIO_InitTypeDef GPIO_InitStructure;

  TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;

  TIM_OCInitTypeDef TIM_OCInitStruct;

  // 使能TIM3的时钟;

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

  // 复用时钟使能;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

  // GPIOB时钟使能;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

  // TIM3_CH2部分重映射到PB.5上;

  GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);

  // 设置PB.5为复用功能输出;

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

  GPIO_Init(GPIOB, &GPIO_InitStructure);

  // 初始化TIM3;

  TIM_TimeBaseInitStruct.TIM_ClockDivision = 0; // 设置时钟分割;

  TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数方式;

  TIM_TimeBaseInitStruct.TIM_Period = arr; // 设置自动重装载值;

  TIM_TimeBaseInitStruct.TIM_Prescaler = psc; // 设置分频系值;

  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);

  // 设置TIM3_CH2的PWM模式

  TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2; // 选择PWM模式2;

  TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable; // 比较输出使能;

  TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High; // 输出极性高;

  TIM_OC2Init(TIM3, &TIM_OCInitStruct);

  // 使能预装载寄存器;

  TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);

  // 使能TIM3;

  TIM_Cmd(TIM3,ENABLE);

  }


关键字:PWM输出  脉冲宽度调制  STM32 引用地址:PWM输出实验步骤,PWM输出代码

上一篇:SysTick定时器介绍,SysTick定时器寄存器
下一篇:一款全自动电饭煲系统的设计与实现

推荐阅读最新更新时间:2026-03-06 06:49

STM32 PWM输出 (STM32F103C8T6 TIM2_CH2 )
以STM32F103C8T6,uVision开发环境为例,注意了,若使用其它相近芯片,本文仅供参考。 以下是main.c,执行后引脚A1输出频率20KHz,占空比75%的方波。 #include stm32f10x.h #include stm32f10x_tim.h //********************************************************************************** void GPIO_CFG() //PWM输出引脚A1函数 { GPIO_InitTypeDef GPIO_
[单片机]
STM32定时器之PWM 4路输出 TIM3、TIM14
以STM32F030F4P6,uVision开发环境为例,注意了,若使用其它相近芯片,本文仅供参考。 程序运行后TIM3的CH1、CH2、CH4,TIM14的CH1输出PWM波形。 以下是main.c文件: #include stm32f0xx.h //转载请注明出处: https://www.cnblogs.com/beiyhs/p/11435583.html 北有寒山 void PWM_GPO_TIM(void) //PWM引脚时钟设置函数 { GPIO_InitTypeDef GPIO_InitStructure;
[单片机]
STM32 Cubemx 输出可调频率与占空比的PWM
  这里就不对STM32的PWM进行讲解了,想要了解的可以百度一下,这里主要说怎么实现。   1、建立工程,我选的是STM32F103zet6芯片,选择定时器的PWM功能      2、配置时钟,我这里配的是内部时钟,没有配外部时钟,而且不是最大时钟,有需要的可以自己改      3、配置定时器,这里的话默认就可以,因为代码里面需要对配置的初始化代码进行修改的,而修改后才可以实现该功能    4、生成代码后,修改代码,找到PWM初始化函数,修改为如下代码,注意要把初始化函数前面的 static 关键字也去掉,而且函数声明也要跟着修改 void MX_TIM4_Init(uint16_t pre,uint16_t pul)
[单片机]
<font color='red'>STM32</font> Cubemx <font color='red'>输出</font>可调频率与占空比的<font color='red'>PWM</font>
STM32 PWM 波形输出首个脉冲宽度问题
调试stm32单片机pwm输出功能时,需要动态调整pwm脉冲占空比,示波器测试发现第一个脉冲占空比始终不对,查找手册也没看到那里需要特殊配置。用cubemx生成代码框架,并配置好频率占空比,只在生成代码中增加启动pwm的调用函数,示波器测试发现第一个脉冲正确了。 问题原因:在用cubemx生成pwm初始化代码后,再通过代码更改pwm的周期和占空比并启动pwm,第一个脉冲占空比就是错误的。第一次启动pwm之前不要修改频率占空比
[单片机]
STM32定时器输出PWM 【自用】
PWM1输出模式配置: 1.配置IO(TIM3 PA6~7 CH1 CH2 GPIO_Mode_AF_PP复用推挽输出 50Mhz速度) /*void GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; //GPIOA and GPIOB clock enable RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //GPIOA Configuration: TIM3 channel 1 and 2 as alternate function push-pull GPIO_InitStructure.
[单片机]
基于STM32芯片三路互补PWM输出的设计实现
硬件:Stm32f103c8t6最小系统。 开发平台:MDK-Arm。 目的:使用Stm32高级定时器TIM1。配置中心对齐模式输出三路互补PWM。 (1)Stm32的高级定时器: Stm32f103c8t6有一个高级定时器TIM1。STM32的高级定时器比通用定时器增加了可编程死区互补输出,重复计数器,带刹车(短路)功能。这些功能为电机控制提供了便利。其中重复计数器下篇文章单独讲。 TIM1的IO分配: (2)高级定时器框图分析: 图1 图1高级定时器框图,可分为6部分,①时钟源选择,②控制器,③时基单元,④输入捕获,⑤输出比较,⑥刹车断路。 ①时钟选择: 时钟源有:内部时钟(CK_INT),外部时钟模式1,外部时钟模式
[单片机]
基于<font color='red'>STM32</font>芯片三路互补<font color='red'>PWM</font><font color='red'>输出</font>的设计实现
STM32定时器(一)PWM输出
一、 STM32定时器分类众多,按照内核、外核标准分为两部分:核内定时器+核外定时器 1)核内定时器:Systick 2)外设定时器:特定应用定时器+常规定时器 3)特定应用定时器:LPTIM,RTC,WTD,HRTIM 4)常规定时器:基本定时器TIM6&TIM7)、通用定时器(TIM2TIM5,TIM9TIM14)、高级定时器(TIM1&TIM8) 【常规定时器: 基本定时器:计划没有任何对外输入/输出,常用作时基,实现基本的计数和定时功能。 通用定时器:除了基本的定时器的时基功能外,还可以对外作输入捕获、输出比较以及连接其他传感器接口(除了编码器和霍尔传感器) 高级定时器:此类的定时器功能强大,除了具备通用的定时器的功
[单片机]
<font color='red'>STM32</font>定时器(一)<font color='red'>PWM</font><font color='red'>输出</font>
STM32PWM波形输出配置的大神总结
本文分享STM32之PWM波形输出配置总结。 一. TIMER分类: STM32中一共有11个定时器,其中TIM6、TIM7是基本定时器;TIM2、TIM3、TIM4、TIM5是通用定时器;TIM1和TIM8是高级定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。其中系统嘀嗒定时器是前文中所描述的SysTick。 其中TIM1和TIM8是能够产生3对PWM互补输出,常用于三相电机的驱动,时钟由APB2的输出产生。TIM2-TIM5是普通定时器,TIM6和TIM7是基本定时器,其时钟由APB1输出产生。 二、PWM波形产生的原理: 通用定时器可以利用GPIO引脚进行脉冲输出,在配置为比较输出、PWM输出功能时,捕获/比较寄存器T
[单片机]
<font color='red'>STM32</font>的<font color='red'>PWM</font>波形<font color='red'>输出</font>配置的大神总结
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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