當前位置:首頁 » 存儲配置 » STM8配置功能是什麼

STM8配置功能是什麼

發布時間: 2023-08-04 20:32:56

『壹』 STM8當中的GPIO各模式如何用

TM8的通用輸入/輸出口用於晶元和外部進行數據傳輸。一個IO埠可以包括多達8個引腳,每個引腳可以被獨立編程作為數字輸入或者數字輸出口。另外部分口還可能會有如模擬輸入,外部中斷,片上外設的輸入/輸出等復用功能。但是在同一時刻僅有一個復用功能可以映射到引腳上。
復用功能的映射是通過選項位元組控制的。請參考數據手冊關於選項位元組的描述。
每個埠都分配有一個輸出數據寄存器,一個輸入引腳寄存器,一個數據方向寄存器,一個選擇寄存器,和一個配置寄存器。一個I/O口工作在輸入還是輸出是取決於該口的數據方向寄存器的狀態。

GPIO主要功能

  • 可選擇的輸入模式:浮動輸入和帶上拉輸入

  • 可選擇的輸出模式:推挽式輸出和開漏輸出

  • 數據輸入和輸出採用獨立的寄存器

  • 外部中斷可以單獨使能和關閉

  • 輸出擺率控制用以減少EMC雜訊

  • 片上外設的I/O功能復用

  • 當作為模擬輸入時可以關閉輸入施密特觸發器來降低功耗

  • 在數據輸出鎖存時支持讀-修改-寫

  • 輸入兼容5V電壓

  • I/O口工作電壓范圍為1.6 V到VDDIOmax

  • I/O的配置和使用

    每一個埠都有一個輸出數據寄存器(ODR),一個引腳輸入寄存器(IDR)和一個數據方向寄存器(DDR)總是同相關的。
    控制寄存器1(CR1)和控制寄存器2(CR2)用於對輸入/輸出進行配置。任何一個I/O引腳可以通過對DDR,ODR,CR1和CR2寄存器的相應位進行編程來配置。
    寄存器中的位n對應於口的引腳n。各種不同配置總結如表18。


    (表18:IO口配置表)

    注意:連接VDD的二極體在實際開漏極狀態引腳是無效的,在引腳和VOL之間的局部保護設備重要性是有效的。
    沒有使用的I/O引腳必須連接到一個固定的電平值。或者是上拉或者是下拉。

    輸入模式

    將DDRx位清零就選擇了輸入模式。在該模式下讀IDR寄存器的位將返回對應I/O引腳上的電平值。
    如表18所示,理論上STM8可以通過軟體配置得到四種不同的輸入模式:懸浮不帶中斷輸入,懸浮帶中斷輸入,上拉不帶中斷輸入和上拉帶中斷輸入。但是在實際情況下不是所有的口都具有外部中斷能力和上拉,用戶應參考數據手冊中關於每個引腳的實際硬體性能描述來了解更多細節。

    輸出模式

    將DDRx位置1就選擇了輸出模式。在該模式下向ODR寄存器的位寫入數據將會通過鎖存器輸出對應數字值到I/O口。讀IDR的位將會返回相應的I/O引腳電平值。通過軟體配置CR1,CR2寄存器可以得到不同的輸出模式:上拉輸出,開漏輸出。

    低功耗模式

    表19低功耗模式對STM8S的GPIO口的影響

    模式 描述

    等待(Wait) 對I/O口無影響。外部中斷可以使MCU退出等待(Wait)模式

    停機(Halt) 對I/O口無影響。外部中斷可以使MCU從停機(Halt)模式喚醒

    注意:如果PA1/PA2被用來連接外部諧振器,為了確保在HALT模式下有最低功耗必須配置PA1和PA2為帶上拉輸入。

『貳』 STM8是紅外通訊的絕配

有讀者私信我,要獲得更詳細的內情。很抱歉,因為時間實在有限,而且對於實際場景不了解,所以,簡單地更新,添加了點兒內容。至於更加詳細的電路圖和源碼需要額外時間繼續補充。

最近使用STM8L152做產品,需要基於紅外線通訊的Bootloader。發現STM8L05X/15X是紅外通訊的絕配。

紅外線大致有CIR和SIR兩種。前者主要用於5~10米距離的紅外遙控器,採用38kHz載波,有大量的廉價接收解碼器可用。後者是IrDa標准之一,曾經是功能手機和筆記本電腦的標准配置,其堆棧和配置實體設計與藍牙比較像,物理層採用3/16載波方式,需要單獨的收發模塊。

電子、DVD、機頂盒、空調等傳統消費電子中常見的遙控器,我們稱之為CIR, Consumer Infra Red。CIR通常使用980nm紅外線,還需要採用38KHz~40KHz載波以避免可見光干擾。CIR需要編碼和解碼電路。

我們可以找到若干編碼電路。如果由MCU來實現,則需要產生38~40KHz 載波,另外根據特定的紅外遙控協議,如SONY/Philips RC5等產生二進制碼流。並利用邏輯門或者三極體來實現二進制碼流對於載波的調制。理論上,二進制碼流和載波還有一定的時序關系,但是實踐下來,這種時序關系的容錯率很高。

至於CIR的紅外接收部分,因為產量比較大,有低成本模塊供應,內置38~40KHz載波發生器,並直接輸出解調後的二進制碼流。所以解碼接收部分任意MCU都可以實現。

綜上所述,STM8L的CIR方案中,主要考慮的是編碼發射端。

MCU產生38KHz載波最常見的方法是使用定時器。包括設定38KHz的中斷,並在中斷中去切換GPIO引腳。或者設定一個占空比為50%的PWM中斷。其道理是類似的。同時,由軟體或者另外一種定時器來產生定時中斷,產生二進制碼流。兩者在外部使用CIR二極體相連,當兩個GPIO壓差為VCC時,IR二極體點亮,壓差為零時,IR二極體關閉。這樣就形成了最簡單的CIR遙控器。

對於STM8L來說,其內部的低頻RC振盪器頻率正好在38KHz,當然有些誤差,但是對於CIR來說要求沒有那麼嚴格。由於是內部IRC,所以並不需要使用定時器來產生中斷。

通常38kHz載波採用定時器產生PWM。但是Bootloader狀態下必須關閉所有中斷。這就限制了許多MCU在這種狀態的使用。有部分設計只用了單向傳輸,但是這種方式試錯成本太高了。

STM8L05X內部低速RC就是38kHz。而且可以從引腳引出來為載波,實測37.2kHz。配合USART可以直接構成雙向紅外通訊和遙控器。比STM推薦的IRTM還好用。

消費者紅外線技術是單向的:遙控器負責編碼和發射紅外線,設備負責接收和解碼。在某些環境中,比如說水電煤表的自動抄表系統中,則需要建立起雙向紅外線通道。

紅外線和無線電通訊類似,採用半雙工通訊方式。所以軟體角度必須要確保時序,不要造成雙方的通訊沖突。同時硬體上也可以採取一些方法,保證己方在發射時不進行接收,避免自發自收。

由於38KHz載波的存在,其波特率收到限制,我測試過9.6kbps,但是工作在2.4kbps,誤碼率要少許多。

在Bootloader模式下,USART RXD可以採用polling方式實現,在低速率情況下不會掉數據。

這個其實和STM8無關了,可以參考Arino的紅外編碼和紅外解碼庫。總的思路是將紅外切割成一個個小的時間片,而無需太多考慮RC5/SONY/Toshiba/RCA等不同的紅外遙控協議,直接使用一串二進制數據來編碼。這也是大多數通用學習型紅外遙控器的原理。

具體實現請參考  How to make IR decoder  以及 How to setup an IR remote and receiver on an Arino .

STM8的片內USART外設是支持IRDA SIR收發標準的。這是一種國際標准,早期行動電話和其他數據終端中多採用此類標准,通訊速率較高,可達到115.2kbps。但相對應的,它的紅外收發模組成本在20多元人民幣,比消費紅外模塊貴許多。

STM8的原始MCU架構來自意法半導體的ST7,是意法自主開發的內核。這里額外提一下,意法的STR7和ST7不同,是基於ARM7TDMI內核的產品線。STM8在ST7上做了很多改變,與STM32保持了引腳一致性。所以,STM8是一個性價比較高的MCU。

警告

但是STM8的ITC(中斷控制)部分卻存在著較大的問題。通過模擬器,我覺得和STM8的虛擬存儲器以及壓棧的先後順序有關聯。在某些極端嵌套中斷情況下會導致堆棧溢出,或者一些莫名其妙的問題。具體請留意 STM8 Error Sheet 。

所以STM8在中斷設計方面不能夠採用過於復雜的嵌套設計,同時需要做些黑盒壓力測試。

本文中的某些做法,如利用IRC直接產生38~40KHz載波的方式,可以作為一種思路,在其他MCU中繼續使用。比如STM32F030F4 IRC40KHz/LPC812 SCT等。

『叄』 stm8s103f3p6的afr怎樣配置

本文使用的晶元是是stm8s103f3。
以下主要說明配置TIM2通道1為PWM輸出的過程。
1.寄存器配置

4位預分頻器,計數器的計數頻率Fck_cnt=Fck_psc/2^(PSC[3:0])=16M/2^0=16M
那麼計數周期為1/16us,也就是說計數器會每隔1/16us計數一次。
TIM2_PSCR=0x00; //分頻值=0 16M

自動重裝載寄存器,
當自動重裝載寄存器=0時,計數器處於阻塞狀態,也就是不計數狀態,因為當CNTR=ARR時,CNTR就會清零,所以配置時自動重裝載寄存器應該大於0。另外自動重裝載寄存器的值就是PWM波形的周期,比如ARR=0X0100,PWM的周期為0x0100*1/16=16us,PWM的周期就是16us
TIM2_ARRH=0x01; //自動重裝的值 0x0100
TIM2_ARRL=0x00;

捕獲/比較使能寄存器,這個寄存器的配置可以選通相應的Tim2通道。
bit5,bit4為ch2配置,bit1,bit0為ch1配置
如果當前OC1為輸出通道,則
bit1:OC1低電平有效
bit0:OC1信號被輸出到當前引腳上
TIM2_CCER1=bit0|bit1; //low level,OC1

捕獲/比較模式寄存器,
bit1,bit0
CC1S[1:0]為捕獲/比較選擇
00:CC1通道被配置為輸出
bit2保留
bit3輸出比較預載入使能
0:不使能
1:使能
bit6,bit5,bit4輸出比較模式
110:PWM1模式
PWM1和PWM2模式區別
PWM1:CNT<CCR,CH1被激活
PWM2:CNT>CCR,CH1被激活
TIM2_CCMR1=bit3|bit5|bit6; //MODE

捕獲/比較寄存器,這個寄存器決定著PWM的占空比。CCR/ARR=PWM的占空比,例如設置為0x0060,那麼占空比為0x0060/0x0100=6/16
TIM2_CCR1H=0x00;
TIM2_CCR1L=0x60;

中斷使能寄存器,如果需要中斷可以在此設置。
bit1:CC1E 捕獲/比較1中斷使能
0:CC1 中斷不使能
1:CC1中斷使能
TIM2_IER=0x00; //更新中斷使能

控制寄存器,bit0控制計數器的打開和關閉。
bit0,計數器使能
0:不使能
1:使能
TIM2_CR1=bit0; //enable counter
通過邏輯分析儀測試PD4管腳的輸出電平,波形圖如下所示。

源碼如下,
//*******************************************

1 #define bit0 0x01
2 #define bit1 0x02
3 #define bit2 0x04
4 #define bit3 0x08
5 #define bit4 0x10
6 #define bit5 0x20
7 #define bit6 0x40
8 #define bit7 0x80
9
10 void Timer2_Init(void)
11 {
12 CLK_ICKR|=0x01; //開啟內部HSI
13 while(!(CLK_ICKR&0x02));//HSI准備就緒
14 CLK_SWR=0xe1; //HSI為主時鍾源
15 CLK_CKDIVR=0x00; //HSI,8分頻=16M
16 TIM2_PSCR=0x00; //分頻值=0 16M
17 TIM2_ARRH=0x01; //自動重裝的值 0x0100
18 TIM2_ARRL=0x00;
19 TIM2_CCER1=bit0|bit1; //low level,OC1
20
21 TIM2_CCMR1=bit3|bit5|bit6; //MODE
22 TIM2_CCR1H=0x00;
23 TIM2_CCR1L=0x60;
24 TIM2_IER=0x00; //更新中斷使能
25
26 TIM2_CR1=bit0; //enable counter
27 }
28 int main( void )
29 {
30 Timer2_Init();
31 while(1){};
32 }

『肆』 stm8的定時器的tim2的通道1,通道2輸出pwm,對應的GPIO需要配置嗎,咋么配置啊

不需要任何配置的,只需要設置PWM的相關寄存,配置成輸下PWM,他自動就輸出PWM了

#include "STM8S103K.h" //頭文件,定義各寄存器的地址

void main(void)
{
/*定時器基礎設置*/
CLK_CKDIVR= 0x00; //內部16M時鍾不分頻
TIM2_PSCR = 0x00; //定時器2預分頻系數為1
TIM2_CR1 = 0x01; //內部計數器使能;
TIM2_ARRH = 0x01;//0140,320分頻,16M/320=50K,實測49.75K
TIM2_ARRL = 0x3e;//自動裝載寄存器低位;實測013e正好為50.0K

/*PWM通道1設置*/
TIM2_CCER1 |= 0x01; //開啟OC1信號輸出腳
TIM2_CCMR1 = 0x60; //PWM1模式
TIM2_CCR1H = 0x00; //占空比高位
TIM2_CCR1L = 0xa0; //占空比低位
TIM2_CCMR1 |= 0x08; //輸出比較1預裝載使能

/*PWM通道2設置*/
TIM2_CCER1 |= 0x10; //開啟OC2信號輸出腳
TIM2_CCMR2 = 0x60; //PWM1模式
TIM2_CCR2H = 0x00; //占空比高位
TIM2_CCR2L = 0x03; //占空比低位
TIM2_CCMR2 |= 0x08; //輸出比較2預裝載使能

/*PWM通道3設置*/
TIM2_CCER2 = 0x01; //開啟OC3信號輸出腳
TIM2_CCMR3 = 0x60; //PWM1模式
TIM2_CCR3H = 0x01; //占空比高位
TIM2_CCR3L = 0x3d; //占空比低位
TIM2_CCMR3 |= 0x08; //輸出比較3預裝載使能

while (1); //
}

『伍』 如何使用stm8TIM1捕獲外部脈沖測電機轉速,TIM1如何配置

用一個轉速感測器或者編碼器,利用單片機引腳的脈沖沿捕獲中斷,1個計數器用於記錄2相鄰脈沖捕獲時間間隔,一個計數器用於記錄脈沖數。
然後計算1s時間內脈沖的個數就是頻率,再通過換算的電機轉速;

熱點內容
滑板鞋腳本視頻 發布:2025-02-02 09:48:54 瀏覽:427
群暉怎麼玩安卓模擬器 發布:2025-02-02 09:45:23 瀏覽:552
三星安卓12彩蛋怎麼玩 發布:2025-02-02 09:44:39 瀏覽:738
電腦顯示連接伺服器錯誤 發布:2025-02-02 09:24:10 瀏覽:531
瑞芯微開發板編譯 發布:2025-02-02 09:22:54 瀏覽:141
linux虛擬機用gcc編譯時顯示錯誤 發布:2025-02-02 09:14:01 瀏覽:227
java駝峰 發布:2025-02-02 09:13:26 瀏覽:646
魔獸腳本怎麼用 發布:2025-02-02 09:10:28 瀏覽:527
linuxadobe 發布:2025-02-02 09:09:43 瀏覽:207
sql2000資料庫連接 發布:2025-02-02 09:09:43 瀏覽:721