久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
STM8S系列單片機開發環境應用快速入門
[打印本頁]
作者:
51黑fan
時間:
2016-1-29 23:24
標題:
STM8S系列單片機開發環境應用快速入門
本帖最后由 51黑fan 于 2016-1-29 23:39 編輯
最近ST在國內大力推廣他的8位高性價比單片機STM8S系列,感覺性能上還是非常不錯的,網上稍微看了點資料,打算有機會還是學習一下,先入門為以后做好技術積累。好了,長話短說。手上拿到一套ST最近做活動贈送的三合一學習套件,上面包括STM32F小板、ST LINK小板、STM8S小板,做工很精致,相信很多朋友也收到了。既然當初去申請了,人家也送了,總得把用起來吧,放著吃灰塵是很可惜的^_^ 。
好,步入正題,剛開始在論壇上逛了一圈,感覺STM8S的資料實在太少,都是官方的應用資料,沒有什么入門介紹,連需要安裝什么軟件都搞不清楚。偶的電腦光驅壞了,所以也讀不出光盤里有什么東西,所以只能到處瞎摸,還是ourdev論壇好,嘿嘿,仔細看了幾個帖子,總算明白大概是什么樣的開發環境了。用C語言開發STM8S,需要安裝兩個軟件:1、STVD IDE開發環境;2、COSMIC for STM8 C編譯器。
STVD可以到官網下載,下載地址:
http://www.zg4o1577.cn/bbs/dpj-43003-1.html
COSMIC 需要申請LICENSE,比較繁瑣,剛好壇子有人傳了一個免安裝無限制版本的,偶就趕緊下載了,大家可以去下載,僅做為個人學習使用。
下載地址:
http://www.zg4o1577.cn/bbs/dpj-43001-1.html
軟件下載后,只需安裝STVD。從上面地址下載的COSMIC不用安裝,只要解壓到硬盤即可。后面建立工程的時候設置好路徑即可。
下面一步一步開始啦~
一、安裝好STVD后,桌面上建立了兩個快捷圖標,ST Visual Develop就是STVD了。ST Visual Programmer是編程軟件,可以配合ST LINK對STM8S進行編程燒錄。
二、雙擊運行ST Visual Develop,啟動STVD開發環境。執行 File \ New Workspace,在New Workspace窗口里選擇Create workspace and projects,點擊“確定”建立工作組和工程
三、在Workspace filename里輸入Workspace名稱,由于最終我們要測試一個現成的LED程序,所以偶寫了led,隨你喜歡了,呵呵。在Workspace里設置好文件當前要存放的路徑。然后點“OK”確定。
四、在Project filename里輸入工程的名稱,在Project location里設置好工程的存放路徑。因為我們是要用C語言來開發的,所以在Toolchain里要選擇 STM8 Cosmic 編譯器;在Toolchain root里就要填寫你剛才下載解壓后的那個無限制的Cosmic的存放路徑就可以了。都填好后,點“OK”。
怕大家搞不清楚上面的那個Toolchain root的存放路徑,特截圖一張。我是放在那里的,你看你放哪里就填哪里的路徑。
五、在MCU Selection里,需要選擇實際的MCU型號了,ST送的套件板上的芯片型號是STM8S207SBT6C,而下列的型號中卻是STM8S207S8,沒對上號,不知道是不是STVD弄錯了。反正偶選下面的STM8S207S8是可以用的,先用著咯,呵呵。雙擊型號后,點“OK”。
六、下面工程就建立好了,呵呵,自動生成main.c 、stm8_interrupt_vector.c 、mods0.h。試試compile、build,一切順利,因為現在main.c只有一個主程序,所以還是可以編譯通過的,沒有什么錯誤提示,如下下圖:
好了,以上就是使用STVD建立工程的詳細步驟了。
由于上面的main.c沒什么實質的程序運行,所以下面我們要運行一個ADC電壓采集,并把采集值賦給定時器,實現定時器PWM的變化輸出,驅動LED亮度發生變化的程序,這個程序我是從一個論壇上下載的,應該也是這個套件板的光盤里的內容。
我先把這個程序工程里的3個文件(main.c 、 tm8_interrupt_vector.c 、 STM8S207R.h)傳上來,其實這個工程也是可以直接運行的,但為了讓我們上面辛苦建立的工程發揮下作用,所以還是繼續沿用上面的工程,然后把我上傳的3個文件名里的main.c 、 tm8_interrupt_vector.c 里的內容復制到我們剛才建立好的工程對應的文件里;并把STM8S207R.h這個文件復制到我們工程目錄下,并添加到工程里,這個頭文件是必須的。
大家先下載這3個文件:
led.rar
(5.84 KB, 下載次數: 36)
2016-1-29 23:23 上傳
點擊文件名下載附件
下載積分: 黑幣 -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 -----------------------------------*/
復制代碼
然后編譯程序,成功!
嘿嘿,下面要把實驗板連接到電腦調試了。
不過在連機調試前,要先設置下Debug instrument的Target Settings…,實驗板配套的是ST LINK,所以就選ST LINK就可以了。
還有一個重要的,差點忘了,那就是STM8S小板需要接獨立的外部電源,DC9~12V,插座是內正外負,別搞錯正負極了。
接上電源,板上的D4電源指示燈應該亮起,用USB連接線把ST LINK連接到電腦的USB。
然后點擊DEBUG按鈕,進入仿真調試界面
中間有一個確定窗口需要確定下就可以了。
進入仿真界面后,執行RUN按鈕運行程序,這時候實驗板進入全速運行的狀態,可以看到實驗板上的LD2發光二極管以一定的頻率在閃爍,LD1微亮,這時候順時針旋轉板上的那個電位器,可以發現LD2的閃爍頻率變慢,同時LD1的亮度增強。逆時針旋轉電位器則反之。
OK,至此STM8S的基礎入門到此結束,由于工作繁忙,更深入的了解學習請大家多多探討,這樣才能進步得更快。謝謝~
本工程里的這個ST公司寫的測試程序里有詳細的英文注釋,看看基本都能看懂。中斷函數需要在tm8_interrupt_vector.c里寫,大家注意下就可以了。現在沒有用到什么ST的函數庫,所以感覺像在用C語言開發AVR,差別不大。
作者:
John
時間:
2017-6-28 13:19
小白到此一游,以后會用到的,謝謝分享
作者:
htzsz
時間:
2017-8-17 08:02
想學習STM8,先收藏了,謝謝分享!
作者:
stm8899
時間:
2017-12-26 23:07
學習
作者:
jmabc88
時間:
2018-5-26 23:46
stm8很厲害,但入門難度比較大
作者:
QQ賣萌者
時間:
2018-5-27 09:37
學到了
作者:
L-login
時間:
2018-6-6 22:36
謝謝分享,正好用到,感謝~
作者:
hbthgsli
時間:
2019-7-13 09:57
謝謝樓主分享!
作者:
小刀單片機
時間:
2019-7-13 10:46
謝謝分享,另外B站上正點原子視頻,推薦新手去入門
作者:
hbthgsli
時間:
2019-7-13 10:51
謝謝分享,正好用到,感謝
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
一级做受毛片免费大片
|
国产精品视频免费看
|
日本精品一区二区三区在线观看视频
|
亚洲国产一区二区三区在线观看
|
色视频成人在线观看免
|
在线播放中文字幕
|
亚洲精品视频在线
|
一级欧美
|
国产日韩一区
|
婷婷五月色综合香五月
|
国产精品久久久久一区二区三区
|
国产免费一区二区
|
久久久久免费精品国产小说色大师
|
亚洲精品久久久一区二区三区
|
天天爽网站
|
色婷婷综合久久久久中文一区二区
|
久草中文网
|
a级在线
|
精品国产一区二区
|
国产精品日日做人人爱
|
av黄色在线
|
四虎影视免费在线
|
精品久
|
国产一区二区三区久久
|
国产在线a
|
精品福利在线
|
国产精品久久久久久婷婷天堂
|
神马九九
|
亚洲综合大片69999
|
成年人免费看
|
男女av
|
999免费观看视频
|
精品欧美一区二区中文字幕视频
|
中文字幕在线观看一区二区
|
久久在线免费
|
岛国视频
|
91精品亚洲
|
日韩高清国产一区在线
|
国产精品国产三级国产aⅴ无密码
|
亚洲免费网址
|
国产在线一区二区三区
|