STM8S0 TIM1 PWM互補輸出

2021-08-15 09:44:25 字數 3962 閱讀 9794

目錄:

1.定時器1和互補pwm基礎

2.程式:

1、tim1_ch1_pwm互補+死區

2、tim1_ch2_pwm互補+死區

3、tim1_ch1_pwm+tim1_ch2_pwm互補+死區

3.採用iar**需設定:選擇iar選單st-link,選擇option bytes,配置如圖(見文章末尾)

一、定時器1互補pwm基礎

1.tim1為高階定時器,定時器是16位計數,有65536種分頻,分頻係數1-65536。可以選擇計數方向(分為向上和向下兩種計數方向)

。2.使能外設時鐘暫存器(clk_pckenr)

:開啟或者關閉外設時鐘

3.tim1_egr:事件產生暫存器,可以

重新初始化tim1定時器

4.控制暫存器 1(tim1_cr1)

5.重複計數暫存器(tim1_rcr)

rep[7:0]:

重複計數器的值

開啟了預裝載功能後,這些位允許使用者設定比較暫存器的更新速率(即周期性地從預裝載暫存器

傳輸到當前暫存器);如果允許產生更新中斷,則會同時影響產生更新中斷的速率。

每次向下計數器rep_cnt達到0,會產生乙個更新事件並且計數器rep_cnt重新從rep值開

始計數。由於rep_cnt只有在週期更新事件u_rc發生時才過載rep值,因此對tim1_rcr寄

存器寫入的新值只在下次週期更新事件發生時才起作用。

這意味著在pwm模式中,(rep+1)對應著:

- 在邊沿對齊模式下,pwm週期的數目;

- 在中心對稱模式下,pwm半週期的數目;

6.預分頻器

分(tim1_pscrh) 和(tim1_pscrl),設定預分頻係數時必須高位(tim1_pscrh)在前低位(tim1_pscrl)在後。

預分頻器用於對ck_psc進行分頻。

計數器的時鐘頻率(fck_cnt)等於fck_psc/( pscr[15:0]+1)。

pscr包含了當更新事件產生時裝入當前預分頻器暫存器的值(更新事件包括計數器被

tim_egr的ug位清0或被工作在復位模式的從控制器清0)。這意味著為了使新的值起作用,必

須產生乙個更新事件。

(切記:通用定時器可以選擇16種分頻,基本定時器只能選擇8種分頻)

7.捕獲/比較使能暫存器 1(tim1_ccer1):對於

互補輸出的通道,該位需要預裝載。

8.捕獲/比較暫存器 1 分高位(tim1_ccr1h) 和低位(tim1_ccr1l)

,配置pwm的占空比值

若cc1通道配置為輸出(tim1_ccmr1的cc1s位):

ccr1包含了裝入當前捕獲/比較1暫存器的值(預裝載值)。

如果在tim1_ccmr1暫存器(oc1pe位)中未選擇預裝載功能,寫入的數值會立即傳輸至當前寄

存器中。否則只有當更新事件發生時,此預裝載值才傳輸至當前捕獲/比較1暫存器中。

當前捕獲/比較暫存器的值同計數器tim1_cnt的值相比較,並在oc1埠上產生輸出訊號。

若cc1通道配置為輸入:

ccr1包含了上一次輸入捕獲1事件(ic1)發生時的計數器值(此時該暫存器為唯讀)。

9.自動裝載暫存器

高位(timx_arrh) 和 自動裝載暫存器低位(timx_arrl)

這兩個暫存器復位值都是0x00。需要注意的是,高階定時器tim1和通用定時器tim2,tim3,tim5都是16位計數的定時器,操作暫存器的時候要先寫高8位再寫低8位。而基本定時器tim4,tim6是8位計數的定時器,是不分高8位和低8位的,所以操作基本定時器的時候暫存器名字是(timx_arr)。 操作重裝載暫存器的時候更新的值不會馬上寫入重裝載暫存器,而是等到有中斷產生的時候操作的數值才會寫入暫存器,當然也可以用軟體的方法產生中斷。

10.捕獲/比較模式暫存器 1(tim1_ccmr1):

通道可 用於輸入(捕獲模式)或輸出(比較模式),通道的方向由相應的cc1s位定義。該暫存器其

它位的作用在輸入和輸出模式下不同。

0c1m[2:0]:輸出比較1模式

該3位定義了輸出參考訊號oc1ref的動作,而oc1ref決定了oc1的值。oc1ref是高電平

有效,而oc1的有效電平取決於cc1p位。

000:凍結。輸出比較暫存器tim1_ccr1與計數器tim1_cnt間的比較對oc1ref不起作用;

001:匹配時設定通道1的輸出為有效電平。當計數器tim1_cnt的值與捕獲/比較暫存器1

(tim1_ccr1)相同時,強制oc1ref為高。

010:匹配時設定通道1的輸出為無效電平。當計數器tim1_cnt的值與捕獲/比較暫存器1

(tim1_ccr1)相同時,強制oc1ref為低。

011:翻轉。當tim1_ccr1=tim1_cnt時,翻轉oc1ref的電平。

100:強制為無效電平。強制oc1ref為低。

101:強制為有效電平。強制oc1ref為高。

110:pwm模式1- 在向上計數時,一旦tim1_cnt

為無效電平;在向下計數時,一旦tim1_cnt>tim1_ccr1時通道1為無效電平(oc1ref=0),

否則為有效電平(oc1ref=1)。

111:pwm模式2- 在向上計數時,一旦tim1_cnt為有效電平;在向下計數時,一旦tim1_cnt>tim1_ccr1時通道1為有效電平,否則為無效

電平11.控制暫存器 1(timx_cr1) 

復位值0x00,這個暫存器對所有定時器適用。 

12.剎車暫存器(tim1_bkr)

二,程式:

1、tim1_ch1_pwm互補+死區

void pwm2_init()

2、tim1_ch2_pwm互補+死區

void pwm2_init()

3、tim1_ch1_pwm+tim1_ch2_pwm互補+死區

void pwm2_init()

三、採用iar**需設定:選擇iar選單st-link,選擇option bytes,配置如圖

程式如下:親測可以使用。

#include 

/*//tim1_ch1_pwm互補+死區

void pwm2_init()

*//*

//tim1_ch2_pwm互補+死區

void pwm2_init()

*///tim1_ch1_pwm+tim1_ch2_pwm互補+死區

void pwm2_init()

int main(void)

}

STM8S 串列埠應用 UART2 STM8S105

少說話。多做事,下面是我驗證過沒有問題的串列埠傳送接受資料 使用mcu stm8s105c6 uart2 初始化時呼叫 gpio deinit gpiod configure pd5 6 gpio init gpiod,gpio pin 5,gpio mode in pu no it 傳送資料io ...

STM8學習總結三 TIM1定時器使用

本文主要總結關於stm8在庫函式開發時,各條語句的含義。1 tim1初始化配置函式 函式主要作用 對計數器的引數,工作模式進行設定,並使能 void tim1 init void 關於定時器溢位值的計算 定時器溢位值 預定定時時間 us 定時器頻率 2 tim1中斷向量函式 函式主要作用 呼叫中斷執...

STM8S時鐘配置

1 stm8時鐘說明 stm8上電復位後預設使用內部的高速時鐘,並分頻成為2m用於系統執行。如果我們想要使用外部時鐘,需要進行時鐘切換,切換過程中還需要使用stvp進行晶元選項字的更改。2 stm8s時鐘配置 庫函式版 1 配置內部高速振盪器 hsi 的分頻器 1分頻 clk hsiprescale...