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

发布者:HarmoniousDream最新更新时间:2019-08-06 来源: 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平台上实现printf和scanf函数(带回显)
下一篇:stm32f103,407系列的定时器的理解与代码

推荐阅读最新更新时间:2024-11-13 08:14

第1章 初学STM32F429的准备工作
1.1 初学者重要提示 关于学习方法问题,可以看附件章节A。 学会 STM32F429相关资源的获取方法,做到心中有数,否则心里老是没底。 关于MDK和IAR两种编译器,推荐都掌握,以其中一个为主,另一个为辅。因为很多时候我们需要参考的工程代码不是自己熟悉的编译器,就会很被动。 这几年涌现出好几款非常棒的调试工具(如Event Recoder,SEGGER RTT),教程的后面章节会为大家做讲解。 1.2 开发环境说明 1、 IDE:支持两种IDE开发环境,MDK和IAR MDK推荐使用MDK5.26正式版及其以上版本。 IAR固定使用IAR8.3版本,由于IAR向下兼容性稍差,其它版本未做支持。 2
[单片机]
第1章 初学<font color='red'>STM32F4</font>29的准备工作
基于STM32F446的PWM输出程序
有人使用STM32F446做产品开发,用到TIM1的4个通道做PWM输出。具体使用是这样的,选择CHI1采样PMW模式做PMW输出。CH2、CH3、CH4采用比较切换模式结合DMA输出PWM波形,其中各通道的CCR值通过DMA基于比较事件周期性循环修改。 客户使用CubeMx做图形化配置后生成基于HAL库的工程,然后添加相关用户代码。 组织完用户代码后,不论代码顺序如何调整,发现总是最多只能启动2路使用OC切换模式结合DMA实现PWM输出的通道。 DMA缓冲区配置: uint32_t tim_CCR2_Data = {8*9, 20*9}; uint32_t tim_CCR3_Data = {10*9, 20*9};
[单片机]
基于<font color='red'>STM32F4</font>46的<font color='red'>PWM</font>输出程序
stm32f407(cortex-M4)USART串口调试程序
上文通过调试TIM1遇到了一些问题,深入了解了stm32F407的复用功能。网上流传的很多资料都是cortex-M3的,现在都M4了,观念自然得跟上,一味照搬没有自己的思考是不行的。记得我最早的调试的程序就是串口USART,刚入手嘛,就网上找了个例程,例程对IO复用是这么写的: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1, ENABLE); //打开复用时钟 GPIO_StructInit(&GPIO_InitStructure); GPIO_Init
[单片机]
STM32高级定时器、通用定时器TIMx、基本定时器TIM6和TIM7的区别
TIM1和TIM8定时器的功能包括: ● 16位向上、向下、向上/下自动装载计数器 ● 16位可编程(可以实时修改)预分频器,计数器时钟频率的分频系数为1~65535之间的任意数值 ● 多达4个独立通道: ─ 输入捕获 ─ 输出比较 ─ PWM生成(边缘或中间对齐模式) ─ 单脉冲模式输出 ● 死区时间可编程的互补输出 ● 使用外部信号控制定时器和定时器互联的同步电路 ● 允许在指定数目的计数器周期之后更新定时器寄存器的重复计数器 ● 刹车输入信号可以将定时器输出信号置于复位状态或者一个已知状态 ● 如下事件发生时产生中断/DMA: ─ 更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) ─ 触发事件(
[单片机]
STM32f4---蜂鸣器实验代码
beep.c文件下代码: #include beep.h //初始化PF8为输出口 //BEEP IO 初始化 void BEEP_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能 GPIOF时钟 //初始化蜂鸣器对应引脚 GPIOF8 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
[单片机]
STM32F4三路ADC同时采集
注意三路ADC配置为DMA传输的时候,需要修改ADC1-ADC3的地址: #define ADC1_DR_Addr ((uint32_t)0x4001204C) #define ADC2_DR_Addr ((uint32_t)0x4001214C) #define ADC3_DR_Addr ((uint32_t)0x4001224C) 必须按照以上的地址定义,否则独处的数据全部为0。
[单片机]
STM32F4xx_GPIO常用设置
1、初始化时钟:   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD | RCC_AHB1Periph_GPIOE, ENABLE); 2、输出设置:   GPIO_InitTypeDef GPIO_InitStructure;   GPIO_StructInit(&GPIO_InitStructure);   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_9;   GPIO_Init
[单片机]
大联大友尚集团推出基于ST STM32 Cortex-M4(STM32F4 or L4)的码表
大联大友尚集团推出基于ST STM32 Cortex-M4(STM32F4 or L4)的 2021年4月20日,致力于亚太地区市场的领先半导体元器件分销商---大联大控股宣布,其旗下友尚推出基于意法半导体(ST) STM32 Cortex-M4(STM32F4 or L4)的码表方案。 在单片机系统上实现图形界面,最简单是使用串口屏的方式,但是在体积有限的手持应用中,串口屏显的体积与适配性往往不能适应需求,这就需要使用GUI框架来完成图形界面。在单片机领域,TouchGFX是一种面向STM32微控制器优化的高级免费图形软件框架。 图示1-大联大友尚推出基于ST STM32 Cortex-M4(STM32F4 o
[单片机]
大联大友尚集团推出基于ST STM32 Cortex-M4(<font color='red'>STM32F4</font> or L4)的码表
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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