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