主頁 > 軟體設計 > 為什么我學51單片機很順利,學STM32卻一頭霧水?

為什么我學51單片機很順利,學STM32卻一頭霧水?

2021-09-29 08:24:53 軟體設計

五年懂行,十年稱王,

當初自學轉行的我,怎么也沒想到自己能從事單片機開發10年,

王不敢稱,還算懂行,

10年前我剛畢業,即將面臨社會毒打,我慌得一批,

我學的是電氣工程,后面主修電梯,

畢業后和大家一樣,感徑訓是啥也不會,啥也不是,最悲哀的對本專業還很排斥,

那個時候看得不遠,就看實習的那些師兄前輩們,完全打消我從事這個行業的欲望,

工資低、責任大、體力活、24小時待命,

相信一個正常的年輕人都不會去選擇這樣的作業,除非生活所迫,

所以,我虎軀一震,決定大膽一次,選擇了自學轉行,

可能是上天比較眷顧勇敢和有自己想法,又肯努力的人,再加上10年前門檻相對沒那么高,

我只學了STC 89C52,也就是51單片機,然后做了個智能小車就找到作業了,

中間也很坎坷,至少被20幾家公司拒絕過,從絕望到不服輸的辛酸史今天先不提,

下面,我將通過我的個人經歷,來分享下我當初是如何從51單片機過度到STM32的,希望有同樣煩惱的認真看完,絕對能讓你受益匪淺,

我第一份作業是做單片機軟體工程師,當時也沒什么專案經驗,老大自然也不會給我參與什么新專案開發,

我每天的作業就是維護公司老產品,改改代碼,給定制化的客戶升級下功能,

改代碼是一件非常痛苦的事,比自己重新寫還痛苦,因為要去理解別的工程師的思維,

不過,這是一個工程師必備的技能,現在回想這幾年,成長最快的時候就是看那些大佬寫的代碼,閉門造車,只會讓你成為井底之蛙

公司的產品大多數都是用stc 51單片機做的,還有就是NXP的ARM7單片機,

剛從51單片機過渡到ARM7的時候,那段時間確實掉頭發更嚴重了,太特么燒腦了,

還好,開發模式基本跟51單片機相同,都是通過配置暫存器使用,只不過暫存器要復雜也多很多,我記得當時用的好像是lpc2103,

還好只是改代碼,如果讓我看資料手冊去配置暫存器,估計我也做不出來,

大概做了3,4個月,我基本上上手了,原來改個功能要半個月,現在改個功能只需要1周左右,

那個時候就有點飄了,單片機開發也不過如此,

后來,跟同事相處多了,也熟了,有個同事介紹了一個外單問要不要一起做,

當時,我想跟著這些老油條做,即便不掙錢積累點經驗也好就答應了,

整個專案需要用到2個單片機,一個51單片機做屏顯示,一個做主控,主控這邊需要一個類似于ARM7這種資源豐富點的單片機,

這個專案我非常積極,主動要求做作業量最大的主控程式,然后錢平分,同事聽到連忙點頭叫好,

硬體選型是他選的,他推薦我們用STM32的單片機,開發起來挺爽,我也不懂,完全聽他安排,反正這個專案我完全沖著學東西去的,哪怕是自己虧點錢

在同事設計電路的時候,我就同步開始研究STM32單片機,最好等硬體回來就能開始除錯功能,

下圖是我最終寫好的代碼,所有功能代碼都寫在main函式里,沒用單獨函式單元,現在看著真的是太渣了,

學習一款新單片機最好的方式就是買一個開發板,所以我自掏腰包買了一個開發板,

那個時候開發板還沒現在這么完善,只有每個外設使用的例程,沒有配套視頻教程,

開發板拿到以后,我就開始從最簡單的GPIO開始學習,

但…當我打開GPIO工程的那一刻,我懵逼了…這是什么鬼?用一個IO口怎么都這么復雜?

到處都是結構體,指標,回呼函式,

STM32和51單片機代碼架構不一樣,雖然底層都是配置暫存器去使用單片機外設,但STM32不用我們自己配置暫存器,而是呼叫官方韌體庫直接打開,

所以,原本是學STM32單片機的,最后變成了學韌體庫,學會韌體庫你就學會了STM32

但是想要學韌體庫,需要你有一定的代碼理解能力和水平的基礎鋪墊,比如說你要熟悉指標、結構體、列舉,

很多人心急,一在開發板上學完51單片機,馬上就開始學STM32,連專案都不做一個,有些甚至直接學STM32,

導致在學習STM32的時候舉步艱難,每學一步都碰到各種問題無法解決,

這也是為什么我們無際單片機編程要求學員先學51單片機,再做一個專案,做完再學STM32的原因,

學習這個就像我們玩游戲一樣,先升級搞裝備,再挑戰boss,

我在學習STM32之前已經接觸過幾個專案,所以至少保證了韌體庫代碼都能看得懂,

我一邊改開發板的例程,一邊在開發板上做實驗,

我會舉一反三去做實驗,比如說開發板是配置PA0,那我會改成PB0、PC0試試,

其他外設同理,開發板開啟定時器1,那我會改成定時器2,

我只研究我這個專案用到的外設,GPIO、定時器、串口、NVIC、DMA、RTC、ADC,

其它沒用到的我看都不去看,

大概花了半個多月的時間,我就把這些外設用起來了,用熟了以后感覺太爽了,比51單片機和LPC爽多了,

用熟韌體庫,甚至連資料手冊都不用看就能把外設用起來,更別說看暫存器了,

專案時間也緊,沒時間給我去研究,

時隔多年回想起這件事,我都感覺誤打誤撞走了捷徑,我很慶幸當初沒深入去研究暫存器,沒深入去看資料手冊,不然走的彎路能繞地球一周,

因為看了也是白看,根本看不懂,還會打擊自己自信,有現成代碼為啥不用?

STM32單片機外設用起來以后,后面基本上就沒怎么研究過單片機內部的東西了,剩下的時間基本就是完成產品的功能,

所以,學習STM32最好的方法就是通過專案去學習,

等你做開發幾年以后,相信你也會明白,雖然我們從事單片機程式開發,但真正的核心不是單片機,而是你的編程水平和思維,

當你連自己寫代碼實作功能都困難的時候,先不要去想如何把代碼寫的更好,而是先實作,

等你實作了以后,再想代碼怎么能寫得執行效率更高、可移植性、可擴展性更好?

執行效率講求的演算法,可移植性和可擴展性講求的是程式架構,

這塊,沒經歷過幾個中大型專案的錘煉是很難領悟的,

程式架構這塊,我在19年錄制了一套比較系統的教程,目前看來可能是實用性比較強的,

教程講了指標、結構體、回呼函式、任務管理、佇列這些高級的應用,

也可以直接套在自己產品上,至少能提高30%的開發效率,

教程都是開源的,不用花1分錢,跟無際單片機編程拿就可以了,

最后總結:

  1. 學習STM32最快的方式就是通過專案去學習,
  2. 不用每個外設都學,只需要學常用的外設,剩下專案用到再去學,
  3. 把STM32當作一個工具使用,外設會用就行,

Ok,今天就寫到這里,寫寫刪刪,不知不覺肝了2個小時,如果對你有幫助,麻煩給我安排個三連吧^^!

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/303926.html

標籤:其他

上一篇:Python小白福音,你缺的也許只是一個學習路線|Python技能樹測評

下一篇:織夢CMS免費已成夢,商用5800元一個站你覺得貴嗎?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more