上課不聽(tīng)講下課來(lái)補(bǔ)習(xí)系列之-玩轉(zhuǎn)單片機(jī)STM8(一)
最初從單片機(jī)學(xué)習(xí)整個(gè)計(jì)算機(jī)系統(tǒng)是個(gè)非常正常的階梯學(xué)習(xí)方法。因?yàn)橹钡浇裉?,?jì)算機(jī)系統(tǒng)的那些事,也沒(méi)逃離這個(gè)最基礎(chǔ)的架構(gòu)??上耶?dāng)年直接跳過(guò)了這個(gè)過(guò)程,直接從intel 486學(xué)起的,那時(shí)每天帶著無(wú)數(shù)的疑問(wèn)在艱難的前行。
單片機(jī)不一定要學(xué)習(xí)51,其實(shí)隨便選一家都是一樣的。從實(shí)際出發(fā)要選,便宜的,外圍器件少的,里面功能的,所以為大家挑選了STM8L。
STM8L是個(gè)8位單片機(jī),我在論壇中的確看到一些小兄弟在問(wèn)8位是怎么回事?我至少欣慰這位兄弟確實(shí)在思考。通常我說(shuō)的8位是指CPU計(jì)算時(shí),具體點(diǎn)說(shuō),不如說(shuō)加法,是指兩個(gè)8位二進(jìn)制數(shù)相加的能力。同理,32位,就是32位二進(jìn)制數(shù)相加。
另外,也是最難的部分,這8位單片機(jī)的尋范圍可不一定是8位的,這點(diǎn)要注意。尋址范圍,聽(tīng)不懂?不如說(shuō)是地址范圍。想象一下,8根地址線,每根線上用電壓高或者低表示1和0,那么這8根線,一共能表示多少個(gè)數(shù)字,你可以一個(gè)個(gè)數(shù),當(dāng)然最好是計(jì)算,2的8次方種組合。那也就算256個(gè)數(shù)字,每個(gè)數(shù)字表示一個(gè)地址訪問(wèn)一個(gè)字節(jié)的數(shù)據(jù),也就只能訪問(wèn)256個(gè)字節(jié)。這個(gè)空間太小了。所以意法半導(dǎo)體是不會(huì)如此設(shè)計(jì)的,那就增加地址線,增到16根地址線,2的16次方,等于65536個(gè)地址。我記得有門(mén)課程《計(jì)算機(jī)原理》,本是本很實(shí)用的書(shū),可惜老師講的太爛,毫無(wú)吸引力。
65536是64KB,對(duì)于STM8L151K4T6,擁有16KB flash,以及2KB ram是足夠?qū)ぶ妨恕纹瑱C(jī)的整個(gè)地址空間通常很簡(jiǎn)單,就是一個(gè)連續(xù)的線性空間0x0000~0xFFFF。只是其中分散著一塊塊的內(nèi)存,有的是flash,有的是ram,有的是register set,有的是ROM。僅此而已,別以為有多么復(fù)雜。
Flash和Ram是存儲(chǔ)代碼和數(shù)據(jù),包括堆棧。
Registers就是軟件控制外設(shè)的唯一的接口。寫(xiě)驅(qū)動(dòng)程序就是和這些寄存器打交道。每家芯片的寄存器的設(shè)計(jì)都不同,你需要閱讀廠商的大量資料,一般是英文的。
慶幸的是ST發(fā)布了標(biāo)準(zhǔn)外設(shè)庫(kù)函數(shù),使你不再需要關(guān)心寄存器細(xì)節(jié)。但如果你是單片機(jī)初學(xué)者,我建議閱讀標(biāo)準(zhǔn)外設(shè)庫(kù)代碼,以及閱讀芯片手冊(cè)。當(dāng)你閱讀到一定量以后,你會(huì)找到市面上所有芯片的共性,以及明白他們?cè)O(shè)計(jì)的優(yōu)缺點(diǎn)。做到心中有數(shù),甚至不看手冊(cè),就能八九不離十的猜到任意芯片的寄存器設(shè)計(jì),這就到了,驅(qū)動(dòng)程序最高境界。