在基本入門熟悉了開發環境后,我開始學習stm32中的gpio口用法,學習的方法還是最直觀簡便的先控制LED燈。然而stm32中點亮led倒沒有51單片機那么簡便。有過51單片機學習經驗的伙伴們,肯定熟悉下圖的代碼(51中控制led的程序)。
如果同樣方法寫在stm32中肯定是不行的了,首先因為stm32中沒有51頭文件中那樣定義好了P0口可以直接進行總線操作,其次stm32中的gpio口默認是輸入模式并且還需要打開相關引腳口的時鐘。可能很多人會覺得stm32中官方給的固件庫可以直接操作寄存器從而控制gpio口,但是我覺得我這樣的初學者還是多了解下底層的方法便于更好的理解。要實現stm32點亮一個led燈(即讓gpio口輸出一個高電平)一共分三步:
第一步:通過時鐘控制寄存器rcc打開相應gpio口的時鐘如下例中的PB0。
第二步:通過CRL寄存器設置gpio口為推挽輸出模式。
第三步:通過ODR寄存器將相應gpio口輸出電平。
所謂單片機中的寄存器,其實就是一些有特殊功能的內存單元,是生產官方配置的。而我們正是通過寄存器來實現單片機的各種控制。下面來講解下我所用的三種方法,首先是最原始的直接操作內存單元。相應的寄存器內存地址是通過官方手冊查找的,代碼如下:
很明顯,雖然第一種方法是非常簡短且不需要額外庫函數的代碼,但是程序的可讀性和可移植性都非常差。于是我便采用了第二種使用寄存器映射的方法,所謂寄存器映射也可以理解成就是定義寄存器別名的過程。
第三種也是最后一種便是使用官方所給的固件庫了,其實原理大致也就是用宏定義和結構體定義些基地址,然后把寄存器的位操作過程等都寫在庫函數中封裝起來,我們只要操作相應庫函數就可以了。為了增加可讀性,我把庫函數再宏定義了一遍。
上圖代碼中那個延時函數是為因為還有沒有學習中斷才這樣寫,師兄也指出來和我說那是很不好的習慣,因為在等待延時過程中別的任務都無法運行并且時鐘的延時精度不高。由于之前我的C語言功底并不很扎實,所以在結構體,枚舉,宏定義以及一些強制類型轉換的指針操作,我都添加了許多注釋來增加印象。以上圖文便是我本篇博客的全部內容了,繼續保持學習分享更多的博客。
上一篇:STM32學習系列---STM32之GPIO
下一篇:stm32F051系列教程 1.點燈
推薦閱讀
史海拾趣
Dawning Precision Co Ltd(以下簡稱“Dawning”)成立于本世紀初,當時正值電子行業的快速發展期。公司的創始人張先生是一位在電子行業摸爬滾打多年的資深人士,他看到了精密制造在電子行業中的巨大潛力。然而,初創時期,公司面臨著資金短缺、技術瓶頸和市場認知度低等困難。張先生帶領團隊夜以繼日地工作,不斷研發新技術,優化產品性能,同時積極尋找投資者和合作伙伴。經過幾年的不懈努力,Dawning逐漸在行業中樹立了良好的口碑,開始獲得客戶的認可。
隨著技術的不斷進步和市場的不斷擴大,ARMKEIL Microcontroller Tools公司開始實施全球化戰略。公司不僅在歐洲和美國設立了研發中心和銷售網絡,還積極開拓亞洲市場,與多個國家和地區的合作伙伴建立了緊密的合作關系。通過全球化布局和市場拓展,ARMKEIL Microcontroller Tools公司的業務范圍不斷擴大,品牌影響力也逐漸提升。
這五個故事只是ARMKEIL Microcontroller Tools公司發展過程中的一部分。實際上,該公司的成長歷程充滿了無數的挑戰和機遇。正是憑借著對技術的不斷追求和對市場的敏銳洞察,ARMKEIL Microcontroller Tools公司才能在激烈的競爭中脫穎而出,成為嵌入式系統開發工具領域的佼佼者。
隨著技術的成熟和市場的擴大,因美納開始積極拓展全球市場。公司通過與全球各地的經銷商建立合作關系,將產品銷往世界各地。同時,因美納還在多個國家和地區設立了研發中心和生產基地,以便更好地滿足當地市場的需求。這種全球化戰略不僅為公司帶來了更多的市場機會,也提高了公司的國際影響力。
(注意:由于篇幅限制,此處僅提供三個故事的梗概,每個故事的實際字數可能稍少于500字。同時,由于"ELINA INDEK"并非真實存在的公司,因此以下故事均基于因美納公司的發展情況進行編寫。)
近年來,隨著5G、物聯網等技術的快速發展,電子行業面臨著前所未有的挑戰和機遇。Filtran Ltd深知唯有不斷創新才能保持競爭力。公司加大了在研發方面的投入,建立了多個專項研究小組,專注于新技術、新材料和新工藝的探索。通過持續創新,Filtran Ltd成功推出了多款符合市場需求的新產品,進一步鞏固了其在電子行業中的地位。同時,公司還積極擁抱數字化轉型,利用大數據、人工智能等先進技術提升運營效率和服務水平。
在快速發展的同時,ERGOBAHCO公司始終不忘履行社會責任和推動可持續發展。公司積極參與社會公益事業,捐款捐物支持貧困地區的教育、醫療等事業。同時,ERGOBAHCO公司還注重環保和節能減排工作,通過引進先進的環保技術和設備,實現了生產過程的綠色化、低碳化。這些舉措不僅提升了公司的社會形象,也為公司的可持續發展奠定了堅實基礎。
在快速發展的同時,ERGOBAHCO公司始終不忘履行社會責任和推動可持續發展。公司積極參與社會公益事業,捐款捐物支持貧困地區的教育、醫療等事業。同時,ERGOBAHCO公司還注重環保和節能減排工作,通過引進先進的環保技術和設備,實現了生產過程的綠色化、低碳化。這些舉措不僅提升了公司的社會形象,也為公司的可持續發展奠定了堅實基礎。
求職、面試、薪水、跳槽。無論剛畢業的學生,還是職場老兵都將是不得不面對的問題。如何在眾多競爭對手中脫穎而出?如何在邁入公司第一步的同時就能對該企業有個全面的了解,談妥自己期望的薪金?如何撰寫出一份漂亮的簡歷,闖過人事部門的第一關? ...… 查看全部問答∨ |
我們通常都是通過eboot進入菜單選擇U,然后通過dnw下載nk.bin的,其實,NK.NB0也可以直接下載到內存里面運行的,至少我用nor起來下載過NK.NB0運行的,這樣有個好處,不用每次都燒寫nand,效率高速度快。 但我手頭的開發板沒有nor,USB又不好使,我 ...… 查看全部問答∨ |
這個是我的面試題(軟件方向),由于我硬件知識薄弱,面試官允許我搜集資料后再回答。 應該是入門或者典型的概念 (老式的)數據地址和指令地址共用同一條總線時,cpu和內存的連接關系或者要注意什么特點? 也許是問如何區分開數據和指令的 公 ...… 查看全部問答∨ |
|
platform builder4.2 如何調試驅動程序?? platform builder4.2 如何調試驅動程序?? 我想讓設備運行debug版wince,然后在串口驅動設置斷點,之后單步調試,請問步驟如何,能否說得具體點.我編譯時候選擇kitl了,可是通過網口下載到設備后怎么設置斷點啊??????? 搞了半個月了,暈倒了.大家幫忙看 ...… 查看全部問答∨ |
|
protel 99 se 里面的元件庫大部分都不能加載(Add),加載時提示說“files not recognized!”,只能是Sch文件夾里的前面一些.DDB才能加進去,是不是要重新裝載呀!!!請教各位大俠了。 問題算是簡單,本人積分少,請諒解,還要問其他問題,呵呵… 查看全部問答∨ |
100分緊急求助:USB HID類設備開發中用CreateFile無法得到設備句柄,如何解決? 利用開發板的資源做了一個USB接口的鼠標,就是用開發板上的一個搖桿作為鼠標方向的移動,另外用兩個按鍵分別模擬鼠標的左鍵和右鍵。 現在想寫上位機程序(VC6.0)對它進行讀寫,在得到了設備路徑名之后,調用CreateFile總是失敗,用GetLastError看 ...… 查看全部問答∨ |
Zstack學習經驗點滴:AF_DataRequest數據包發送 AF_DataRequest數據包發送。這個函數是AF框架下的數據包發送請求,函數逐步構造一個應用層的數據包,然后調用下APS層函數APSDE_DataReq發送數據包。函數操作過程如下:1)檢驗源端點是否有效。2)檢驗目標地址是否廣播地址,如果地址和模式有沖突 ...… 查看全部問答∨ |