历史上的今天

今天是:2024年09月07日(星期六)

2019年09月07日 | STM32 多个定时器 多路PWM配置

发布者:快乐行者 来源: eefocus关键字:STM32  定时器  PWM配置 手机看文章 扫描二维码
随时随地手机看文章

实验过程中的笔记   在持续更新中  只是一个简化版本


利用定时器1 2 3 4 配置的PWM输出  


PWM输出注意外部接入的高电平还是低电平   注意修改 


    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性高TIM_OCPolarity_High  接高电平极性为高  接低电平输出极性为低TIM_OCPolarity_Low


 //定时器3  ,输出TIM3 CH2的PWM脉冲波形    GPIOB.5  重映射的端口remap

 void pwm_tim3()

 {

 

     u16 led0pwmval=0;

    u8 dir=1;     

 

          delay_ms(10);     

        if(dir)led0pwmval++;

        else led0pwmval--;


         if(led0pwmval>300)dir=0;

        if(led0pwmval==0)dir=1;                                         

        TIM_SetCompare2(TIM3,led0pwmval);         //占空比定义函数  

 

 }

 

  //定时器2  ,输出TIM2 CH1的PWM脉冲波形    GPIOA.0  没有重映射

 void pwm_tim2()

 {

 

     u16 led0pwmval=0;

    u8 dir=1;     

 

          delay_ms(10);     

        if(dir)led0pwmval++;

        else led0pwmval--;


         if(led0pwmval>300)dir=0;

        if(led0pwmval==0)dir=1;                                         

        TIM_SetCompare1(TIM2,led0pwmval);         //占空比定义函数  

 

 }


 


 


 


#include "timer.h"

#include "led.h"

#include "usart.h"

//////////////////////////////////////////////////////////////////////////////////     

//本程序只供学习使用,未经作者许可,不得用于其它任何用途

//ALIENTEK战舰STM32开发板

//定时器 驱动代码       

//正点原子@ALIENTEK

//技术论坛:www.openedv.com

//修改日期:2012/9/4

//版本:V1.1

//版权所有,盗版必究。

//Copyright(C) 广州市星翼电子科技有限公司 2009-2019

//All rights reserved                                      

//********************************************************************************

//V1.1 20120904

//1,增加TIM3_PWM_Init函数。

//2,增加LED0_PWM_VAL宏定义,控制TIM3_CH2脉宽                                      

//////////////////////////////////////////////////////////////////////////////////  

         

//通用定时器3中断初始化

//这里时钟选择为APB1的2倍,而APB1为36M

//arr:自动重装值。

//psc:时钟预分频数

//这里使用的是定时器3!

void TIM3_Int_Init(u16 arr,u16 psc)

{

  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

    NVIC_InitTypeDef NVIC_InitStructure;


    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能


    TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值     计数到5000为500ms

    TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  10Khz的计数频率  

    TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim

    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式

    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

 

    TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断


    NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中断

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能

    NVIC_Init(&NVIC_InitStructure);  //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器


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

                             

}

//定时器3中断服务程序

void TIM3_IRQHandler(void)   //TIM3中断

{

    if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源 

        {

        TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM 中断源 

        LED1=!LED1;

        }

}


//TIM4 PWM部分初始化 

//PWM输出初始化  PB6  没有映射

//arr:自动重装值

//psc:时钟预分频数

void TIM4_PWM_Init(u16 arr,u16 psc)

{  

    GPIO_InitTypeDef GPIO_InitStructure;

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

    TIM_OCInitTypeDef  TIM_OCInitStructure;

    


    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);    //使能定时器4时钟

     //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);  //使能GPIO外设和AFIO复用功能模块时钟

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  , ENABLE);  //使能GPIO外设和AFIO复用功能模块时钟

    //GPIO_PinRemapConfig(GPIO_PartialRemap_TIM2, ENABLE); //Timer2部分重映射  TIM4_CH1->PB6 没有映射

 

   //设置该引脚为复用输出功能,输出TIM4 CH1的PWM脉冲波形    GPIOB.6  没有映射  重映射的端口remap 

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //TIM_CH1

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO  PB.6 

    //GPIO_SetBits(GPIOB,GPIO_Pin_6);                         //PB.6 输出高

   //初始化TIM4

    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(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

    

    //初始化TIM2 Channel2 PWM模式     

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2

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

    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性高TIM_OCPolarity_High  接高电平极性为高  接低电平输出极性为低TIM_OCPolarity_Low

    TIM_OC1Init(TIM4, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM4 CH1 TIM_OC1PreloadConfig

//    CH1的PWM脉冲波形


    TIM_CtrlPWMOutputs(TIM4,ENABLE); //⑤MOE 主输出使能   非高级定时器可省略

    TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);  //使能TIM4在CCR1上的预装载寄存器  TIM4 CH1

    TIM_ARRPreloadConfig(TIM4, ENABLE); //使能 TIMx 在 ARR 上的预装载寄存器  非高级定时器可省略

    TIM_Cmd(TIM4, ENABLE);  //使能TIM4

    


}



//TIM3 PWM部分初始化 

//PWM输出初始化

//arr:自动重装值

//psc:时钟预分频数

void TIM3_PWM_Init(u16 arr,u16 psc)

{  

    GPIO_InitTypeDef GPIO_InitStructure;

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

    TIM_OCInitTypeDef  TIM_OCInitStructure;

    


    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);    //使能定时器3时钟

     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);  //使能GPIO外设和AFIO复用功能模块时钟

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC  | RCC_APB2Periph_AFIO, ENABLE);  //使能GPIO外设和AFIO复用功能模块时钟

    GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射  TIM3_CH2->PB5   PC7

 

   //设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形    GPIOB.5  重映射的端口remap

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO

    //设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形    GPIOC.7  重映射的端口remap

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //TIM_CH2

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIO

   //初始化TIM3

    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(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

    

    //初始化TIM3 Channel2 PWM模式     

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2

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

    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高

    TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC2


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

 

    TIM_Cmd(TIM3, ENABLE);  //使能TIM3

    


}


//TIM2 PWM部分初始化 

//PWM输出初始化

//arr:自动重装值

//psc:时钟预分频数

void TIM2_PWM_Init(u16 arr,u16 psc)

{  

    GPIO_InitTypeDef GPIO_InitStructure;

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

    TIM_OCInitTypeDef  TIM_OCInitStructure;

[1] [2] [3]
关键字:STM32  定时器  PWM配置 引用地址:STM32 多个定时器 多路PWM配置

上一篇:stm32的引脚配置
下一篇:STM32F1系列之常用外设说明

推荐阅读

9月5日,由全球领先的汽车电子及人工智能物联网芯片公司恩智浦半导体(NASDAQ:NXPI)主办的“2018恩智浦未来科技峰会”在深圳隆重召开,本次峰会为期两天,以“智联中国 创领未来”为主题。邀请了来自AI-IoT、汽车电子等领域的商业领袖、技术专家和从业者到场。此外,更有来自百度、阿里巴巴、吉利汽车、京东、小米等企业代表出席峰会,与恩智浦一起探讨...
热钱还在不断涌入自动驾驶行业,一场合纵连横后的大战爆发在即。 无论是通用-本田-Cruise、丰田-Uber,还是大众-福特-Argo、现代起亚-亚马逊-Aurora、Waymo-雷诺日产联盟或是百度,都有希望在这场战争中称王。 而激光雷达公司,将有望成为这些巨头们背后最大的「兵工厂」。 1、寻找激光雷达行业应用的「金矿」自 2007 年以来,Velodyne 开始为全球大大...
从之前曝光的细节看,iPhone 12系列今年将迎来涨价,由于支持了5G网络,苹果不得不靠涨价来平衡成本。据外媒最新消息称,今年的四款iPhone 12中,只有6.7英寸iPhone 12 Pro Max会支持毫米波5G,毫米波技术仅限于苹果最大、最贵的iPhone。此前,有传言称 iPhone 12 Pro和Pro Max都会支持毫米波5G,不过由于加入支持后,成本会陡然增加,所以最终衡...
此刻示波器屏幕上呈现的是某一LIN协议的触发波形,我们想把该波形存储起来,该如何操作呢?ZDS2022示波器充分站在用户角度,设计了一键存储的功能,而且,ZDS2022同样支持波形导入的功能。按下【Save/Recall】键,选择存储软键,在存储类型中选择保存的图片格式,存储类型包含7种格式,选择PNG图像,存储路径可选本地闪存,也可以在示波器面板上的USB口插...

史海拾趣

问答坊 | AI 解惑

bootloader下的点屏

今天一直在看bootloader.可就是没找到LCD驱动部分写在哪?可屏就是亮了。我知道这个差异性很大。可还是希望你们说下,你们的位置。我好再去看看,谢谢…

查看全部问答∨

怎么添加msxml组件

我的win ce 6.0安装了msxml但是msxml.XMLHTTP这个activex控件没有,想要添加这个activex请问有啥办法吗?…

查看全部问答∨

求助:如何在Win CE下开发PC104的GPIO驱动呢?

由于小弟初涉这一领域的问题,差了一些资料至今仍一头雾水,不知哪位大侠好心相助!实在感激不尽!!…

查看全部问答∨

关于windug虚拟机调试问题(我是新手,请各位高手帮忙,谢谢)

Opened \\\\.\\pipe\\com_1 Waiting to reconnect... Connected to Windows XP 2600 x86 compatible target, ptr64 FALSE Kernel Debugger connection established.  (Initial Breakpoint requested) Symbol search path is: F:\\vir ...…

查看全部问答∨

~~ 有没有大虾在搞TEA5990的,能不能给点资料,拜托了~~~~

偶最近在搞恩智浦的FM-RDS芯片TEA5990的驱动,苦于找不到资料,有没大虾搞过的,给个资料吧,如果有例程的话更好了,我准备用的是I2C模式做, 先谢了~~…

查看全部问答∨

CE 5.0定制的问题

小弟用platform builder 5.0定制了一个系统.在加入自定义驱动时出了点问题. 1.在CE里如何查看windows下的文件?正常是只能看到快捷方式的.怎样查看内核里包含的组件? 2.在platform.bib和platform.reg里分别做了相应的配置.但驱动没办法跑起来.网上 ...…

查看全部问答∨

绝对式编码器的相位对齐方式

绝对式编码器的相位对齐对于单圈和多圈而言,差别不大,其实都是在一圈内对齐编码器的检测相位与电机电角度的相位。早期的绝对式编码器会以单独的引脚给出单圈相位的最高位的电平,利用此电平的0和1的翻转,也可以实现编码器和电机的相位对齐,方法 ...…

查看全部问答∨

【问TI】M3 ADC参考电压

用51做数字电压表或者使用AD时,因为用的USB供电 电压不是标准,所以测出来的电压会有偏差, M3也会遇到这个问题吧,是如何解决的呢?…

查看全部问答∨

tinyos移植

我按网上移植步骤做的,大致步骤做完了,在测试程序编译时出现错误:confused by earllier errors - bailing out compiled····求各位高手指点一下!…

查看全部问答∨

寻找ARM芯片周边电路设计的资料

     想寻找ARM版周边电路设计的资料,比如怎么连接flash,ram,LCD等,最好是结合电路图的讲解。     不知道有没有。。。。…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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