×
单片机 > 单片机程序设计 > 详情

STM32一个定时器同时捕获4路PWM波

发布时间:2020-05-19 发布时间:
|

问题的提出:

最近需要用航模遥控器控制遥控车,32单片机做主控,需要用到4个通道即需要捕获4路PWM波。如果用四个定时器来捕获四路PWM波,就太浪费资源了。由于STM32单片机的定时器资源有限,故设想用一个定时器的4个通道同时捕获四路PWM波。

设计思路:

由于接收机输出的PWM波高电平最多就2ms,故可以让4个通道轮流使用定时器捕获PWM波

程序如下:

include "PWMin.h" 
void TIM2_2PWMin_Init(u16 arr,u16 psc) 

RCC->APB1ENR|=1<<0; 
RCC->APB2ENR|=1<<2; 
GPIOA->CRL&=0XFFFF0000; 
GPIOA->CRL|=0X00008888; 
TIM2->ARR=arr; 
TIM2->PSC=psc; 
TIM2->CCMR1=0X0101; 
TIM2->CCMR2=0X0101; 
TIM2->CCER|=0X0001; 
TIM2->DIER|=0X001f; 
TIM2->CR1|=0x01; 
MY_NVIC_Init(2,0,TIM2_IRQn,2); 

u16 pwm1=1,pwm2=2,pwm3=2,pwm4=3; 
u8 t1=0,t2=0,t3=0,t4=0; 
u8 f=1; 
void TIM2_IRQHandler(void) 

u16 TSR; 
TSR=TIM2->SR; 
if(TSR&(1<<1)) 

if(t1==0) 

t1=1; 
TIM2->CCER|=1<<1; 
TIM2->CNT=0; 

else 

t1=0; 
pwm1=TIM2->CCR1; 
TIM2->CCER&=~(3<<0); 
f=2; 


else if(TSR&(1<<2)) 

if(t2==0) 

t2=1; 
TIM2->CCER|=1<<5; 
TIM2->CNT=0; 

else 

t2=0; 
pwm2=TIM2->CCR2; 
TIM2->CCER&=~(3<<4); 
f=3; 


else if(TSR&(1<<3)) 

if(t3==0) 

t3=1; 
TIM2->CCER|=1<<9; 
TIM2->CNT=0; 

else 

t3=0; 
pwm3=TIM2->CCR3; 
TIM2->CCER&=~(3<<8); 
f=4; 


else if(TSR&(1<<4)) 

if(t4==0) 

t4=1; 
TIM2->CCER|=1<<13; 
TIM2->CNT=0; 

else 

t4=0; 
pwm4=TIM2->CCR4; 
TIM2->CCER&=~(3<<12); 
f=1; 


else if(TSR&(1<<0)) 

TIM2->CCER&=~(1pwm1=0xffff; 
else if(f==2) 
pwm2=0xffff; 
else if(f==3) 
pwm3=0xffff; 
else if(f==4) 
pwm4=0xffff; 
f++; 

TIM2->CCER|=1CNT=0; 
TIM2->SR=0; 


关键字:STM32  定时器  捕获  PWM波 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析