最初從單片機(jī)學(xué)習(xí)整個(gè)計(jì)算機(jī)系統(tǒng)是個(gè)非常正常的階梯學(xué)習(xí)方法。因?yàn)橹钡浇裉?,?jì)算機(jī)系統(tǒng)的那些事,也沒逃離這個(gè)最基礎(chǔ)的架構(gòu)??上耶?dāng)年直接跳過了這個(gè)過程,直接從intel 486學(xué)起的,那時(shí)每天帶著無數(shù)的疑問在艱難的前行。
單片機(jī)不一定要學(xué)習(xí)51,其實(shí)隨便選一家都是一樣的。從實(shí)際出發(fā)要選,便宜的,外圍器件少的,里面功能的,所以為大家挑選了STM8L。
STM8L是個(gè)8位單片機(jī),我在論壇中的確看到一些小兄弟在問8位是怎么回事?我至少欣慰這位兄弟確實(shí)在思考。通常我說的8位是指CPU計(jì)算時(shí),具體點(diǎn)說,不如說加法,是指兩個(gè)8位二進(jìn)制數(shù)相加的能力。同理,32位,就是32位二進(jìn)制數(shù)相加。
另外,也是最難的部分,這8位單片機(jī)的尋范圍可不一定是8位的,這點(diǎn)要注意。尋址范圍,聽不懂?不如說是地址范圍。想象一下,8根地址線,每根線上用電壓高或者低表示1和0,那么這8根線,一共能表示多少個(gè)數(shù)字,你可以一個(gè)個(gè)數(shù),當(dāng)然最好是計(jì)算,2的8次方種組合。那也就算256個(gè)數(shù)字,每個(gè)數(shù)字表示一個(gè)地址訪問一個(gè)字節(jié)的數(shù)據(jù),也就只能訪問256個(gè)字節(jié)。這個(gè)空間太小了。所以意法半導(dǎo)體是不會(huì)如此設(shè)計(jì)的,那就增加地址線,增到16根地址線,2的16次方,等于65536個(gè)地址。我記得有門課程《計(jì)算機(jī)原理》,本是本很實(shí)用的書,可惜老師講的太爛,毫無吸引力。
65536是64KB,對(duì)于STM8L151K4T6,擁有16KB flash,以及2KB ram是足夠?qū)ぶ妨?。單片機(jī)的整個(gè)地址空間通常很簡單,就是一個(gè)連續(xù)的線性空間0x0000~0xFFFF。只是其中分散著一塊塊的內(nèi)存,有的是flash,有的是ram,有的是register set,有的是ROM。僅此而已,別以為有多么復(fù)雜。
Flash和Ram是存儲(chǔ)代碼和數(shù)據(jù),包括堆棧。
Registers就是軟件控制外設(shè)的唯一的接口。寫驅(qū)動(dòng)程序就是和這些寄存器打交道。每家芯片的寄存器的設(shè)計(jì)都不同,你需要閱讀廠商的大量資料,一般是英文的。
慶幸的是ST發(fā)布了標(biāo)準(zhǔn)外設(shè)庫函數(shù),使你不再需要關(guān)心寄存器細(xì)節(jié)。但如果你是單片機(jī)初學(xué)者,我建議閱讀標(biāo)準(zhǔn)外設(shè)庫代碼,以及閱讀芯片手冊(cè)。當(dāng)你閱讀到一定量以后,你會(huì)找到市面上所有芯片的共性,以及明白他們?cè)O(shè)計(jì)的優(yōu)缺點(diǎn)。做到心中有數(shù),甚至不看手冊(cè),就能八九不離十的猜到任意芯片的寄存器設(shè)計(jì),這就到了,驅(qū)動(dòng)程序最高境界。
現(xiàn)在學(xué)習(xí)STM8,由于ST已經(jīng)提供標(biāo)準(zhǔn)驅(qū)動(dòng)庫函數(shù),對(duì)C語言能力要求已經(jīng)很弱了,只要上過大學(xué)C語言課程,都可以進(jìn)行編程。
但是我建議大家把C語言學(xué)深點(diǎn)。它的核心就是指針,玩轉(zhuǎn)指針,就玩懂了C語言。它的其他功能和其他語言沒有任何差別。只是邏輯控制而已。能把C的指針真正弄懂,你還不得不學(xué)習(xí)一下機(jī)器語言,萬變不離其宗。見多識(shí)廣,千萬不要懷疑自己大腦的記憶能力,也不要認(rèn)為多學(xué)會(huì)學(xué)混,我的經(jīng)驗(yàn)是,學(xué)得越多,只會(huì)讓你你看得更明白。
STM8系統(tǒng)的機(jī)器指令的長度是8位的。固定長度,你可以大致看看每個(gè)Bit是什么意思。這都是工程師精確設(shè)計(jì)的,也是人設(shè)計(jì)的。別人能做到的,你為什么不行?多問問自己。
機(jī)器指令的介紹,一定會(huì)花大篇幅介紹尋址。你可以想象,機(jī)器世界里,你的資源,其實(shí)只有內(nèi)存和寄存器。內(nèi)存是靠地址的,才能知道訪問的是哪一塊,而寄存器就是靠唯一的名字訪問,當(dāng)然外部設(shè)備的地址,也是靠地址訪問。所以可以推斷,機(jī)器指令手冊(cè),必須介紹,如何把寄存器的內(nèi)容搬移到內(nèi)存,或者如何把內(nèi)存特定地址的內(nèi)容搬移到寄存器。更有可能你是期望把直接的一個(gè)數(shù)字放入寄存器。等等的各種組合。不是任意一條連線都是被允許的,一般都不會(huì)支持直接把一條內(nèi)存,搬移到另一條內(nèi)存。中間需要寄存器暫存一下。等等的規(guī)律,你讀多了自然會(huì)懂。
不過上手STM8不需要懂這些,一樣可以玩。它內(nèi)置bootROM,一啟動(dòng),當(dāng)跳進(jìn)你的main函數(shù)時(shí),該做的初始化已經(jīng)完成,你直接可以開始操作GPIO了,clock如果沒有額外需要,不需要配置,內(nèi)置的16MHz的晶振,默認(rèn)8分頻,2MHz用來跑core,也就是運(yùn)行你的程序。STM8L151K4T6最小系統(tǒng)板,我會(huì)提供一個(gè)最小的工程文件,里面包含一個(gè)操作GPIO的代碼,也就是讓開發(fā)板上的 LED燈點(diǎn)亮,并且閃爍?;镜倪壿嬍抢?,拉低交替,中間加延時(shí),這里的延時(shí),用的最簡單的的死循環(huán)delay,代碼邏輯簡單,就是不夠環(huán)保。死循環(huán)是靠電耗換來的,但是這種代碼有時(shí)候也是必要的,上MHz的CPU,運(yùn)行每條指令都是ns級(jí)別的,如果你需要的delay也是ns級(jí)別的,那么死循環(huán)確實(shí)就是最好的選擇。
-
單片機(jī)
+關(guān)注
關(guān)注
6067文章
44982瀏覽量
650313 -
STM8
+關(guān)注
關(guān)注
18文章
392瀏覽量
57847
原文標(biāo)題:怎樣玩轉(zhuǎn)STM8單片機(jī)
文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄

STM8單片機(jī)開發(fā)環(huán)境由什么組成
stm8單片機(jī)例程分享
STM8_單片機(jī)原理與實(shí)踐_劉海成/葉樹江/郭強(qiáng)編著
STM8單片機(jī)的電路原理圖詳細(xì)資料免費(fèi)下載

STM8單片機(jī)如何進(jìn)行IAR工程的建立

STM8單片機(jī)的串口UART資料免費(fèi)下載

手把手教你STM8單片機(jī)標(biāo)準(zhǔn)庫移植

stm8單片機(jī)例程下載鏈接

評(píng)論