STM8S的TIM1 PWM設置(寄存器版本)

1. 概述

脈衝寬度調製(PWM)模式可以產生一個由TIM1_ARR寄存器確定頻率、由TIM1_CCRi寄存器確定佔空比的信號。

2. 芯片資料

參考STM8S datasheet如下資料:

在TIM1_CCMRi寄存器中的OCiM位寫入’110’(PWM模式1)或’111’(PWM模式2),能夠獨立地設置每個OCi輸出通道產生一路PWM。必須設置IM1_CCMRi寄存器的OCiPE位使能相應的預裝載寄存器,也可以設置TIM1_CR1寄存器的ARPE位使能自動重裝載的預裝載寄存器(在向上計數模式或中央對稱模式中)。
由於僅當發生一個更新事件的時候,預裝載寄存器才能被傳送到影子寄存器,因此在計數器開始計數之前,必須通過設置TIM1_EGR寄存器的UG位來初始化所有的寄存器。
OCi的極性可以通過軟件在TIM1_CCERi寄存器中的CCiP位設置,它可以設置爲高電平有效或低電平有效。 OCi的輸出使能通過(TIM1_CCERi和TIM1_BKR寄存器中)CCiE、 MOE、 OISi和OSSR位和OSSI位的組合來控制。詳見TIM1_CCERi寄存器的描述。
在PWM模式(模式1或模式2)下, TIM1_CNT和TIM1_CCRi始終在進行比較, (依據計數器的計數方向)以確定是否符合TIM1_CCRi≤TIM1_CNT或者TIM1_CNT≤TIM1_CCRi。
根據TIM1_CR1寄存器中CMS位域的狀態,定時器能夠產生邊沿對齊的PWM信號或中央對齊的PWM信號。

內部架構詳細圖

參考上圖可以確定需要設置的寄存器。

3. 應用

在項目中需要使用TIM1_CH3N作爲PWM輸出IO,所以暫以這個通道爲例,設置PWM輸出。

#define BLACKLIGHT_PWM_FRQ      640
void Blacklight_Init(void)
{
    CLK->PCKENR1 |= 0x80;
    //TIM1->EGR=0x01;//重新初始化TIM1
    //TIM1->EGR|=0x20;//重新初始化TIM1

    //初始化自動重裝載寄存器,確定PWM 頻率(16M的TIM1 CLK)
    TIM1->ARRH = (u8)(BLACKLIGHT_PWM_FRQ >> 8);
    TIM1->ARRL = (u8)(BLACKLIGHT_PWM_FRQ & 0xff);
    //初始化比較寄存器,決定PWM 方波的佔空比 , 暫時設置50%的佔空比。 
    TIM1->CCR3H = (u8)((BLACKLIGHT_PWM_FRQ/2) >> 8);
    TIM1->CCR3L = (u8)((BLACKLIGHT_PWM_FRQ/2) & 0xff); 
    //初始化比較模式寄存器
    TIM1->CCMR3 = 0x68; 
    //初始化使能寄存器
    TIM1->CCER2 = 0x04;    
    //初始化剎車寄存器  
    TIM1->BKR |= 0x80;
    // 啓動計數
    TIM1->CR1 |= 0x01;  
}

注意: STM8S在燒錄前,需要將PB2(TIM1_CH3N)的功能重新映射,通過STVP修改OPTION BYTE頁中的AFR5項來完成。

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