STM32重映射和PWM控制


由於玩STM32的時候很少用它的重映射功能,所以做項目的時候需要PWM控制光強,用的是PB5控制。看了下手冊,這不是定時器的PWM通道管腳啊,后來在硬件的提醒下才想起來STM32管腳可以重映射,都忘了這茬了。唉!真是太菜。

在這里插入圖片描述
TIM3_CH2實際的引腳是PA7,可以通過部分重映射到PB5,這樣就可以通過PB5輸出PWM信號。

初始化代碼:

void LED_GPIO_Init(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	 
	GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);	    //重映射PA7為PB5
	
	GPIO_InitStructure.GPIO_Pin   =  GPIO_Pin_5;
	GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP; 		
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);	
}

void LED_PWM_Init(uint16_t arr,uint32_t ck_cnt,uint16_t CCR2_Val)
{
	uint16_t	PrescalerValue;
	
//	GPIO_InitTypeDef 		    GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef 	TIM_TimeBaseStructure;
	TIM_OCInitTypeDef 			  TIM_OCInitStructure;

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);	
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);  //復用功能模塊時鍾   

	LED_GPIO_Init();	
   /* Time base configuration */
	PrescalerValue                            = (uint16_t) (SystemCoreClock / ck_cnt) - 1;		 //計算分頻值
	TIM_TimeBaseStructure.TIM_Period          = arr; 				             //自動重裝載寄存器的值
	TIM_TimeBaseStructure.TIM_Prescaler       = PrescalerValue; 	       //設置用來作為TIMx時鍾頻率除數的預分頻值 
	TIM_TimeBaseStructure.TIM_ClockDivision   = 0; 			                 //與數字濾波器(ETR,TIx)使用的采樣頻率之間的分頻比例
	TIM_TimeBaseStructure.TIM_CounterMode     = TIM_CounterMode_Up;      //TIM向上計數模式
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 		                  //根據TIM_TimeBaseInitStruct中指定的參數初始化TIMx的時間基數單位

	TIM_OCInitStructure.TIM_OCMode           = TIM_OCMode_PWM1;
	TIM_OCInitStructure.TIM_OutputState      = TIM_OutputState_Enable;     //輸出比較使能
	TIM_OCInitStructure.TIM_Pulse            = CCR2_Val;
	TIM_OCInitStructure.TIM_OCPolarity       = TIM_OCPolarity_High;

	TIM_OC2Init(TIM3,&TIM_OCInitStructure);    //初始化TIM3_CH2
	TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);   //使能TIM3_CH2重裝載
//	TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);

//	TIM_ARRPreloadConfig(TIM3, ENABLE);

	TIM_Cmd(TIM3, ENABLE);
}

注意事項:

初始化的管腳還是原來的PB5,而不是定時器PWM通道真正的未重映射前的管腳


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM