教你手寫PWM輸出(看完這篇你就會手動寫啦,保姆級講解)---- 2020.4.6

關於PWM輸出原理方面的文章:

嵌入式stm32 複習(工作用)— PWM輸出知識 2020.4.6
添加鏈接描述

教你手寫定時器精準延時(看完這篇你就會手動寫啦,保姆級講解)---- 2020.2.27
添加鏈接描述

先上完整PWM輸出部分代碼!!!

/**
  * @brief  PWM 初始化,是使用TIM3_CH2(映射到PB5),產生PWM實現呼吸燈效果
  * @param  arr: u16 ,自動重載值; psc:u16 ,時鐘頻率
  * @retval None
  */
void PWM_Init(u16 arr,u16 psc)
{
	//1.開啓時鐘
	//開啓AFIO時鐘
	RCC->APB2ENR|=1<<0;
	//開啓GPIO時鐘
	RCC->APB2ENR|=1<<3;
	//開啓APB1下的TIM3的時鐘
	RCC->APB1ENR|=1<<1;
	
	//2.重映射,將TIM3_CH2映射到PB5
	AFIO->MAPR|=0x02<<10;
	
	//3.設置TIM3_CH2所對應的GPIO的輸出模式
	GPIOB->CRL|=0x0B<<20;	//設置PB5,爲複用推免輸出模式,輸出頻率50MHz
	
	//4.設置TIM3
	//4.1.使能定時器
	TIM3->CR1|=1<<0;
	//4.2.設置預分頻係數,目的是設置計數的“精度”
	TIM3->PSC=psc-1;	//表示不分頻,
	//4.3.當ARPE寄存器=0,ARR寄存被寫值時,會立即更新到計數器中
	TIM3->ARR=arr-1;
	
	//5.設置與PWM功能相關的參數
	//5.1設置PWM模式
	TIM3->CCMR1|=0x07<<12;	//設置PWM模式爲PWM模式2,根據實際PWM產生效果,設置PWM2模式較好,方便佔空比計算
	//5.2設置極性
	TIM3->CCER&=~(1<<5);	//希望高電平爲有效狀態
	//5.3使能OC
	TIM3->CCER=1<<4;
	//5.4設置OCxPE
	TIM3->CCMR1|=1<<11;
	//5.5使能ARPE
	TIM3->CR1|=1<<7;

}

好!按照老樣子,接下來開始詳細講解每行代碼的用處,以及爲什麼這樣寫!

PWM初始化部分

//1.開啓時鐘
//開啓AFIO時鐘
RCC->APB2ENR|=1<<0;

//
在這裏插入圖片描述//因爲我們本次實驗的目的就是通過PWM來控制LED的亮滅,所以我們通過原理圖可以知道LED0位於PB5端口,所以我們就需要找到PB5對應的PWM輸出通道。
//
在這裏插入圖片描述//由上圖可知,PB5是可以由TIM3_CH2輸出PWM的,又因爲我們使用了複用功能,所以先開啓複用端口時鐘AFIO。
//在這裏插入圖片描述//由上圖可知,AFIO位於APB2總線下,那麼我們就可以使能APB2。
//在這裏插入圖片描述

//開啓GPIO時鐘
RCC->APB2ENR|=1<<3;

//由前面可知,LED端口爲PB5,那麼我們需要先開啓GPIOB時鐘。
//
在這裏插入圖片描述//
在這裏插入圖片描述

//開啓APB1下的TIM3的時鐘
RCC->APB1ENR|=1<<1;

//又因爲我們用的是TIM3的CH2通道來輸出PWM,那自然而然就應該開啓TIM3時鐘。
//
在這裏插入圖片描述//
在這裏插入圖片描述

//2.重映射,將TIM3_CH2映射到PB5
AFIO->MAPR|=0x02<<10;

//
在這裏插入圖片描述//
在這裏插入圖片描述

//3.設置TIM3_CH2所對應的GPIO的輸出模式
GPIOB->CRL|=0x0B<<20;	//設置PB5,爲複用推免輸出模式,輸出頻率50MHz

//因爲我們這裏PB5是輸出引腳,是爲了驅動LED0這個外設的。
//這裏簡單提一下爲什麼這裏設置爲推輓輸出,而不是開漏輸出模式,那是因爲雖然開漏輸出模式適用於大電流模式,但是要產生高電平的話,我們必須在外界外加上拉電阻才能達到效果,但是推輓輸出則不需要這樣。
//
在這裏插入圖片描述//在這裏插入圖片描述

//4.設置TIM3
//4.1.使能定時器
TIM3->CR1|=1<<0;
//4.2.設置預分頻係數,目的是設置計數的“精度”
TIM3->PSC=psc-1;	//表示不分頻,
//4.3.當ARPE寄存器=0,ARR寄存被寫值時,會立即更新到計數器中
TIM3->ARR=arr-1;

//這個部分我這裏就不在贅述了,在之前關於定時器部分已有講解~

//5.設置與PWM功能相關的參數
//5.1設置PWM模式
TIM3->CCMR1|=0x07<<12;	//設置PWM模式爲PWM模式2,根據實際PWM產生效果,設置PWM2模式較好,方便佔空比計算

//在這裏插入圖片描述//這個模式1和模式2的配置方法一樣,由於我們想要默認是低電平,有效電平爲高電平,所以我們這裏就設置爲PWM模式2。
//
在這裏插入圖片描述//在這裏插入圖片描述

//5.2設置極性
TIM3->CCER&=~(1<<5);	//希望高電平爲有效狀態

//
在這裏插入圖片描述//
在這裏插入圖片描述//由前面我們可以知道高電平有效,所以該位設置爲0。

//5.3使能OC
TIM3->CCER=1<<4;

//在這裏插入圖片描述//同上述,這裏使OCx輸出使能,所以該位爲1。
//
在這裏插入圖片描述

//5.4設置OCxPE
TIM3->CCMR1|=1<<11;

//在這裏插入圖片描述//
在這裏插入圖片描述

//5.5使能ARPE
TIM3->CR1|=1<<7;

//
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章