STM32F4高级定时器产生六路互补PWM波

发布者:平静的33号最新更新时间:2018-06-28 来源: eefocus关键字:STM32F4  高级定时器  互补PWM波 手机看文章 扫描二维码
随时随地手机看文章

一、使用高级定时器TIM8;


二、使用引脚:CH1-PC6,  CH1N-PA5,  CH2-PC7, CH2N-PB0,CH3-PC8,CH3N-PB1;


三、使用的寄存器:TIMx_CCMRx:选择PWM模式


                               TIMx_ARR:PWM的周期


                               TIMx_CCRx:PWM占空比


四、结构体:GPIO_InitTypeDef :GPIO口复用


                     GPIO_Init();


                     TIM_TimeBaseInitTypeDef :基本定时结构


                     TIM_TimeBaseInit();


                     TIM_OCInitTypeDef :输出比较结构


                     TIM_OCxInit();


                     TIM_BDTRInitTypeDef :刹车和死区结构


                     TIM_BDTRConfig();


五、配置函数


//使能定时器时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8,ENABLE);

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC,ENABLE);

//GPIO配置:使能GPIO口并复用

       GPIO_InitStrcuture.GPIO_Pin = GPIO_Pin_5;

       GPIO_InitStrcuture.GPIO_Mode = GPIO_Mode_AF;       

       GPIO_InitStrcuture.GPIO_Speed = GPIO_Speed_100MHz;      

       GPIO_InitStrcuture.GPIO_OType = GPIO_OType_PP;     

       GPIO_InitStrcuture.GPIO_PuPd = GPIO_PuPd_UP;       

       GPIO_Init(GPIOA,&GPIO_InitStrcuture); 

   

       GPIO_InitStrcuture.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;

       GPIO_Init(GPIOB,&GPIO_InitStrcuture);

      

       GPIO_InitStrcuture.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;  

       GPIO_Init(GPIOC,&GPIO_InitStrcuture);

      

       GPIO_PinAFConfig(GPIOA,GPIO_PinSource5,GPIO_AF_TIM8);    

       GPIO_PinAFConfig(GPIOB,GPIO_PinSource0,GPIO_AF_TIM8);

       GPIO_PinAFConfig(GPIOB,GPIO_PinSource1,GPIO_AF_TIM8);

       GPIO_PinAFConfig(GPIOC,GPIO_PinSource7,GPIO_AF_TIM8);

       GPIO_PinAFConfig(GPIOC,GPIO_PinSource8,GPIO_AF_TIM8);

       GPIO_PinAFConfig(GPIOC,GPIO_PinSource6,GPIO_AF_TIM8);

//TIM8配置

       TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; //时钟分割    

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

       TIM_TimeBaseInitStructure.TIM_Period=arr; //自动重装载寄存器周期的值

       TIM_TimeBaseInitStructure.TIM_Prescaler=psc; //预分频值

       TIM_TimeBaseInitStructure.TIM_RepetitionCounter=1; //周期计数器值 

       TIM_TimeBaseInit(TIM8,&TIM_TimeBaseInitStructure);  

//PWM配置

       TIM_OCInitStruct.TIM_OCIdleState=TIM_OCIdleState_Reset;//当MOE=0重置输出比较空闲状态

       TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1; //脉冲宽度调制模式1     

       TIM_OCInitStruct.TIM_OCNIdleState=TIM_OCNIdleState_Reset;//当MOE=0重置输出比较N空闲状态

       TIM_OCInitStruct.TIM_OCNPolarity=TIM_OCNPolarity_High;// //互补输出比较极性高

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

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

       TIM_OCInitStruct.TIM_OutputNState=TIM_OutputNState_Enable;//使能互补输出比较状态

       TIM_OCInitStruct.TIM_Pulse=4000;//待装入捕获比较寄存器的脉冲值

       TIM_OC1Init(TIM8,&TIM_OCInitStruct);

       TIM_OC2Init(TIM8,&TIM_OCInitStruct);

       TIM_OC3Init(TIM8,&TIM_OCInitStruct);//根据TIM8_OCInitStruct中指定的参数初始化 TIM8通道x

//使能端的打开

       TIM_OC1PreloadConfig(TIM8,TIM_OCPreload_Enable);  

       TIM_OC2PreloadConfig(TIM8,TIM_OCPreload_Enable);

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

//刹车死区配置

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

       TIM_BDTRStructure.TIM_Break=TIM_Break_Disable;//失能刹车输入

       TIM_BDTRStructure.TIM_BreakPolarity=TIM_BreakPolarity_High; //刹车输入管脚极性高 

       TIM_BDTRStructure.TIM_DeadTime=100; //输出打开和关闭状态之间的延时      

       TIM_BDTRStructure.TIM_LOCKLevel=TIM_LOCKLevel_OFF;// 锁电平参数: 不锁任何位

       TIM_BDTRStructure.TIM_OSSIState=TIM_OSSIState_Disable; //设置在运行模式下非工作状态选项

       TIM_BDTRStructure.TIM_OSSRState=TIM_OSSRState_Disable; //设置在运行模式下非工作状态选项

       TIM_BDTRConfig(TIM8,&TIM_BDTRStructure);

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

TIM_CtrlPWMOutputs(TIM8,ENABLE);   //PWM使能输出

TIM_Cmd(TIM8,ENABLE);              //打开TIM8


关键字:STM32F4  高级定时器  互补PWM波 引用地址:STM32F4高级定时器产生六路互补PWM波

上一篇:STM32一个定时器同时捕获4路PWM波
下一篇:STM32F407 之 高级定时器介绍

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

STM32F407学习笔记——Systick中断
#include GPIO_TypeDef* io_led=GPIOC; const u16 pin_led=GPIO_Pin_1; static __IO uint32_t TimingDelay; void Led_Init() { GPIO_InitTypeDef GPIO_init_l; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); GPIO_init_l.GPIO_Pin=GPIO_Pin_1; GPIO_init_l.GPIO_Mode=GPIO_Mode_OUT; GPIO_init_l.GPIO_OType=GPIO_OTyp
[单片机]
STM32F4的库函数分析如何实现点亮一个LED(代码启动)(二)
这部分的启动代码,主要是将堆栈进行初始化,中断向量表以及中断函数进行定义。 这里将启动文件拆分出来进行理解。 Stack_Size EQU 0x00000400 AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE Stack_Size __initial_sp 这里将申请一段栈空间,AREA意思为申请的空间名为STACK,不对其进行初始化,可读可写,以三字节进行偏移,栈大小为 0x400 ; h Heap Configuration ; o Heap Size (in Bytes) 0x0-0xFFFFFFFF:8 ;
[单片机]
从<font color='red'>STM32F4</font>的库函数分析如何实现点亮一个LED(代码启动)(二)
[STM32]STM32F407系列教程之二,gpio输入输出实验
一、实验准备 1.模板demo 原因呢,我在第一讲中已经说过,费尽千辛万苦搭建了一个模板,流过多少泪、费劲多少事,只有亲自搭建过的才会体会到(第一讲我只是讲了组成,后续有机会,我将带大家亲手搭建一个),搭建完成后,备份压缩(玩过Linux的大概有点感触,配置了一个新环境,就得做个镜像,哪天系统崩了,就可以重装系统,这里也是一样的)。 2.板级支持包 就是在我的工程文件中,所有以”Bsp_”开头的文件,位于BSP文件夹下: BSP文件夹下有两个文件夹:BINC、BSRC。一个存放h文件,一个存放c文件,是可以放到一个文件中,我只是为分类能够明显点。 PS:关于这种分类,我在其他文件夹中也有类似的设计,有兴趣可自行查找
[单片机]
[STM32]<font color='red'>STM32F4</font>07系列教程之二,gpio输入输出实验
STM32F4如何设置系统时钟
STM32F4系统时钟树 STM32F4的系统时钟非常重要,涉及到整个系统的运行结果,无论是什么操作,都需要时钟信号,不同型号的微控制器的默认系统时钟配置是不同的,这里,给出两种配置STM32F407系统时钟的方法。 方法一,采用官方库提供的配置(这里外部晶振8MHz,系统配置为168MHz) STM32F4启动与STM32F10X不同,时钟已经默认配置好 启动代码,文件:startup_stm32f4xx.s Reset_Handler PROC EXPORT Reset_Handler IMPORT SystemInit IMPORT __ma
[单片机]
<font color='red'>STM32F4</font>如何设置系统时钟
stm32F407的按键FIFO应用
参考并理解安富莱的代码,能有按下,弹起和长按,并且长按可以连发,在程序里修改就可以 单片机源程序如下: /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include main.h #include usart.h #include gpio.h /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN In
[单片机]
STM32F429的LTDC和DMA2D
STM32F429与之前的系列强大之处就在于增加了LTDC个功能,从手册上看STM32F429的LTDC可以用于驱动1024x768分辨率的LCD屏幕。 LTDC其实就是TFT LCD控制器的意思,在arm9/arm11/cortex-A系列CPU当中,这个是必须有的外设,在小型单片机中,有这个功能的不多。 LCD控制器的功能就是生成LCD像素时钟,将GRAM中的数据搬运到LCD屏幕上去显示。 在一般的小型LCD模块一般都集成了一个LCD控制器,如常用的ili9320/ili9325等型号,这些LCD模块同时还集成了几百KB大小的RAM,用于显示; 这种方案,不需要占用单片机的RAM就可以稳定地驱动LCD显示图像,一般
[单片机]
stm32f103系列与stm32f407系列的区别
1、首先是启动文件上存在区别,107的启动文件当中在进入主函数之前并没有时钟的初始化,但是407在main之前就有SystemInit() 103如下: Reset_Handler PROC EXPORT Reset_Handler IMPORT __main LDR R0, =__main BX R0 ENDP 407如下: Reset_Handler PROC EXPORT Reset_Handler IMPORT SystemInit IMPORT __main
[单片机]
stm32f407 定时器 用的APB1 APB2 及 定时器频率
上午想要用Timer10做相对精确的延时功能,但是用示波器发现实际延时数值总是只有一半,百思不得其解。 仔细查阅各处资料结合实际研究后对stm32f407的14个定时器的时钟做一个总结: 下面来源: http://www.openedv.com/thread-68387-1-2.html 从时钟树中我们可以得知(时钟树的图片可以直接参考6楼,感谢6楼xkwy补上的图): (1)高级定时器timer1, timer8以及通用定时器timer9, timer10, timer11的时钟来源是APB2总线 (2)通用定时器timer2~timer5,通用定时器timer12~timer14以及基本定时器timer6,timer7的时
[单片机]
<font color='red'>stm32f4</font>07 <font color='red'>定时器</font> 用的APB1 APB2 及 <font color='red'>定时器</font>频率
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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