stm32定时器1的2路互补PWM

发布者:心灵律动最新更新时间:2018-06-29 来源: eefocus关键字:stm32  定时器1  互补PWM 手机看文章 扫描二维码
随时随地手机看文章

void TIM1_PWM_Ini(u16 arr,u16 psc)

{

    GPIO_InitTypeDef GPIO_InitStructure;

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

    TIM_OCInitTypeDef  TIM_OCInitStructure;

    TIM_BDTRInitTypeDef TIM_BDTRInitStructure;

//开启时钟

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);                            //使能定时器3时钟

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);       //使能GPIO和服用功能时钟

//  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);                             //引脚重映射要开这个时钟

//初始化GPIO

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9;    //PWM输出在PA8,9,10

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

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

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

 

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14;  //PWM输出在PA7

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

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

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

 

//初始化定时器 TIM1

    TIM_TimeBaseStructure.TIM_Period = arr;                             //设置在自动重装载周期值

    TIM_TimeBaseStructure.TIM_Prescaler =psc;                           //设置预分频值

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

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

//  TIM_TimeBaseStructure.TIM_RepetitionCounter=0;                      //重复寄存器,用于自动更新pwm占空比

    TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);                     

 

//pwm输出配置,TIM_OCInitStructure共七项配置

    TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;                     //设置为pwm2输出模式

      

TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;  

    //TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;              //设置输出极性//输出极性和互补极性的有效电平为低

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

//下面几个参数(除了pulse)是高级定时器才会用到,通用定时器不用配置

  //  TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCPolarity_Low;  

TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCPolarity_High;                //设置互补端输出极性//输出极性和互补极性的有效电平为低

    TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;       //使能互补端输出

    TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset;          //死区后输出状态

    TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCIdleState_Reset;         //死区后互补端输出状态

//设置通道1捕获比较寄存器的脉冲值-占空比为50%

    TIM_OCInitStructure.TIM_Pulse=CCR1_Val;

    TIM_OC1Init(TIM1,&TIM_OCInitStructure);                             //设置通道1

//设置通道2捕获比较寄存器的脉冲值-占空比为25%

    TIM_OCInitStructure.TIM_Pulse=CCR2_Val;

    TIM_OC2Init(TIM1,&TIM_OCInitStructure);

//设置通道3捕获比较寄存器的脉冲值-占空比为12.5%

    TIM_OCInitStructure.TIM_Pulse=CCR3_Val;

    TIM_OC3Init(TIM1,&TIM_OCInitStructure);

//死区和刹车功能配置,高级定时器才有的,通用定时器不用配置TIM_BDTRInitStructure,共七项配置

        TIM_BDTRInitStructure.TIM_OSSRState=TIM_OSSRState_Disable;          //运行模式下输出选择//运行模式下“关闭状态”使能

        TIM_BDTRInitStructure.TIM_OSSIState=TIM_OSSIState_Disable;          //空闲模式下输出选择//关闭模式下“关闭状态”使能

        TIM_BDTRInitStructure.TIM_LOCKLevel=TIM_LOCKLevel_OFF;              //锁定设置  //锁定关闭

        TIM_BDTRInitStructure.TIM_DeadTime=0x90;                            //死区时间设置

        TIM_BDTRInitStructure.TIM_Break=TIM_Break_Disable;                      //刹车功能使能

        TIM_BDTRInitStructure.TIM_BreakPolarity=TIM_BreakPolarity_High;         //刹车输入极性 //刹车输入高电平有效    

        TIM_BDTRInitStructure.TIM_AutomaticOutput=TIM_AutomaticOutput_Enable;   //自动输出使能

     

        TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);        

//使能端的打开

        TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);        //使能TIMx在CCR1上的预装载寄存器?

        TIM_ARRPreloadConfig(TIM1,ENABLE);                      //使能TIMx在ARR上的预装载寄存器?

        TIM_Cmd(TIM1,ENABLE);                               //打开TIM2?

//下面这句是高级定时器才有的,输出pwm必须打开?

        TIM_CtrlPWMOutputs(TIM1,ENABLE);                        //pwm输出使能,一定要记得打开

}


关键字:stm32  定时器1  互补PWM 引用地址:stm32定时器1的2路互补PWM

上一篇:STM32F103输出多路死区互补PWM波
下一篇:STM32互补PWM输出使能控制

推荐阅读最新更新时间:2024-03-16 16:07

stm32问题:关于BOOT0和BOOT1
BOOT0和BOOT1 STM32三种启动模式对应的存储介质均是芯片内置的,它们是: 1)用户闪存 = 芯片内置的Flash。 2)SRAM = 芯片内置的RAM区,就是内存啦。 3)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区 域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。 在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执 行程序,见下表: BOOT1=x BOOT0=0 从用户闪存启动,这是正常的工作模式。 BOOT1=0 BOOT0=1
[单片机]
STM32 SPI笔记(基于寄存器)
1.说在前面:最近尝试操作VS1053音频模块 使用的数据传输方法使用SPI协议,打算学一下SPI的配置方式 2.SPI 2-1:SPI(Secial Periperal interface),作为四线的通信接口,有着MISO MOSI SCLK和CS MISO:主进从出 MOSI:主出从进 SCLK: 时间信号 CS:片选信号 2-2:CPHA和CPOL CPHA为时钟相位,可以配置为1/0,控制数据的采样方式,设置为0的时候,控制在时钟周期的第一个跳变沿进行数据采集,设置为1的时候在第二个跳变沿进行采集 CPOL为时钟极性,可以配置为1/0,控制空闲状态的时钟极性,设置为0的时候空闲状态为低
[单片机]
<font color='red'>STM32</font> SPI笔记(基于寄存器)
STM32学习笔记(一)GPIO
GPIO的使用: 一共四组IO口16*3+3:ABCD 库函数 necessity: 1.RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE)使能时钟 2.系统初始化(GPIO_Init) IN: GPIO_InitStruct:模式,引脚,GPIO的最大输出速率, GPIOA(用于参照指示寄存器地址的指针) OUT: CRH/CRL GPIO_InitTypeDef *GPIO_InitStruct; GPIO_InitStruct- GPIO_Mode= GPIO_Mode_Out_PP; GPIO_InitStruct- GPIO_Pin=GPIO_Pin_15
[单片机]
STM32学习笔记之十七——雄关漫道真如铁,如今迈步从头越
一、前言 放下半年,继续STM32的学习。新的学习新起点,决心升级。单片机不换, 调试环境整体升级。包括以下几个方面: 1、调试器换JlinkV7,相比STlink在IAR环境下不用装驱动。虽说V8已经 面世但是针对我的应用V7已经足够。况且手里这个还是带串口的,用起来很方 便。 2、接口换用SWD,四线调试,节省接插件面积为以后电路板的小型化做好准 备。 3、开发板换豆皮,功能比较全面,有MP3和液晶屏幕的扩展板,价格便宜。 4、调试环境换IAR5.3,大势所趋,没办法新的3.0库已经不再支持IAR4 了。 5、固件库换3.0,经过半年发展应该比较完善了,全新的架构。 有了这些更新,等于
[单片机]
stm32的多通道ADC和DMA的设置问题
最近在倒腾LD驱动的时候遇到不少问题,下面就一一的记录一下啦,不然五百年以后谁还记得谁是吧。 一、多通道ADC和DMA的配置问题: 刚开始不知道怎么去配置,到处找资料发现很多不是很适用。很盲目的找了很久的资料,后来发现官方的固件库里面有很详细的资料。稍微改了一下官方的demo一下就编译成功了。这个例子的启示是:别忙着去网上找现成的例子,启示固件库里面的例程很给力了。 程序需求是开通三个ADC通道分别采集3V 的基准电压、控制反馈温度和环境温度。 因为用示波器测试时发现TED控制PWM的开关的高频噪声耦合到控制地中来了,所以会有一些高频尖刺。我的解决办法是每组数据通过DMA采集100个点,除去最大的10个数和最小的10数然后
[单片机]
STM32 基础系列教程 21 - NVIC
前言 学习stm32 NVIC接口编程,学会使用常用的NVIC接口函数,优改中关优先级,开/关单个中断,开/关所有中断,开/关所有中断和异常,系统软件重启等功能。 示例详解 基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。 本示例所用的最小系统板原理图: 从本节开始,关于CUBEMX工具及KEIL工具的操作将不再细讲,如果还有不熟悉的可以查看之前的教程文档。下面直接介绍工程配置: 系统时钟树 NVIC器配置 开启exit-0外部中断和串口1中断, 串口1的配置
[单片机]
<font color='red'>STM32</font> 基础系列教程 21 - NVIC
stm32 汇编点灯程序
;RCC寄存器地址映像 RCC_BASE EQU 0x40021000 RCC_CR EQU (RCC_BASE + 0x00) RCC_CFGR EQU (RCC_BASE + 0x04) RCC_CIR EQU (RCC_BASE + 0x08) RCC_APB2RSTR EQU (RCC_BASE + 0x0C) RCC_APB1RSTR EQU (RCC_BASE + 0x10) RCC_AHBENR EQU (RCC_BASE + 0x14) RCC_APB2ENR EQU (RCC_BASE + 0x18) RCC_AP
[单片机]
stm32实际运用中遇到的问题
1.不要太相信stm32内部的IO上下拉,必要的话,在外部接上下拉电阻。 2.当把JTAG的IO口当成普通IO口来使用时,要先禁止JTAG。 即:要使用到PB3、PB4、PA13、PA14、PA15时,要先禁止JTAG。 在库函数中,调用一下函数: GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//关闭jtag,保留swd 在寄存器编程中,用: //JTAG模式设置,用于设置JTAG的模式 //mode:jtag,swd模式设置;00,全使能;01,使能SWD;10,全关闭; //#define JTAG_SWD_DISABLE 0X02 //#def
[单片机]
<font color='red'>stm32</font>实际运用中遇到的问题
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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