STM32笔记-PWM

通用定时器输出PWM:

void TIM3_PWM(u16 arr,u16 psc)
{
	RCC->APB1ENR|=1<<1;
	RCC->APB2ENR|=1<<3;
	
	RCC->APB2ENR|=1<<4;
	GPIOC->CRL&=0X00FFFFFF;
	GPIOC->CRH&=0XFFFFFF00;
	GPIOC->CRL|=0XBB000000;
	GPIOC->CRH|=0X000000BB;
	
	RCC->APB2ENR|=1<<0;    //AFIO ʱÖÓʹÄÜ
	AFIO->MAPR=3<<10;      //ÍêÈ«ÖØÓ³Éä
	/*
	 ¿ªÆôTIM3CH1,CH2£¬CH3£¬CH4ËÄͨµÀPWMÊä³ö
	*/
	TIM3->CCMR1|=7<<4;     
	TIM3->CCMR1|=1<<3;
	TIM3->CCER|=1<<0;
	
	TIM3->CCMR1|=7<<12;
	TIM3->CCMR1|=1<<11;
	TIM3->CCER|=1<<4;
	
	TIM3->CCMR2|=7<<4;
	TIM3->CCMR1|=1<<3;
	TIM3->CCER|=1<<8;
	
	TIM3->CCMR2|=7<<12;
	TIM3->CCMR2|=1<<11;
	TIM3->CCER|=1<<12;
	
	TIM3->ARR=arr;                     //×°Èë³õÖµÊý
	TIM3->PSC=psc;                     //ÉèÖÃÔ¤·ÖƵÊý
	/*
	TIMx_CR1µÚËÄλ¿ØÖƼ¼¼ÆÊý·½Ïò£º0ÏòÉϼÆÊý 1ÏòϼÆÊý
	*/
        TIM3->CR1=0X0080;
	TIM3->CR1|=0X01;
	
	

}

定时器可通过TIMx_CR1的DIR位控制加计数或减计数(0加1减)

 

两种方式介绍如下(P326)

向上计数:

 

           如预分频寄存器(TIMx_PSC)为2,自动重装载寄存器(TIMx_CR1)为36,则向上计数时序图如下所示:

向下计数:

  如预分频寄存器(TIMx_PSC)为2,自动重装载寄存器(TIMx_CR1)为36,则向下计数时序图如下所示:

 

 以上函数通过设置AFIO_REMAP寄存器将TIM3的四通道CH1,CH2,CH3,CH4重映射到PC6,PC7,PC8,PC9,并将这四个IO口设置为复用开漏输出,当然,还要使能TIM3,AFIO,GPIOC的时钟,之后,在主函数里调用这个函数并给TIM3->CCRx赋值即可得到四路PWM

TIM3_PWM(899,0);
TIM3->CCR1 = pwmval1;
TIM3->CCR2 = pwmval2;
TIM3->CCR3 = pwmval3;
TIM3->CCR4 = 90;

 如以上语句就得到了频率80K,四路独立占空比的PWM,其中CH4(PC9)duty为90% 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值