一個應用軟件程序員的單片機STM32零基礎入門

爲何開始考慮搞嵌入式開發?

近5年來,從雲計算、大數據到機器學習、AI,各類新潮的技術概念一波~~接一波。html

做爲一名好奇心旺盛的軟件程序員,每個技術概念流行起來都會去湊湊熱鬧。程序員

但,在個人技術棧裏,一切開發出來的軟件都須要經過PC、手機才能進行人機交互。編程

怎麼破?搞嵌入式開發!windows

好幾年前,一個在搞嵌入式開發的朋友,給我安利了嵌入式開發的知識,因爲一直在忙於工做,沒有真正的認真接觸,直到今年,本身創業,才認真考慮嵌入式是否可以爲本身帶來新的機遇?機器學習

選擇STM32

剛開始,個人朋友推薦了樹莓派做爲我入門的開發板。ide

樹莓派,能夠安裝操做系統,價格適中,功能完善,幾乎就是一臺低性能的小電腦,用於熟悉各類引腳功能、把玩經常使用傳感器設備很是方便,還能夠很是廉價的搭建Linux操做系統,很適合編程初學者搭建Linux開發環境。函數

可是它並不能學習到真正的嵌入式開發的知識。相對PC來講,它很是便宜,可是作嵌入式產品,它的功耗、體積和價格都過高。工具

向朋友請教後,決定選擇一款真正的單片機開發板來學習嵌入式開發。性能

在網上查找資料,瞭解到目前流行的單片機有學習

  • 51系列:經典,有不少書籍和課程都是圍繞51系列寫的
  • AVR:Atmel公司的新型單片機,聽說是用來替代51的
  • STM32/STM8:ST公司的ARM內核的單片機
  • STC51:國產,深圳宏晶公司的產品,聽說是AVR和51的結合體

其中我選擇了STM32。緣由以下:

  1. 在技術論壇上看到,51雖然經典,可是確實是有點過期了,技術指標和功能都比不上STM32
  2. STM32性價比高,功能多,可是價格卻依然很便宜,最小系統板相比其餘單片機板子比都是很便宜的。
  3. 資料足夠多。不過也看到有人詬病資料太複雜,由於STM32提供的功能確實多,學習的內容天然就多了不少,好比時鐘就有5個,比51複雜點。
  4. 完善的IDE和庫。到目前爲止,這是我認爲STM32最方便的地方,也是真正可以零基礎入門的緣由。官方提供基於Eclipse的IDE、HAL硬件抽象庫(C語言),在徹底沒學過單片機原理的前提下,稍微看看HAL庫,就能作一些簡單的小實驗。(要知道,大多數51單片機教程裏,是要先學習一點寄存器知識以及彙編語言知識才能真正動手的)。
  5. 大部分單片機的開發環境在windows下很方便,可是在OSX下不多有好用的IDE和調試軟件,可是ST官方就提供了跨平臺的 all-in-one 開發工具。

動手

訪問ST公司的官方網站。https://www.st.com

順便說一下,單片機的更新速度沒有軟件領域那麼快,所以網上的技術資料沒有軟件方面的多,而且更新速度也不及時,可是碰巧ST公司這兩年更新了不少內容,好比STM32CubeMX、STM32CubeProgrammer、STM32CubeIDE的介紹就比較少,ST公司還封裝了HAL庫(硬件抽象庫),把寄存器的操做都封裝成了容易使用的函數,因此建議你們儘可能經過官方網站查閱資料。

能夠看到,ST公司有不少產品,32位微處理器只是其中一項。STM32即ST公司的32-bit的微處理器(Microprocessor)。

第一步 下載IDE

在ST官網上方搜索框直接搜索stm32cubeIDE

image.png

STM32CubeIDE is an all-in-one multi-OS development tool, which is part of the STM32Cube software ecosystem.

STM32CubeIDE 基於ECLIPSE™/CDT的多功能的跨平臺開發工具,它屬於STM32Cube軟件體系的一部分。

image

在學習階段,只須要使用STM32CubeIDE 就足夠了,它包含了配置工具和調試工具。

第二步 選擇一款開發板

和軟件開發不一樣,除了一臺電腦,咱們還須要購買單片機。可是一塊單片機是不能直接用來學習的,咱們須要購買一塊具備一些簡單功能而且引出引腳的單片機開發板。

萬能的某寶上直接搜索STM32開發板就能夠看到不少不一樣型號和價格的開發板,接下來如何選擇呢?

單片機自己的價格很便宜,幾塊到十幾塊而已,可是開發板的價格差距就很大了,幾塊到幾十塊甚至幾百塊的都有。價格差別主要是開發板的外設功能不一樣,有不少板子作了不少接口,所以價格也高,可是咱們在入門學習並不必定用獲得,做爲入門,我選擇的是最小系統板。

最小系統板,就是隻包含一些基本的接口,引出引腳,體積小,價格便宜。
可是最小系統板也有好幾款,它們的區別主要在於STM32微處理器的型號。

看看官網的圖
image.png

image.png

從圖上能夠看出,ST公司根據性能、用途把處理器分紅了不少型號,其中F0和F1系列是比較適合入門學習的,這也是爲何某寶上搜索STM32開發板 F0和F1比較多的緣由,其中F103C8T6這個型號是最多的,由於它的性能和功能足夠豐富,徹底知足用於學習,其中一款代號「BluePill」的開發板很好用,價格也便宜。
BluePill開發板長這樣,對比着買吧,價格大概在12-22不等(新手建議買焊接好針腳的):
image.png

買買買,建議買2-3塊,根據個人經驗,有很小的概率買到有問題的板子,有2-3塊板子,若是發現有什麼疑問,能夠換着試試,檢查一下是本身的問題仍是板子的問題,並且做爲新手,手上有兩三塊備用板子,能夠放心大膽的玩,不怕玩壞,學習起來更有效率。

第三步 購買配件

除了開發板,咱們還須要採購一些設備才能進行調試和開發。我學習的時候徹底不懂,身邊也沒人指導,買來一塊板子就懵逼了,怎麼用,而後一點一點的配齊配件才能動手作實驗。

必要配件

  1. 燒寫程序的ST-Link V2 :寫好的程序安裝進單片機的工具
  2. 麪包板:方便接電路作實驗
  3. 杜邦線:接電路必備,公公、公母、母母,都買點
  4. mini USB電源和線(通常安卓手機充電器和線就能夠)

可選配件(初學者不必定會用到,可是想深刻,早晚須要用到)

  1. 各類傳感器:除了控制開發板的小燈外,若是能利用傳感器作實驗是頗有意思的事情。
  2. 發光二極管:和傳感器功能差很少,都是爲了方便作實驗。
  3. 電阻:不少發光二極管的額定電壓電流很低,須要組合電阻
  4. USB TTL 轉接:另外一種燒寫程序的方式,另外,在電腦上作串口調試的時候會用到
  5. 錫焊設備

第四步 編寫程序

設備都配置齊全後,就能夠開始第一個小實驗了。

以BluePill開發板爲例,首先接好ST-Link V2,接法很簡單,開發板上的TX接ST-Link上的RX、開發板上的RX接ST-Link上的TX,開發板的Gnd與ST-Link的Gnd想接,Vcc與Vcc相接,而後插在電腦的USB口上。

image.png

打開STM32CubeIDE,新建一個工程,導航上會出現一些配置選項。

Eclipse的部分就不贅述了,主要說說STM32庫的選擇。

不一樣型號的處理器,庫和配置是不一樣的,所以,新建項目以前,STM32CubeIDE會要求選擇單片機型號,在搜索框中輸入對應的單片機型號,而後在列表裏選擇肯定。

image.png

image.png

以後,IDE就會用對應的庫初始化項目。

項目建立完成後,在左側文件窗口點開 .ioc文件
image.png

這個文件很是重要,在ST公司推出CubeMX以前,作初始化是很麻煩的事情,用任何引腳、配置時鐘、中斷使能、串口配置等都須要編寫初始化代碼。如今,CubeMX把這些工做都作成了可視化配置,而且CubeIDE裏集成了CubeMX的這個功能。

image.png

image.png

經過可視化的配置,STM32CubeIDE生成了標準的初始化代碼,相似下圖
image.png

image.png

在生成的main.c文件中,能夠看到不少註釋。要注意,這些註釋可不是多餘的,都頗有用。爲何呢?由於,修改.ioc文件會提示是否從新生成main.c文件,通常狀況下確定是須要從新生成的,否則修改的配置不會生效,那麼以前若是已經在main.c寫的代碼怎麼辦?會被覆蓋掉嗎?,除非,你的代碼是寫在

/* USER CODE BEGIN xxxxx */

/* USER CODE END xxxxxx */

之間,全部不在相似 USER CODE BEGIN 和END 之間的代碼,都會被覆蓋掉。

STM32CubeIDE生成的main.c留出了不少寫用戶代碼的位置,而且經過註釋引導你寫在正確的位置。
image.png

接下來寫一個簡單的試驗性代碼,讓BluePill上的PinC13的燈閃起來

首先在打開ioc文件,配置pc13爲輸出引腳
image.png

保存配置從新生成main.c文件

而後在主循環while中添加代碼,

while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
        //設置C組13引腳爲低電平
        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
        //延時200ms
        HAL_Delay(200);
        //設置C組13引腳爲高電平
        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
        //延時200ms
        HAL_Delay(200);
  }
  /* USER CODE END 3 */

OK,一個簡單的閃燈程序就完成了。

第五步 燒寫程序調試

還記得以前讓用ST-link接入,並插在電腦上嗎?立刻要用到它了。

打開Debug配置
image.png

剛纔介紹的是SWD的接線方式,因此這裏選擇SWD接口
image.png

接線正常的狀況下,點擊Debug按鈕,程序就能自動燒寫到開發板的單片機裏並運行了。

這時候,你應該可以看到BluePill上的小綠等快速的閃爍。

到這裏,就差很少介紹完了,可是單片機的知識面很是龐雜,相比起來,本篇文章十分粗淺,冰山一角,我只是從一個軟件程序員的角度去介紹它,想經過本文讓想學習STM32單片機開發的新同窗看到一個相對完整的從0到第一個閃燈實驗的過程,依此概覽單片機學習和開發的輪廓。

單片機的開發須要耐心的學習不少基礎知識,有興趣的同窗能夠留言一塊兒學習!

相關文章
相關標籤/搜索