03.03 stm32達到什麼程度叫精通?

雍保國


我們正在招聘精通STM32單片機的高級工程師,但是很遺憾,目前來面試的都很少能夠達到我們的標準,目前給到的薪資是25k-30k,座標北京,下面說一下我認為的精通。

  1. 對stm32的內部功能模塊非常熟悉,舉個例子,如果我們的產品需要對這款芯片進行加密,你可以提供什麼方案,需要操作那些寄存器,流程是什麼,批量生產是否可行。

  2. 可以快速定位問題並提出解決方案,舉個簡單的例子,研發中的一款板子,串口不輸出數據了,如果查找問題,從哪裡入手,是否能夠從蛛絲馬跡中抽絲剝繭,找到本質的問題。

  3. IAP升級是進階必須掌握的,如何編寫bootloader,bootloader和app之間在flash中如何分區,燒寫發生錯誤了,如何處理,flash是否夠用,這都需要你考慮

  4. 問個簡單的問題吧,如果可以回答,歡迎來我們公司試試面試,如何修改stm32程序運行的起始地址。


編程鎮魔司



不請自來,作為一名長期使用STM32單片機進行開發的老司機,來回答一下這個問題。

首先、掌握單片機的硬件電路設計是基礎

單片機電路設計是基礎,儘管現在單片機已經進化到SoC的階段,大部分常用功能模塊單片機已經集成了,比如、USB、CAN、LAN、LCD、Camera等等,但是仍然需要搞清楚電路邏輯和代碼之間的接口邏輯,比如、模塊的地址、如何給模塊上電、斷電、復位、打開/關閉等。如果你的團隊軟件和硬件是分開的,那麼你的電路設計需要輸出一個軟硬件接口文檔給到軟件工程師,通過這個文檔,軟件工程師能夠順利實現Driver層代碼設計。


其次、掌握單片機編程是靈魂

如果說硬件是一個產品的執行機構,那麼軟件程序就是一個產品的大腦,代表了一個產品的靈魂,我們通常說一個產品不好用不人性化,最多的原因是軟件設計方面的問題,硬件也有,但是相比軟件方面的設計缺陷要少的多。因此,一個良好的單片機軟件設計是一個產品的重中之重。

那麼如何STM32軟件編程呢?採用倒推來羅列一下:

  1. 掌握C語言程序設計,主要用到的是C語言,掌握C語言設計必不可少。

  2. 掌握軟件編程開發環境的使用方法,比如Keil和IAR的集成開發環境,通常我們代碼就是在集成開發環境中編寫的,包括代碼編寫、編譯、調試等等。

  3. 掌握軟件調試方法,可以說軟件調試佔據了軟件開發絕大部分時間。調試器的熟練使用是軟件代碼排除Bug的利器。通常語法方面的錯誤編譯器在編譯階段可以給我們提示,不符合C語言語法就編譯不過去。但是代碼編譯過並不代表就符合實際項目需求,比如邏輯上是否正確、時序上是否滿足要求、指針有沒有越界等等問題必須在代碼實際運行的時候才會表現出來。Bug的定位分析,通常需要分析軟件執行的過程和時序,調試器進行單片跟蹤調試就成為必不可少的利器。

調試工具可以使用集成開發環境自帶的調試器配合ST出品的ST-link系列進行。

第三、根據實際項目需求進行選型並編程實現項目需求是目的

掌握了硬件和軟件設計,可以根據項目需求進行項目開發了。根據項目原始需要說明文檔並對原始需求說明文檔進行分析,輸出可以滿足項目需求的初步的設計文檔。這其中就包括單片機選型,軟件設計等。選擇性能過剩的單片機,必然會帶來成本的增加。當然這不是定死的條件,通常考慮性能、成本、公司的歸一化採購等等問題。

最後、高手進階永遠在路上

高手分為狹義上的高手。

狹義上的高手,比如你就只是想成為,一個harder或者coder,那麼你只需要學習硬件電路設計技術即可,比如,EMC/EMC、高速電路設計和電路穩定性等,或者掌握熟練掌握C語言編程技術、編程算法、嵌入式系統編程等等。

廣義上的高手會再進一步,瞭解具體領域的發展動態,比如,機器人、無人機、機器學習等等,並根據領域的發展、新事物的出現補充新的知識。


嵌入式屆


我這有這麼個需求。

stm32f407的板。

2個485,2個232,1個iic,一個wifi,一個網口,3個io控制繼電器。

要求:

一,可以隨意安裝傳感器,當然需要根據接口,不能iic的設備接到485上,因為每個客戶需求不一樣,可能需要安裝4個傳感器,也有可能安裝10個。可以通過設置來解決。

二,可以通過任意接口進行調試,比如需要設置參數,可以通過網口遠程設置,或者wifi近距離調試,或者485等接口設置。

三,自動切換網絡,網口優先,wifi次之,最後是dtu。

四,手動恢復出廠設置,包括app。

五,自動網絡升級,升級失敗自動恢復到原app。

這第五點該怎麼弄?


拱霸


不清楚什麼程度叫做精通,本人用stm32已經10年,涉及f0,f1,f4,接口涉及spi,usart,i2c,can,sdio,軟件涉及彙編,ucos項目中代碼量二級優化在無大於64字節的const下編譯後bin超256k,項目需求都能滿足,滿足不了的也通過別的方式實現。但是我覺得我不敢說精通,平時遇到問題還是會查閱手冊還有上網查找解決方法,還好這十年使用遇到的問題都能解決掉。


添添_380


既然談到了精通,那就要看看精通是什麼意思。我們可以在網上搜索一下精通的含義。

我們看到精通的基本解釋,就是透徹理解並能熟練掌握,主要包含兩個方面,一個是透徹理解,另一個是熟練掌握,簡而言之,就是理論和實操都得很牛。那接下來我們就把這兩個概念套入到STM32單片機上。

其一就是要透徹理解STM32的理論知識,比如STM32的存儲器和總線構架,STM32各個系列芯片所包含的外設功能,像是時鐘,GPIO以及複用,中斷,DMA,ADC,DAC,各種高級基本通用定時器,PWM,看門狗,FSMC,SDIO,USB,串口,IIC,SPI,CAN,以太網控制器等等,等等吧。你首先得知道STM32這個單片機,能夠提供給你什麼樣的工具,以便來解決你實際項目開發中所遇到的各種問題,正所謂水來土掩,兵來將擋,如果你連手下有什麼將領都不知道,那必敗無疑。

其二就是熟練掌握STM32的使用,也就是實操部分。理論知識我們可以通過閱讀各種書籍,技術文章或是ST官方的芯片手冊編程手冊等來加深我們對STM32的理解和認識。那麼實操部分想要達到熟練的程度,就要具備非常多的實戰項目經驗了,一個好的將軍一定要在真刀真槍的實戰中來磨鍊,來培養。所以你所具備的實際項目經驗是考核你是否真正精通STM32的一個重要依據。

如果說真能達到精通的層次,還是一定要理論和實操,雙劍合璧融為一體。其實單片機開發非常考驗技術人員邏輯思維能力,以及數據抽象能力。同一個項目,不同的數據結構,不同的算法,最終到達的效果可能有天壤之別。而這種能力,也只有在真刀真槍的實戰中才能得到鍛鍊和提升。


超子說物聯網


要談到精通,就必須要對這個片子的本身及其相關部分都有一定的瞭解,簡述如下。

1.STM32是基於ARM的單片機系列,因此,對於其核心ARM的體系結構及編程模型必須有所瞭解。

2.作為一個ARM系列,必須對系列產品的特色有所瞭解,對各個型號的基本配置做到熟悉,以便應用方案選型時能遊刃有餘。同時也要對各種相關品牌的類似產品有個對比認識,各自優缺點分別是什麼。

3.對於系列產品的內部外設及常用接口熟悉,各個模塊的應用有所瞭解。

4.應用開發過程所涉及到的產品生態有所瞭解,供應渠道,價位,技術支持等有所瞭解。開發工具,編譯調試工具鏈,實時內核及各種服務移植熟悉。常用庫的熟練使用等。

5.量產相關固化方式,固件校驗與加密,問題分析與解決,產品缺陷等等。

以上基本上可以支撐一個STM32中級工程師。但作為非原廠或者一級代理,幾乎不會有STM32高級工程師或專家這種提法,嵌入式應用領域做到高級,一定不會拘泥於平臺,而是做到超脫。因為作為應用者,單純弄一種平臺永遠是坐井觀天,成長不起來的。


夏夏65246721


精通stm32只能算做是工程師的入門 無論你是用ST還atmel那一家的芯片 都只是提供了一個平臺而已 設計最核心的是編程思想和算法 算法是機器的靈魂 就好比人類的思想。 我舉個例子 假如你做一臺機器人 硬件部分大同小異 但是你想讓這個機器人智能化 會思考 會學習就要靠我們人類編寫的核心算法了。機器越智能設計人員的水平就越高。

下面我說一下怎麼才算精通了stm32

精通stm32你必須要先精通c語言,我碰到很多剛畢業的學生都自稱精通c語言,但是一問指針和結構體就不會用了,而指針和結構體的結合使用又是c語言的精髓,學習結構指針有個很好的辦法就是去看ST提供的標準庫 看裡面的寄存器映射,熟練應用了結構體和指針寫程序的時候能讓你事半功倍。

掌握了c語言然後就是開始學習stm32的操作,最基本的要熟悉的就是stm32的時鐘結構 ,io操作 定時器應用 adc dma和各種的通信接口. 就是芯片手冊上寫到的stm32外設的都要熟練應用 因為stm32可以做的項目太多了 不同的項目可能需要用到不同的外設 例如電池供電的項目要做低功耗 你要考慮stm32的電氣參數 stm32L系列的選型。 控制bldc電機需要用到高級定時器等。 只有把這些所有的外設都熟練掌握了 做項目的時候用到那個外設都能輕鬆應對 這才算是是你精通了stm32。寫程序的時候庫操作和寄存器操作結合使用效率會更好。

精通了stm32,各種外設沒有問題了 剩下的才是真正考驗水平的時候。程序框架的設計 程序穩定性 出錯機制的設計 算法的優化等 做設計這條路 進無止境!




coolwheel


精通stm32這個描述是有明顯邏輯問題的。對於這個問題分學生簡歷或者工作簡歷來說有那麼一點點意義。

stm32作為一款芯片代表的範疇和意義是很大的。第一層,stm32作為意法半導體的主流產品,產品本身包含arm指令,封裝,開發工具設計等相關產業鏈。所以第一層次的精通是從芯片設計和應用本身,這是對於芯片開發廠商的研發人員來說。

第二層,很多公司利用stm32做產品應用對應用的熟練程度和方向是不一樣的。比如,有用stm32做開發板的廠家,移植操作系統和每個外設的例程是重點工作,大而全但不精。有些廠家僅僅用stm32來做串口服務器,那對於串口這個外設本身的應用包括中斷,查詢當時的應用開發,軟件架構的設計等等,側重點是不一樣的。

因此,對於精通stm32這個宏大的話題來說,對於學生簡歷側重對基礎知識比如c 語言的瞭解和外設的簡單應用。對於從業人員精通的概念應該為用stm32做了多少項目,對於技術應用的理解多於對stm32本身。說到底stm32就是個單片機,屬於嵌入式開發範疇。


軟悟漫談


你所說的精通應該是個哲學問題。所謂知識面越窄約覺的自己越精通。大抵都會回到這個問題上。拋開別人的看法不講。如果你學了兩個月單片機,那你會操作io,會用uart那你肯定覺得自己已經精通了。同理你用了十幾二十年的單片機,別人問你單片機用起來是不是很精通,我覺得你肯定會心虛的回答。還行吧,不算精通。所以我覺得這個問題拿出來說沒什麼意義。


userSong


給你一個項目需求,你能給我畫出系統的框架,用什麼技術方案實現,時間計劃表能夠列出來,技術難度能夠說清楚,就可以。我們這不需要你很熟悉寄存器,主要看項目能力,會用才是最關鍵的


分享到:


相關文章: