當前位置:首頁 » 存儲配置 » stm8s怎麼配置cfg

stm8s怎麼配置cfg

發布時間: 2022-07-16 17:12:26

❶ 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); //
}

❷ 有沒有用過STM8S系列單片機的,菜鳥大俠都行。有些入門級疑惑

回答都不如人意呀!分還是給自己好了,幾天下來終於有點開竅了。
1,沒有發現類似PIC (bits)的位操作的方法,有庫函數可以做這種操作,不如PIC使用方便
2,interrupt.c的用法:在STDV的安裝目錄下有cosmic tutorial文件夾,裡面有example project可以參考
3,實常式序官網有,但是用到的庫函數cosmic 和toolset里沒帶
有一個firmwarelib的擴展庫函數集,意法半導體官網http://www.st.com/internet/mcu/proct/215110.jsp下載。這些必備的庫函數和頭文件在編譯器里沒集成

❸ 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為帶上拉輸入。

❹ STM8S系列程序示例

/*********************************************
* STM8S105* TIM2 TIM3輸出PWM PD0 PD3 TIM3輸出PWM,*********************************************/#include "STM8S105K.h"
#include "STM8S105_CLOCK.h"
typedef unsigned char u8;
typedef unsigned int u16;u16 value;
/*******************************************************************************
*** 函數名 : void SystemInit(void)
*** 功能描述: 系統初始化
*** 函數說明: 系統全局初始化
******************************************************************************/
void SystemInit(void)
{ SystemClock_Init();
CLK_PCKENR1 |= 0x60; //使能TIM2與TIM3與主頻連接

PD_CR2 |= 0x80; //使能PD7口外部中斷
}
/*******************************************************************************
*** 函數名 : void main(void)
*** 功能描述: 主函數
*** 函數說明:
******************************************************************************/
void GPIO_init(void)
{
PD_DDR = 0x1F; //配置PD埠的方向寄存器全輸出
PD_CR1 = 0x1F; //設置PD為推挽輸出
PB_DDR|= 0x04; //PB2輸出
PB_CR1|= 0x04; //PB2推挽輸出
PB_ODR|= 0x04; //開5V電源
}
void TIM2_init(void) //TIM2 CH1 工作於模式1
{
// TIM2_CCMR2= 0x60; // PWM 模式 1
TIM2_CCMR1= 0x60; // PWM 模式 1,TIM2 CH1
TIM2_CCER1= 0x03; // CC1配置為輸出
//TIM2_CCER2= 0x03; // CC3使能
TIM2_ARRH = 0x03; // 配置PWM解析度為10位,ARR=0x3FF
TIM2_ARRL = 0xFF; // PWM頻率=8M/0x03FF=7820Hz
TIM2_CR1 |= 0x01; // 計數器使能,開始計數
}

void TIM3_init(void) //TIM3 CH1 ch2工作於模式2,1
{
TIM3_CCMR1= 0x70; //PWM模式2
TIM3_CCMR2= 0x60; // PWM 模式 1
TIM3_CCER1= 0x33; // CC1 CC2配置為輸出,CH1 CH2

TIM3_ARRH = 0x03; // 配置PWM解析度為10位,ARR=0x3FF
TIM3_ARRL = 0xFF; // PWM頻率=8M/0x03FF=7820Hz
TIM3_CR1 = 0x01; // 計數器使能,開始計數
} void Run(void)
{ //TIM2_CCR2H = (unsigned char)(value>>8); // 更新CC2比較寄存器
//TIM2_CCR2L = (unsigned char)(value);
TIM2_CCR1=value;
//TIM2_CCR3=value;
TIM3_CCR2=value;
TIM3_CCR1=value; //注意每個通道都要設CCR
} void init_devices(void)
{
_asm("sim");
SystemInit();
GPIO_init();
TIM2_init();
TIM3_init();
_asm("rim");
} void main( void )
{
init_devices();
while(1)
Run();

} /****************************************************************************
*** 函數名 : @near @interrupt void TLI_IRQHandler (void)
*** 功能描述: 中斷服務程序
*** 函數說明:
*****************************************************************************/
@near @interrupt void TLI_IRQHandler (void) {
PD_CR2 &= 0x7F; //關PD7外部中斷
value+=50;
while(value>1000)
value=0; PD_CR2 |= 0x80; //使能PD7口外部中斷
return;
}

❺ 最近在看STM8S單片機,頭都大了,想請問下在STM8S中,

你這是在聲明函數原型,所以應當聲明每種參數的類型。
但是當你在聲明這個函數原型的時候,還沒有告訴系統GPIOD等等類型到底是什麼。

另外你這里到底是要聲明原型、還是要調用啊???如果是後者,應當把前面的void去掉。

說白了,這是C語言的基礎能力問題,跟STM8S沒什麼太大關系。

❻ stm8 的IO 配置問題

if(PB_IDR&0X20==0) M=1;
else if(PB_IDR&0X20==1) M=2;
else if((PB_IDR&0X20)&&(PB_IDR&0X20))M=3;
第2行和第3行一個意思,永遠進不到第3行;
case 1:
P5=1;//點LED
delay_1ms(255);
P5=1; //這里應該是P5=0
case 2:

感覺你編程混亂,硬體關系不清。

❼ 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 }

❽ STM8S的IO口同時用作輸入和輸出,怎麼設置

這不管是什麼語言來實現,方法是一樣的,每組的每個IO引腳的屬性(輸入/輸出)是可以配置的,每組IO口都有三個配置寄存器,通過對這一組寄存器寫入配置的參數就行了。

❾ 如何創建cfg配置文件

使用命令行參數的 SQLIOSim.com 文件。
您運行 SQLIOSim.exe 文件後使用 文件和配置 對話框。
使用配置文件的 x 文件 部分。

熱點內容
我的世界ec伺服器消失了 發布:2024-10-07 21:48:30 瀏覽:661
pythonziptodict 發布:2024-10-07 21:36:09 瀏覽:790
linux操作系統教程 發布:2024-10-07 21:16:54 瀏覽:280
摩托音響怎麼配置 發布:2024-10-07 21:12:37 瀏覽:348
本田思域哪個配置好 發布:2024-10-07 21:04:11 瀏覽:347
演算法期末試卷 發布:2024-10-07 20:51:04 瀏覽:808
編譯期錯誤提示 發布:2024-10-07 20:07:23 瀏覽:296
阿里雲伺服器打開慢 發布:2024-10-07 20:06:33 瀏覽:577
磁存儲行業的前景 發布:2024-10-07 20:01:29 瀏覽:549
android對象序列化 發布:2024-10-07 20:01:28 瀏覽:760