pwm学习内容

STM32 的pwm输出极性问题:

在这里插入图片描述在这里插入图片描述

如果是PWM1模式 :

如果设置
TIM_OCPolarity_High
TIMx_CNT<TIMx_CCR=输出为高电平
TIMx_CNT>TIMx_CCR=输出为低电平
在这里插入图片描述

如果设置
TIM_OCPolarity_Low
TIMx_CNT<TIMx_CCR输出就为低电平
TIMx_CNT>TIMx_CCR输出就为高电平
在这里插入图片描述

如果是PWM2模式 :

如果设置TIM_OCPolarity_Low
TIMx_CNT>TIMx_CCR输出就为低电平
TIMx_CNT<TIMx_CCR输出就为高电平

在这里插入图片描述
如果设置TIM_OCPolarity_High
TIMx_CNT>TIMx_CCR输出为高电平
TIMx_CNT<TIMx_CCR输出为低电平

在这里插入图片描述

pwm原理

(这方面知识个人觉得直接上图配合文字更好理解)
在这里插入图片描述

pwm配置

  1. 端口重映射(原因:TIM3_CH2默认接在PA7,DS0接在PB5上)
  • 利用飞线把PA7和PB5接起来
  • 重映射 AFIO_MAPR寄存器
    在这里插入图片描述
    在这里插入图片描述
		RCC->APB2ENR|=1;  //AFIO时钟
		AFIO->MAPR|=2<<10;      //重映射
  • 捕获/比较使能寄存器(TIMx_CCER)
    在这里插入图片描述
  • 捕获/比较模式寄存器 1(TIMx_CCMR1)在这里插入图片描述
void   tim_pwm_init(u16 arr,u16 Psc)
{
//	TIM_OCInitTypeDef  TIM_OCInitTypeSTR;
		RCC->APB2ENR|=1;  //AFIO时钟
		RCC->APB2ENR|=1<<3;//  B时钟
		RCC->APB1ENR|=1<<1;    // 定时器4
	
	GPIOB->CRH&=0XFFFFFFF0;      
	GPIOB->CRH|=0X0000000B;      //GPIO模式
 
	//AFIO->MAPR|=2<<10;      //重映射
	   //GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE );
	
	TIM4->ARR=arr;        //自动重装载寄存器
	TIM4->PSC=Psc;      // 预分频器
	TIM4->DIER|=1;         //允许更新中断
	TIM4->CR1|=0X01;      //使能计数器
	
	TIM4->CCMR2|=7<<4;      //模式 2    cnt大于ccr2输出有效电频
	TIM4->CCMR2|=1<<3;        //:输出比较3预装载使能 
	TIM4->CCER|=1<<4;  
  TIM4->CCER|=1<<5;      //有效电频输出低
	TIM4->CR1|=~(1<<7);     //:TIMx_ARR寄存器被装入缓冲器。
	/*
	TIM_OCInitTypeSTR.TIM_OCMode=TIM_OCMode_PWM2;
	TIM_OCInitTypeSTR.TIM_OCNPolarity=TIM_OCPolarity_High;
	TIM_OCInitTypeSTR.TIM_OutputState=  TIM_OutputState_Enable; 
	TIM_OC2Init(TIM3,&TIM_OCInitTypeSTR);
	
	TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
	
		TIM_Cmd(TIM3,ENABLE);*/
	
}

int main()
{				  
	
	u16 a=0;
	u8  b=1;
	
 NVIC_PriorityGroupConfig( NVIC_PriorityGroup_2);

	  delay_init();  	//延时初始化
    led_init();	  	//初始化与LED连接的硬件接口
  //tim_init(4999,7199);
	  tim_pwm_init(899,0); 
	while(1)
	{	
		delay_ms(10);
		if(b==1)a++;
		else a--;
		
		if(a>300)b=0;
		if(a==0)b=1;
	TIM3->CCR2 =a;      //比较值  预装在值
	}	 
}
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐