stm32f407多个定时器产生PWM(TIM1、TIM4、TIM9)

发布者:本人在最新更新时间:2018-09-16 来源: eefocus关键字:stm32f407多  定时器  PWM 手机看文章 扫描二维码
随时随地手机看文章

#include "pwm.h"

u16 Right_Forward = 100;  
 
// PB7    TIM4_CH2

void TIM42_PWM_Init(u32 arr,u32 psc , u32 CCR2_Val )
{  

GPIO_InitTypeDef GPIO_InitStructure;   
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;  
TIM_OCInitTypeDef  TIM_OCInitStructure;     


RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); 

GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_TIM4); //GPIOB7

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 ;   //GPIOB7 
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;   
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;       
GPIO_Init(GPIOB,&GPIO_InitStructure);              //PB7,PB6



RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);  


TIM_TimeBaseStructure.TIM_Prescaler=psc; 
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; 
TIM_TimeBaseStructure.TIM_Period=arr;  
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; 
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);


TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; 
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;



TIM_OCInitStructure.TIM_Pulse = CCR2_Val;// channel 2
TIM_OC2Init(TIM4, &TIM_OCInitStructure); 
TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable); 



  TIM_ARRPreloadConfig(TIM4,ENABLE);//ARPEʹÄÜ 

TIM_Cmd(TIM4, ENABLE);  //ʹÄÜTIM4
   
}  


void TIM41_PWM_Init(u32 arr,u32 psc , u32 CCR1_Val )
{  

GPIO_InitTypeDef GPIO_InitStructure;   
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;  
TIM_OCInitTypeDef  TIM_OCInitStructure;    


RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); 

GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_TIM4); 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 ;   
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;     
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;     
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;       
GPIO_Init(GPIOB,&GPIO_InitStructure);              


RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);  


TIM_TimeBaseStructure.TIM_Prescaler=psc;  
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; 
TIM_TimeBaseStructure.TIM_Period=arr;  
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; 
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);

  
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; 
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; 



TIM_OCInitStructure.TIM_Pulse = CCR1_Val;
TIM_OC1Init(TIM4, &TIM_OCInitStructure);  
TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); 



  TIM_ARRPreloadConfig(TIM4,ENABLE);

TIM_Cmd(TIM4, ENABLE);  
   
}  


void TIM11_PWM_Init(u32 arr,u32 psc , u32 CCR1_Val )
{  

GPIO_InitTypeDef GPIO_InitStructure;   
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;  
TIM_OCInitTypeDef  TIM_OCInitStructure;     



RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);  


GPIO_PinAFConfig(GPIOA,GPIO_PinSource8,GPIO_AF_TIM1); 


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ;   
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;     
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;       
GPIO_Init(GPIOA,&GPIO_InitStructure);              




TIM_TimeBaseStructure.TIM_Prescaler=psc;  
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; 
TIM_TimeBaseStructure.TIM_Period=arr;   
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; 
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);


TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; 
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; 


TIM_OCInitStructure.TIM_Pulse = CCR1_Val;// channel 1
TIM_OC1Init(TIM1, &TIM_OCInitStructure);  
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); 
 
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;


  TIM_ARRPreloadConfig(TIM1,ENABLE);

TIM_Cmd(TIM1, ENABLE);  //ʹÄÜTIM4
  TIM_CtrlPWMOutputs(TIM1, ENABLE);
}  


void TIM92_PWM_Init(u32 arr,u32 psc , u32 CCR2_Val )
{  

GPIO_InitTypeDef GPIO_InitStructure;   
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;  
TIM_OCInitTypeDef  TIM_OCInitStructure;    


RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM9,ENABLE);  

GPIO_PinAFConfig(GPIOE,GPIO_PinSource6,GPIO_AF_TIM9); 

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 ;   
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;    
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;        
GPIO_Init(GPIOE,&GPIO_InitStructure);             

 


TIM_TimeBaseStructure.TIM_Prescaler=psc;  
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; 
TIM_TimeBaseStructure.TIM_Period=arr;  
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; 
TIM_TimeBaseInit(TIM9,&TIM_TimeBaseStructure);


TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; 
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;



TIM_OCInitStructure.TIM_Pulse = CCR2_Val;
TIM_OC2Init(TIM9, &TIM_OCInitStructure); 
TIM_OC2PreloadConfig(TIM9, TIM_OCPreload_Enable);  


  TIM_ARRPreloadConfig(TIM9,ENABLE);//ARPEʹÄÜ 

TIM_Cmd(TIM9, ENABLE);  //ʹÄÜTIM4
   
}  

关键字:stm32f407多  定时器  PWM 引用地址:stm32f407多个定时器产生PWM(TIM1、TIM4、TIM9)

上一篇:STM3的TIM4定时器功能设置
下一篇:stm32中编码器模式读出“负数”的问题

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

51片内定时器的应用
利用定时/计数器T1产生定时时钟,由P1口 控制8个发光二极管,使8个指示灯依次一个 一个闪动,闪动频率为10次/秒(8个灯依次 亮一遍为一个周期),循环. 晶振:12MHz stone 2009 04 10 **********************************/ #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int #define led P0 uint temp,t=0; void main() { EA=1; ET1=1; TMOD=0x10; TH1=-50000/256;
[单片机]
STM32学习笔记6(TIM模块定时器
TIM模块定时器向上溢出 & 输出比较 首先我们必须肯定ST公司的实力,也承认STM32的确是一款非常不错的Cortex-M3核单片机,但是,他的手册实在是让人觉得无法理解,尤其是其中的TIM模块,没有条理可言,看了两天几乎还是不知所云,让人很是郁闷。同时配套的固件库的说明也很难和手册上的寄存器对应起来,研究起来非常费劲!功能强大倒是真的,但至少也应该配套一个让人看的明白的说明吧~~两天时间研究了STM32定时器的最最基础的部分,把定时器最基础的两个功能实现了,余下的功能有待继续学习。首先有一点需要注意:FWLib固件库目前的最新版应该是V2.0.x,V1.0.x版本固件库中,TIM1模块被独立出来,调用的函数与其他定时器不同;在V
[单片机]
基于PWM的新型误差放大器的设计
设计了一款高增益、宽带宽、输出摆幅可控制的新型误差放大器。通过新增A2 、A3 两个比较器器模块,误差放大器的输出摆幅可以随着控制端输入电压Vr 的不同进行调整,增加了电路应用的灵活性。经过CHMC SB45 工艺验证,所设计的误差放大器输出低电平为V r ,高电平为V r + 2 v ,开环增益为80 dB ,单位增益带宽为11. 9 MHz。该误差放大器已经应用到了PWM 芯片中,使得PWM 最大、最小占空比可调,大幅提升了芯片系统的整体性能。
[模拟电子]
基于<font color='red'>PWM</font>的新型误差放大器的设计
MSP432库函数输出多路任意占空比PWM
本文适用于msp432库函数开发使用者,且已具备msp432环境(我使用的是keil),已下载SDK包,并有simeplink例程。若需要这些资源的,可以在评论区回复,我看见了会及时发送的! 今天要分享的是使用msp432库函数输出多路pwm,用以控制基础的电机转动。 1)所用到的引脚 P7.4~P7.7 、P2.4~P2.7共八路提供选择 2)查看数据手册 由手册可以知道,定时器TA0,寄存器CCR0~CCR4对应P2.4 - P2.7 定时器TA1,寄存器CCR0~CCR4对应P7.4 - P7.7 3)输出PWM初始化 /* Timer_A Compare Configuration Parameter
[单片机]
MSP432库函数输出多路任意占空比<font color='red'>PWM</font>波
PORT.H头文件下载-AVR定时器通用IO端口定义
/***************************************************************************** 文件名称:PORT.H 文件标识:_PORT_H_ 摘 要:AVR定时器通用IO端口定义 *****************************************************************************/ #ifndef _PORT_H_ #define _PORT_H_ #define P(X,Y) (BYPORT(X)*256+BYBIT(Y)) //合并引脚信息 #defin
[单片机]
stm32f103基本定时器定时器中断服务程序里面输出脉冲波形
main.c /**定时器中断TIM3方式,(当基本定时器不用PWM输出) 设计两路输出两路脉冲波: 周期:100us,占空比80% 周期:100us,占空比20%**/ int main(void) { LED_Init();//pc14引脚初始化 BEEP_Init();/pc13引脚初始化 TIME_Init();//定时器初始化 while(1); } time.c #include stm32f10x.h #include time.h #include delay.h #include beep.h #include stdio.h void TIME_Init(void) {
[单片机]
stm32f103基本<font color='red'>定时器</font>,<font color='red'>定时器</font>中断服务程序里面输出脉冲波形
PWM与ADC实验——自定义精度的DAC输出实验
PWM为什么可以作DAC来使用? 虽然大容量的 STM32F103 具有内部 DAC,但是更多的型号是没有 DAC 的,不过 STM32 所有的芯片都有 PWM 输出,因此,我们可以用 PWM+简单的 RC 滤波来实现 DAC 输出, 从而节省成本。 PWM 本质上其实就是是一种周期一定,而高低电平占空比可调的方波。实际电路的典 型 PWM 波形,如图 26.1.1 所示: 图 26.1.1 的 PWM 波形可以用分段函数表示为式①: 其中:T 是单片机中计数脉冲的基本周期,也就是 STM32 定时器的计数频率的倒数。 N 是 PWM 波一个周期的计数脉冲个数,也就是 STM32 的 ARR-1 的值
[单片机]
<font color='red'>PWM</font>与ADC实验——自定义精度的DAC输出实验
一种基于PWM的CMOS数据接口电路设计
给出了一个基于0.25 m标准CMOS工艺的高速数据 接口 电路 。采用PWM(脉宽调制)技术和PLL(锁相环路)结构,降低了CRC(时钟恢复 电路 )的复杂程度。系统数据传输速达到400Mbps。适于 接口 数目有限,时钟恢复电路尽可能简单的电路系统。对实现片上IP核之间、乃至芯片之间的互连有参考意义。 1 引言 随着电路系统需求的扩展, 集成电路 设计与制造技术的进步,现代数字系统多工作在几百Mbps的速率上,这些高速系统常包含多个电路模块。系统中不同模块间的接口十分重要,它一般采用 总线 结构。为了获得更高的数据传输速率必须增加内部 总线 宽度,实际应用中,采用更大芯片面积和更多端口数目。这类问题也出现在板级系统中。为此
[模拟电子]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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