新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 牛人業(yè)話 > 怎么學(xué)習(xí)STM32單片機(jī)?看老司機(jī)是怎么說(shuō)的!

怎么學(xué)習(xí)STM32單片機(jī)?看老司機(jī)是怎么說(shuō)的!

作者: 時(shí)間:2017-05-11 來(lái)源:網(wǎng)絡(luò) 收藏

  不要去學(xué)。

本文引用地址:http://m.butianyuan.cn/article/201705/359058.htm

  我不是說(shuō)不好,而是這種為了學(xué)習(xí)單片機(jī)而去學(xué)習(xí)單片機(jī)的思路不對(duì)。

  你問(wèn),如何系統(tǒng)地入門學(xué)習(xí)stm32?

  本身就是一個(gè)錯(cuò)誤的問(wèn)題。假如你會(huì)使用8051 , 會(huì)寫C語(yǔ)言,那么本身并不需要刻意的學(xué)習(xí)。

  你要考慮的是, 我可以用STM32實(shí)現(xiàn)什么?

  為什么使用STM32而不是8051? 是因?yàn)?1的頻率太低,無(wú)法滿足計(jì)算需求?是51的管腳太少,無(wú)法滿足眾多外設(shè)的IO? 是51的功耗太大,電池挺不住?是51的功能太弱,而你要使用SPI、I2C、ADC、DMA? 是51的內(nèi)存太小而你要存儲(chǔ)的東西太多?

  當(dāng)你需要使用STM32某些功能,而51實(shí)現(xiàn)不了的時(shí)候, 那STM32自然不需要學(xué)習(xí),你會(huì)直接去尋找STM32某方面的使用方法。比如要用spi協(xié)議的網(wǎng)卡、要使用串口通信、要使用rtos等等...

  關(guān)于寄存器vs庫(kù)

  我的觀點(diǎn)是:當(dāng)你debug的時(shí)候寄存器很重要,當(dāng)你需要理解芯片工作細(xì)節(jié)的時(shí)候寄存器很重要,當(dāng)你開(kāi)發(fā)的時(shí)候寄存器不重要。如果你沒(méi)有遇到非直接配置寄存器不可的情況,那么就不要直接面向寄存器層面開(kāi)發(fā), 因?yàn)槊嫦蚣拇嫫鏖_(kāi)發(fā)獲得的好處往往抵消不掉這樣做的壞處。 面向寄存器開(kāi)發(fā)程序效率高,但是你需要為了提高0.01%的效率浪費(fèi)10倍、乃至100倍的時(shí)間。 既然ST公司已經(jīng)給你提供了好用的庫(kù),沒(méi)有道理要重新造輪子。

  那什么時(shí)候必須直接控制寄存器?

  第一、某一個(gè)代碼塊調(diào)用非常頻繁。比如你有一個(gè)巨大的for循環(huán),那么這個(gè)for循環(huán)中的每一步操作都應(yīng)該被謹(jǐn)慎的優(yōu)化,優(yōu)化良好就可以獲得更好的性能。這種情況一般常見(jiàn)于圖像處理相關(guān)的代碼中。

  第二、庫(kù)函數(shù)有bug。這個(gè)遇到的概率非常低,但確實(shí)存在。不過(guò)一般來(lái)說(shuō)如果mcu表現(xiàn)出預(yù)料之外的行為, 你首先要想的應(yīng)該是你的代碼寫的有bug,而不是庫(kù)函數(shù)有bug。 如果庫(kù)函數(shù)真的有bug,你去google搜一下,相信你絕對(duì)不是第一個(gè)踩坑的人。

  對(duì)于傳統(tǒng)的電子工程師來(lái)講,使用庫(kù)編程可能會(huì)感到有一點(diǎn)虛,感覺(jué)沒(méi)有腳踏實(shí)地的感覺(jué)。 但如果你寫過(guò)web、寫過(guò)服務(wù)器端代碼、寫過(guò)桌面端代碼的話,你就一定會(huì)理解API、封裝、抽象的意義。



關(guān)鍵詞: STM32

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉