需提前學習:MSP430F5529庫函數定時器A——定時中斷;引腳手冊擷取;
目錄
先上代碼
詳解
引腳複用
選擇引腳
擷取引腳手冊
看手冊
時鐘選擇
分頻
周期
REGISTER選擇
比較輸出模式
模式類型
增計數模式下的比較輸出
連續計數模式下的比較輸出
增減計數模式下的比較輸出
占空比選擇
Timer_A_outputPWM()初始化
函數定義
參數baseAddress
Timer_A_setCompareValue()函數介紹
函數定義
參數
baseAddress
compareRegister
compareValue
先上代碼
我們先貼代碼,再介紹這樣友善了解。
#include "driverlib.h"
#define TIMER_PERIOD 8192
void Timer_A0_PWM_Init(void)
{
Timer_A_outputPWMParam htim = {0};
//P1.2複用輸出
GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P1, GPIO_PIN2);
//時鐘源選為SMCLK = 1048576 HZ
htim.clockSource = TIMER_A_CLOCKSOURCE_SMCLK;
//分頻系數設為32 32768HZ
htim.clockSourceDivider = TIMER_A_CLOCKSOURCE_DIVIDER_32;
//裝載值設為8192 - 1 ,周期為0.25s
htim.timerPeriod = TIMER_PERIOD - 1;
//P1.2 對應 TA0.1 故設為TIMER_A_CAPTURECOMPARE_REGISTER_1 定時器為0
htim.compareRegister = TIMER_A_CAPTURECOMPARE_REGISTER_1;
//選擇複位置位模式
htim.compareOutputMode = TIMER_A_OUTPUTMODE_RESET_SET;
//設定占空比,為5%
htim.dutyCycle = TIMER_PERIOD / 20 ;
//P1.2 對應 TA0.1 為TIMER_A0_BASE
Timer_A_outputPWM(TIMER_A0_BASE, &htim);
}
int main(void)
{
WDT_A_hold(WDT_A_BASE);
Timer_A0_PWM_Init();
//interrupts enabled
__bis_SR_register(GIE);
while(1)
{
}
}
詳解
引腳複用
選擇引腳
我們選擇P1.2作為硬體PWM輸出,他對應的是定時器0的1腳。是以複用引腳為輸出,使用GPIO_setAsPeripheralModuleFunctionOutputPin()函數
擷取引腳手冊
可能有人想知道這個怎麼看,首先我們得獲引腳手冊。打開我的git倉庫——>點選引腳功能資料手冊英文版——>下載下傳
看手冊
這個引腳對應複用功能在7.2 Signal Descriptions章節,也就是第16頁。
時鐘選擇
clockSource 是時鐘選擇,我們此處選擇SMCLK時鐘。
SMCLK系統預設 1048576Hz,ACLK系統預設為32768Hz。
分頻
clockSourceDivider 是分頻的,如果你不知道這裡能填寫什麼,可以滑鼠到clockSourceDivider處,點選F3。你看他上面的注釋就是可選參數。
周期
選擇的周期數-1存入timerPeriod 中。如果我們定時周期為500,那麼存入timerPeriod 的值為499,也就是500-1
REGISTER選擇
因為我們設定的是P1.2引腳,檢視手冊可知,對應的是定時器0的CCI1A。是以此處選擇TIMER_A_CAPTURECOMPARE_REGISTER_1,如果是對應的定時器的CCI2A,此處就選擇TIMER_A_CAPTURECOMPARE_REGISTER_2。
比較輸出模式
compareOutputMode 設定比較輸出模式
模式類型
模式有如下
對應可選參數如下
注意:電平輸出模式(000)沒有選擇
#define TIMER_A_OUTPUTMODE_OUTBITVALUE OUTMOD_0
#define TIMER_A_OUTPUTMODE_SET OUTMOD_1
#define TIMER_A_OUTPUTMODE_TOGGLE_RESET OUTMOD_2
#define TIMER_A_OUTPUTMODE_SET_RESET OUTMOD_3
#define TIMER_A_OUTPUTMODE_TOGGLE OUTMOD_4
#define TIMER_A_OUTPUTMODE_RESET OUTMOD_5
#define TIMER_A_OUTPUTMODE_TOGGLE_SET OUTMOD_6
#define TIMER_A_OUTPUTMODE_RESET_SET OUTMOD_7
增計數模式下的比較輸出
在增計數模式下,當TAR增加到TAxCCRn或從TAxCCR0計數到0時,定時器輸出信号按選擇的輸出模式發生變化。示例如圖所示,該示例利用了TAxCCR0和TAxCCR1。
因為我隻講增計數模式,感覺正常使用也隻會用到這個,是以建議看完這個一部分,下面兩個可以不看。
連續計數模式下的比較輸出
在連續計數模式下,定時器輸出波形與增計數模式一樣,隻是計數器在增計數到TAxCCR0後還要繼續增計數到0FFFFh,這樣就延長了計數器計數到TAxCCR1數值的時間。在連續計數模式下的輸出波形如圖所示。在該示例中同樣用到了TAxCCR0和TAxCCR1。
增減計數模式下的比較輸出
這個用的少
占空比選擇
這個裡面的數值你自己填,比如我設定的周期是TIMER_PERIOD。那麼我設定占空比為5%,就可以這樣寫
//設定占空比,為5%
htim.dutyCycle = TIMER_PERIOD / 20 ;
Timer_A_outputPWM()初始化
函數定義
void Timer_A_outputPWM(uint16_t baseAddress, Timer_A_outputPWMParam *param)
作用
計時器A運作在增計數模式産生PWM
參數baseAddress
可選值如下
TIMER_A0_BASE
TIMER_A1_BASE
TIMER_A2_BASE
Timer_A_setCompareValue()函數介紹
我們做硬體PWM除了初始化的時候可以進行設定占空比,還可以在其他時刻進行設定占空比。這樣就需要使用這個函數了
函數定義
void Timer_A_setCompareValue ( uint16_t baseAddress,uint16_t compareRegister,uint16_t compareValue)
參數
baseAddress
baseAddress與Timer_A_outputPWM()函數的一緻
compareRegister
選擇所設定更改PWM的引腳
#define TIMER_A_CAPTURECOMPARE_REGISTER_0 0x02
#define TIMER_A_CAPTURECOMPARE_REGISTER_1 0x04
#define TIMER_A_CAPTURECOMPARE_REGISTER_2 0x06
#define TIMER_A_CAPTURECOMPARE_REGISTER_3 0x08
#define TIMER_A_CAPTURECOMPARE_REGISTER_4 0x0A
#define TIMER_A_CAPTURECOMPARE_REGISTER_5 0x0C
#define TIMER_A_CAPTURECOMPARE_REGISTER_6 0x0E
compareValue
設定要最後改成的數值