0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

详解stm32的定时器8输出PWM

硬件攻城狮 来源:硬件攻城狮 2023-01-05 11:01 次阅读

我在定时器3的例程上面改,改了很久都没改好,百度看别人说定时器1和定时器8需要额外的指令用于PWM输出,今天下午硬件的人来要东西了,来不及研究了,于是网上找了个定时器8的4个通道全部可以输出的例程记录一下,已经经过本人试验是OK的。

1.调用:

TIM8_PWM_Init(1439 ,0);    //不分频。PWM频率=72000000/1440=50Khz

2.函数源码:

//TIM8 PWM部分初始化 
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM8_PWM_Init(u16 arr,u16 psc)
{  
  GPIO_InitTypeDef GPIO_InitStructure;
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_OCInitTypeDef  TIM_OCInitStructure;


  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE); //使能定时器3时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);  //使能GPIO外设和AFIO复用功能模块时钟
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; //TIM_CH2
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIO
  
  //初始化TIM8
  TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
  TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
  TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
  TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位


  //初始化TIM8 Channel2 PWM模式  
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset ;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low ; //输出极性:TIM输出比较极性高
  TIM_OC1Init(TIM8, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM8 OC2


  TIM_OC1PreloadConfig(TIM8, TIM_OCPreload_Enable);  //使能TIM8在CCR2上的预装载寄存器


  TIM_SetCompare1(TIM8,474);


  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset ;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low ; //输出极性:TIM输出比较极性高
  TIM_OC2Init(TIM8, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM8 OC2


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


  TIM_SetCompare2(TIM8,700);


  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset ;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low ; //输出极性:TIM输出比较极性高
  TIM_OC3Init(TIM8, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM8 OC2


  TIM_OC3PreloadConfig(TIM8, TIM_OCPreload_Enable);  //使能TIM8在CCR2上的预装载寄存器


  TIM_SetCompare3(TIM8,900);


  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset ;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low ; //输出极性:TIM输出比较极性高
  TIM_OC4Init(TIM8, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM8 OC2


  TIM_OC4PreloadConfig(TIM8, TIM_OCPreload_Enable);  //使能TIM8在CCR2上的预装载寄存器


  TIM_SetCompare4(TIM8,1200);


  TIM_Cmd(TIM8, ENABLE);  //不使能TIM8


  TIM_CtrlPWMOutputs(TIM8,ENABLE);   
}
审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PWM
    PWM
    +关注

    关注

    114

    文章

    4901

    浏览量

    209930
  • STM32
    +关注

    关注

    2240

    文章

    10674

    浏览量

    348806
  • 定时器
    +关注

    关注

    23

    文章

    3148

    浏览量

    112043
  • 函数
    +关注

    关注

    3

    文章

    3882

    浏览量

    61310

原文标题:stm32的定时器8输出PWM

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32定时器(一)PWM输出

    STM32定时器分类众多,按照内核、外核标准分为两部分:核内定时器+核外定时器
    的头像 发表于 07-21 14:51 2700次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>定时器</b>(一)<b class='flag-5'>PWM</b><b class='flag-5'>输出</b>

    介绍通过STM32定时器输出PWM

    目录01、PWM介绍02、STM32的管脚复用03、STM32输出PWM原理04、STM32
    发表于 08-04 08:21

    STM32的5种定时器简介

    33.7.5.SYSTICK定时器详解43.7.6.STM32定时器学习要点3.7.7.定时器的数据手册3.7.8.
    发表于 08-16 06:11

    STM32定时器详解

    结合起来使用的话可以实现非常丰富的功能,可以测量输入信号的脉冲宽度,可以生产输出波形。定时器生产 PWM 控制电机状态是工业控制普遍方法,这方面知识非常有必要深入了解。STM32F4
    发表于 08-18 06:17

    STM32定时器配置、PWM输出比较详解、电机PWM输出配置 精选资料分享

    STM32定时器配置详解STM32拥有三种定时器基本功能其通用定时器可以被用于:测量输入信号的脉
    发表于 08-19 06:47

    stm32以及51单片机PWM输出详解

    ,是利用微处理的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制,输出一个方波。(2)STM32定时器
    发表于 12-01 06:26

    STM32通用定时器输出比较功能

    STM32的通用定时器定时输出PWM功能的使用本次还是使用发光二极管来验证定时器的使用目录
    发表于 12-01 06:30

    如何使用定时器进行PWM输出

    使用定时器进行PWM输出STM32定时器除了 TIM6 和 7。其他的定时器都可以用来产生
    发表于 03-02 07:30

    STM32单片机如何通过定时器的控制输出PWM

    STM32F103ZET6里共有8个定时器,其中高级定时器有TIM1-TIM5、TIM8,共6个。 我这里输出PWM
    发表于 11-22 15:56 7853次阅读
    <b class='flag-5'>STM32</b>单片机如何通过<b class='flag-5'>定时器</b>的控制<b class='flag-5'>输出</b><b class='flag-5'>PWM</b>

    如何通过STM32定时器输出PWM

      本文将介绍通过STM32定时器输出PWM,如果对定时器不太熟悉的同学可以看下之前的文章《STM32
    的头像 发表于 02-20 15:08 2.1w次阅读
    如何通过<b class='flag-5'>STM32</b>的<b class='flag-5'>定时器</b><b class='flag-5'>输出</b><b class='flag-5'>PWM</b>?

    嵌入式单片机基础篇(九)之通用定时器(二)PWM输出

    ,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制,输出一个方波。(2)STM32定时器除了 TIM6 和 7。其他的
    发表于 11-22 17:51 68次下载
    嵌入式单片机基础篇(九)之通用<b class='flag-5'>定时器</b>(二)<b class='flag-5'>PWM</b><b class='flag-5'>输出</b>

    [STM32]通用定时器的使用

    STM32的通用定时器定时输出PWM功能的使用本次还是使用发光二极管来验证定时器的使用目录
    发表于 11-22 19:06 24次下载
    [<b class='flag-5'>STM32</b>]通用<b class='flag-5'>定时器</b>的使用

    STM32-通用定时器-PWM输出

    1 通用定时器PWM概述1.1STM32定时器输出通道引脚这里以TIM3为例来讲解。STM32
    发表于 11-26 15:36 22次下载
    <b class='flag-5'>STM32</b>-通用<b class='flag-5'>定时器</b>-<b class='flag-5'>PWM</b><b class='flag-5'>输出</b>

    STM32F4单定时器独立输出四路PWM脉冲

    本文以STM32F405单片机为例,介绍如何用一个定时器的四个通道独立地输出四路PWM脉冲。主要使用定时器
    发表于 11-30 10:06 28次下载
    <b class='flag-5'>STM32</b>F4单<b class='flag-5'>定时器</b>独立<b class='flag-5'>输出</b>四路<b class='flag-5'>PWM</b>脉冲

    STM32F103C8T6定时器TIM4通道1、2输出PWM

    STM32F103C8T6定时器TIM4通道1、2输出PWM这美妙的波形,真好,我他喵的终于把你弄出来了。STM32F103C8T6使用
    发表于 12-02 18:21 66次下载
    <b class='flag-5'>STM32</b>F103C8T6<b class='flag-5'>定时器</b>TIM4通道1、2<b class='flag-5'>输出</b><b class='flag-5'>PWM</b>