標(biāo)題:
STM8S系列單片機(jī)開發(fā)環(huán)境應(yīng)用快速入門
[打印本頁]
作者:
51黑fan
時(shí)間:
2016-1-29 23:24
標(biāo)題:
STM8S系列單片機(jī)開發(fā)環(huán)境應(yīng)用快速入門
本帖最后由 51黑fan 于 2016-1-29 23:39 編輯
最近ST在國內(nèi)大力推廣他的8位高性價(jià)比單片機(jī)STM8S系列,感覺性能上還是非常不錯(cuò)的,網(wǎng)上稍微看了點(diǎn)資料,打算有機(jī)會還是學(xué)習(xí)一下,先入門為以后做好技術(shù)積累。好了,長話短說。手上拿到一套ST最近做活動(dòng)贈送的三合一學(xué)習(xí)套件,上面包括STM32F小板、ST LINK小板、STM8S小板,做工很精致,相信很多朋友也收到了。既然當(dāng)初去申請了,人家也送了,總得把用起來吧,放著吃灰塵是很可惜的^_^ 。
好,步入正題,剛開始在論壇上逛了一圈,感覺STM8S的資料實(shí)在太少,都是官方的應(yīng)用資料,沒有什么入門介紹,連需要安裝什么軟件都搞不清楚。偶的電腦光驅(qū)壞了,所以也讀不出光盤里有什么東西,所以只能到處瞎摸,還是ourdev論壇好,嘿嘿,仔細(xì)看了幾個(gè)帖子,總算明白大概是什么樣的開發(fā)環(huán)境了。用C語言開發(fā)STM8S,需要安裝兩個(gè)軟件:1、STVD IDE開發(fā)環(huán)境;2、COSMIC for STM8 C編譯器。
STVD可以到官網(wǎng)下載,下載地址:
http://www.torrancerestoration.com/bbs/dpj-43003-1.html
COSMIC 需要申請LICENSE,比較繁瑣,剛好壇子有人傳了一個(gè)免安裝無限制版本的,偶就趕緊下載了,大家可以去下載,僅做為個(gè)人學(xué)習(xí)使用。
下載地址:
http://www.torrancerestoration.com/bbs/dpj-43001-1.html
軟件下載后,只需安裝STVD。從上面地址下載的COSMIC不用安裝,只要解壓到硬盤即可。后面建立工程的時(shí)候設(shè)置好路徑即可。
下面一步一步開始啦~
一、安裝好STVD后,桌面上建立了兩個(gè)快捷圖標(biāo),ST Visual Develop就是STVD了。ST Visual Programmer是編程軟件,可以配合ST LINK對STM8S進(jìn)行編程燒錄。
二、雙擊運(yùn)行ST Visual Develop,啟動(dòng)STVD開發(fā)環(huán)境。執(zhí)行 File \ New Workspace,在New Workspace窗口里選擇Create workspace and projects,點(diǎn)擊“確定”建立工作組和工程
三、在Workspace filename里輸入Workspace名稱,由于最終我們要測試一個(gè)現(xiàn)成的LED程序,所以偶寫了led,隨你喜歡了,呵呵。在Workspace里設(shè)置好文件當(dāng)前要存放的路徑。然后點(diǎn)“OK”確定。
四、在Project filename里輸入工程的名稱,在Project location里設(shè)置好工程的存放路徑。因?yàn)槲覀兪且肅語言來開發(fā)的,所以在Toolchain里要選擇 STM8 Cosmic 編譯器;在Toolchain root里就要填寫你剛才下載解壓后的那個(gè)無限制的Cosmic的存放路徑就可以了。都填好后,點(diǎn)“OK”。
怕大家搞不清楚上面的那個(gè)Toolchain root的存放路徑,特截圖一張。我是放在那里的,你看你放哪里就填哪里的路徑。
五、在MCU Selection里,需要選擇實(shí)際的MCU型號了,ST送的套件板上的芯片型號是STM8S207SBT6C,而下列的型號中卻是STM8S207S8,沒對上號,不知道是不是STVD弄錯(cuò)了。反正偶選下面的STM8S207S8是可以用的,先用著咯,呵呵。雙擊型號后,點(diǎn)“OK”。
六、下面工程就建立好了,呵呵,自動(dòng)生成main.c 、stm8_interrupt_vector.c 、mods0.h。試試compile、build,一切順利,因?yàn)楝F(xiàn)在main.c只有一個(gè)主程序,所以還是可以編譯通過的,沒有什么錯(cuò)誤提示,如下下圖:
好了,以上就是使用STVD建立工程的詳細(xì)步驟了。
由于上面的main.c沒什么實(shí)質(zhì)的程序運(yùn)行,所以下面我們要運(yùn)行一個(gè)ADC電壓采集,并把采集值賦給定時(shí)器,實(shí)現(xiàn)定時(shí)器PWM的變化輸出,驅(qū)動(dòng)LED亮度發(fā)生變化的程序,這個(gè)程序我是從一個(gè)論壇上下載的,應(yīng)該也是這個(gè)套件板的光盤里的內(nèi)容。
我先把這個(gè)程序工程里的3個(gè)文件(main.c 、 tm8_interrupt_vector.c 、 STM8S207R.h)傳上來,其實(shí)這個(gè)工程也是可以直接運(yùn)行的,但為了讓我們上面辛苦建立的工程發(fā)揮下作用,所以還是繼續(xù)沿用上面的工程,然后把我上傳的3個(gè)文件名里的main.c 、 tm8_interrupt_vector.c 里的內(nèi)容復(fù)制到我們剛才建立好的工程對應(yīng)的文件里;并把STM8S207R.h這個(gè)文件復(fù)制到我們工程目錄下,并添加到工程里,這個(gè)頭文件是必須的。
大家先下載這3個(gè)文件:
led.rar
(5.84 KB, 下載次數(shù): 36)
2016-1-29 23:23 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
/*============================================================================*/
/* PROJECT: LED Control by timer OC */
/* MODULE: main.c */
/* COMPILER: STM8 Cosmic C Compiler */
/* DATE: Feb 2009 */
/*----------------------------------------------------------------------------*/
/* DESCRIPTION: Demonstration firmware for STM8 Mini Kit */
/* Control LED blink, on/off/, brightness. */
/*============================================================================*/
/******************************************************************************
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*
* COPYRIGHT 2008 STMicroelectronics
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "stm8s207r.h" /* Registers and memory mapping file. */
/******************************************************************************/
/* Macro definitions
/******************************************************************************/
/******************************************************************************/
/* RAM SEGMENT variables */
/******************************************************************************/
/* Global variable used to store the ADC result. */
unsigned int AD_Value;
/******************************************************************************/
/* Function definitions */
/******************************************************************************/
/* -------------------------------------------------------------------------- */
/* ROUTINE NAME: LED_Control */
/* INPUT/OUTPUT: Note duration (4bit MSB information) / None. */
/* DESCRIPTION: 1) Sample AIN voltage and store in AD_Value. */
/* 2) Polling wait routine for note duration(based on 3ms delay).*/
/* duration: Quaver (2), crotchet (4) or minim (8) selection. */
/* ---------------------------------------------------------------------------*/
void LED_Control(unsigned char duration)
{
int i = 0;
unsigned char uc = 0;
unsigned long Temp;
/* Sample AIN voltage in ADC single mode */
ADC_CR1 |= 0x01; /* First set ADON to power on the ADC module. */
i = 6; /* Wait >7us to ensure the ADC power on finished.*/
while(i--);
ADC_CR1 |= 0x01; /* Set ADON again to start AD convert. */
while(!(ADC_CSR & 0x80));/* Waiting for AD convert finished (EOP=1). */
/* Store ADC value to AD_Value */
AD_Value = ((((unsigned int)ADC_DRH)<<2)+ADC_DRL);
/* The new duty cycle value is written in CCR. */
TIM2_CCR2H=0x00;
TIM2_CCR2L=(unsigned char)(AD_Value>>2);
if (AD_Value>0x10)
{
Temp=(unsigned char)(AD_Value>>8);
if ((TIM3_ARRH>Temp+0x05)||(TIM3_ARRH<Temp-0x05))
{
TIM3_ARRH = Temp;
TIM3_ARRL = (unsigned char)(AD_Value&0xff);
TIM3_CCR1H = (unsigned char)(AD_Value>>9);
TIM3_CCR1L = (unsigned char)((AD_Value>>1)&0xff);
}
}
/* Delay time = duration * Y */
while ( uc < duration ) /* The following loop is run "duration" times. */
{
while ( i < 1200 ) /* This loop "Y" waits approximately 4.3ms. */
{
i++;
}
i = 0;
uc++;
}
}
/* -------------------------------------------------------------------------- */
/* ROUTINE NAME: GPIO_Init */
/* INPUT/OUTPUT: None. */
/* DESCRIPTION: Initialize GPIOs. */
/* IN: None. */
/* OUT: None. */
/* -------------------------------------------------------------------------- */
void GPIO_Init(void)
{
/* LED IO Configuration */
/* LD3: PD3 */
/* LD2: PD1 */
/* LD1: PD0 */
PD_DDR |= 0x0D; /* Output. */
PD_CR1 |= 0x0D; /* PushPull. */
PD_CR2 = 0x00; /* Output speed up to 2MHz. */
/* PD7 external interrupt */
EXTI_CR1 = 0x00;
EXTI_CR2 = 0x00;
PD_DDR &=~0x80;
PD_CR2 |= 0x80;
}
/* -------------------------------------------------------------------------- */
/* ROUTINE NAME: CLK_Init */
/* INPUT/OUTPUT: None. */
/* DESCRIPTION: Initialize the clock source */
/* -------------------------------------------------------------------------- */
void CLK_Init(void)
{
/* Configure HSI prescaler*/
CLK_CKDIVR &= ~0x10; /* 01: fHSI= fHSI RC output/2. */
/* Configure CPU clock prescaler */
CLK_CKDIVR |= 0x01; /* 001: fCPU=fMASTER/2. */
}
/* -------------------------------------------------------------------------- */
/* ROUTINE NAME: ADC_Init */
/* INPUT/OUTPUT: None. */
/* DESCRIPTION: Initialize the AD converter. */
/* -------------------------------------------------------------------------- */
void ADC_Init(void)
{
ADC_CR2 = 0x00;
ADC_CR1 = 0x00;
ADC_CSR = 0x03;
ADC_TDRL = 0x20;
}
/* -------------------------------------------------------------------------- */
/* ROUTINE NAME: TIM_Init */
/* INPUT/OUTPUT: None. */
/* DESCRIPTION: Initialize the TIM2 TIM3. */
/* -------------------------------------------------------------------------- */
void TIM_Init(void)
{
/* TIM2 CC2 control LED Brightness */
TIM2_CCMR2 |= 0x70; /* Output mode PWM2. */
TIM2_CCER1 |= 0x30; /* CC polarity low,enable PWM output */
TIM2_ARRH = 0x00;
TIM2_ARRL = 0xff; /* Freq control register: ARR */
TIM2_CCR2 = 0x00; /* Dutycycle control register: CCR */
TIM2_PSCR = 0x00; /* Configure TIM2 prescaler =1 */
TIM2_CR1 |= 0x01;
/* TIM3 CC1 control LED Blinking */
TIM3_CCMR1 |= 0x78; /* Output mode PWM2. */
TIM3_CCER1 |= 0x03; /* CC polarity low,enable PWM output */
TIM3_ARRH = 0x03;
TIM3_ARRL = 0xff; /* Freq control register: ARR */
TIM3_CCR1H = 0x02; /* Dutycycle control register: CCR */
TIM3_CCR1L = 0x00;
TIM3_PSCR |= 0x0d; /* Configure TIM3 prescaler = 8192 */
TIM3_CR1 |= 0x81;
}
/* -------------------------------------------------------------------------- */
/* ROUTINE: main */
/* main entry */
/* -------------------------------------------------------------------------- */
void main ( void )
{
unsigned int j;
_asm("sim"); /* Disable interrupts */
CLK_Init();
GPIO_Init();
TIM_Init();
ADC_Init();
_asm("rim");
while ( 1 )
{
LED_Control(0x08);
}
}
/*---------------------------- End of file -----------------------------------*/
復(fù)制代碼
然后編譯程序,成功!
嘿嘿,下面要把實(shí)驗(yàn)板連接到電腦調(diào)試了。
不過在連機(jī)調(diào)試前,要先設(shè)置下Debug instrument的Target Settings…,實(shí)驗(yàn)板配套的是ST LINK,所以就選ST LINK就可以了。
還有一個(gè)重要的,差點(diǎn)忘了,那就是STM8S小板需要接獨(dú)立的外部電源,DC9~12V,插座是內(nèi)正外負(fù),別搞錯(cuò)正負(fù)極了。
接上電源,板上的D4電源指示燈應(yīng)該亮起,用USB連接線把ST LINK連接到電腦的USB。
然后點(diǎn)擊DEBUG按鈕,進(jìn)入仿真調(diào)試界面
中間有一個(gè)確定窗口需要確定下就可以了。
進(jìn)入仿真界面后,執(zhí)行RUN按鈕運(yùn)行程序,這時(shí)候?qū)嶒?yàn)板進(jìn)入全速運(yùn)行的狀態(tài),可以看到實(shí)驗(yàn)板上的LD2發(fā)光二極管以一定的頻率在閃爍,LD1微亮,這時(shí)候順時(shí)針旋轉(zhuǎn)板上的那個(gè)電位器,可以發(fā)現(xiàn)LD2的閃爍頻率變慢,同時(shí)LD1的亮度增強(qiáng)。逆時(shí)針旋轉(zhuǎn)電位器則反之。
OK,至此STM8S的基礎(chǔ)入門到此結(jié)束,由于工作繁忙,更深入的了解學(xué)習(xí)請大家多多探討,這樣才能進(jìn)步得更快。謝謝~
本工程里的這個(gè)ST公司寫的測試程序里有詳細(xì)的英文注釋,看看基本都能看懂。中斷函數(shù)需要在tm8_interrupt_vector.c里寫,大家注意下就可以了,F(xiàn)在沒有用到什么ST的函數(shù)庫,所以感覺像在用C語言開發(fā)AVR,差別不大。
作者:
John
時(shí)間:
2017-6-28 13:19
小白到此一游,以后會用到的,謝謝分享
作者:
htzsz
時(shí)間:
2017-8-17 08:02
想學(xué)習(xí)STM8,先收藏了,謝謝分享!
作者:
stm8899
時(shí)間:
2017-12-26 23:07
學(xué)習(xí)
作者:
jmabc88
時(shí)間:
2018-5-26 23:46
stm8很厲害,但入門難度比較大
作者:
QQ賣萌者
時(shí)間:
2018-5-27 09:37
學(xué)到了
作者:
L-login
時(shí)間:
2018-6-6 22:36
謝謝分享,正好用到,感謝~
作者:
hbthgsli
時(shí)間:
2019-7-13 09:57
謝謝樓主分享!
作者:
小刀單片機(jī)
時(shí)間:
2019-7-13 10:46
謝謝分享,另外B站上正點(diǎn)原子視頻,推薦新手去入門
作者:
hbthgsli
時(shí)間:
2019-7-13 10:51
謝謝分享,正好用到,感謝
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1