大家好,非常高興能跟大家一起聊一聊STM32,
本次培訓呢,主要是介紹一些概念,不做深入的探討,
內容比較多,講的可能會有點快,

本次內容主要分為5個部分,

首先簡單介紹一下STM32

STM32有什么應用呢?我學了它能干什么呢?
作為微控制器,需要控制的地方,基本都可以用上,
比如智能家居、智慧農業、工廠自動化這些,都可以使用STM32作為主控制器或者輔助控制器,
我們實驗室做的小車和無人機的主控芯片,包括以后讀研,有些實驗室做嵌入式的,也是用的他,
所以我們要想進實驗室,就要先學會用它,

再來看一下為什么要叫他STM32,ST是意法半導體公司的名稱,M是Microelectronics的縮寫,32表示的是32位,另外還有8位的,所以STM32是指:由意法半導體公司(ST)推出的32位微控制器,
針對不同的應用需求,STM32系列又分為M1、M3、M4等內核,比如M0最大特點是低功耗的設計;而如果要驅動10寸左右的顯示屏,可能就需要上M4了,
我們接下來要用的STM32F1系列是基于M3的,,

STM32有很多不同型號的產品,大概了解一下他的命名規則還是很有必要的,
不看圖上的型號,以我們要用的STM32F103ZET6來看,
F是基礎級,103是主流入門級,Z是144引腳,E是閃存512Kb,T是QFP封裝,6是溫度范圍-40到85度,后面的就不用管了,

下面圍繞我們用的F1,簡單介紹一下他的外設和功能

我們用的應該還是F103ZET6的芯片,他的主頻是72M,主頻越高,處理速度越快,
FLASH,就是前面說的閃存,是512K位元組,用來存燒錄的代碼,
RAM是64K位元組,暫時存盤程式、資料和中間結果,
有112個IO引腳,
8+2個定時器,
ADC/DAC的通道數也挺多,
3個SPI介面、2個I2S介面、2個I2C介面、5個UART介面,
1個SDIO介面,用于外接SD卡,
1個FSMC介面,用于驅動螢屏,
1個USB介面,
作為主流級的芯片,這些功能已經能滿足日常大部分的需求了,而且很便宜,一塊這個芯片才8塊錢,
接下來,我們再分別簡單介紹一下其中我們會用到的功能,讓大家有個初步印象,

首先當然是介紹一下最最基礎的GPIO,
GPIO是CPU與外部世界交換資訊的大門,不管是多么復雜的通信,都得依靠于GPIO,
通過GPIO,我們可以實作很多功能,比如我們可以通過控制電平高低來點燈,
產生方波來控制舵機,
通過約定的協議,可以傳輸資料,
等等,

GPIO有A~F組,每組有16個IO,不過具體可用數量還要看芯片的封裝,
為了提高GPIO的效率,STM32支持引腳的復用,就是某個引腳既可以配置為A功能,也可以用作B功能,
所以當我們需要使用某一個功能的時候,最好先去看一下引腳復用表,怎么去找后面再說,


中斷是一個非常重要的東西,任何外設都可以產生中斷,
好比你在寫作業,有人來問你問題,你解答完他的問題后,就繼續寫你的作業了,
具體怎么看有哪些中斷,后面再說,
中斷還有優先級,比如有兩個人同時問你問題,你選擇先解答跟你關系更好一些的那個人的問題,
其中,搶占優先級高的會打斷優先級低的,

定時器也是一個很常用的東西,除了可以簡單地定期產生中斷,還可以被用于:測量輸入信號的脈沖長度、產生輸出波形(如驅動電機的PWM波)等,

程式處理的都是離散的數字信號,真實世界的模擬信號,例如溫度、壓力、聲音或者影像等,需要轉換成更容易儲存、處理和發射的數字形式,模/數轉換器可以實作這個功能,
ADC是將模擬信號轉為數字信號,DAC是將數字信號轉為模擬信號,
看這個小人,我們說話的聲音是模擬信號,通過ADC轉為數字信號后存盤起來,再通過DAC轉為模擬信號后播放出來,
STM32F103ZET6 擁有12位ADC,是一種逐次逼近型模擬數字轉換器,使用起來也很方便,

DMA能進行高效資料傳輸,因此在通信資料量大的時候非常有用,比如SD卡的讀寫、螢屏顯示、大量資料傳輸,
DMA傳輸方式無需CPU直接控制傳輸,因此不占用CPU時間,傳輸完成后通過中斷告訴CPU,能大大提高程式的效率和靈活性,

F1芯片上有很多通信介面,我們看幾個比較常用的,
UART可以說是接觸的最多的了,只需三根線即可實作全雙工通信,使用最方便,但速率低,抗干擾能力差,在平時寫代碼時候,我們會通過串口連接32和電腦,并將除錯資訊輸出到電腦上,或者小車在跑的時候不好連線,就插上一個串口藍牙模塊,然后手機連接藍牙模塊就可以看資料了,
SPI相比于UART的速度更高,最大支持45Mbit/s,當有多個 SPI 設備與 MCU 相連時,通過SS片選信號線進行選擇,很多小的TFT螢屏用的就是SPI,
I2C是簡單的雙向兩線總線,通過不同的地址識別不同的設備,只要遵循協議,我們可以用普通IO去模擬I2C,I2C支持資料速率 400 Kbit/s 的標準模式和1Mbit/s 的快速模式,螢屏的觸摸驅動就是用的I2C,
I2S是音頻總線,專門用于傳輸音頻信號,它可以看做是SPI的擴展,所以跟SPI差不多,

STM32的內容非常多,下面介紹一下學習路線,但每個人喜歡的學習方法不一樣,這里僅供大家參考,

STM32的編譯器是支持匯編、C和C++撰寫的,
匯編的效率更高,C++更高級,但我們一般都是用簡單易用上手快C語言,
所以我們在開始學STM32之前,第一步首先要學一下C語言的基礎語法,
網上可以搜“C語言菜鳥教程”,基本上按著教程學到指標、結構體,就差不多可以來學32了,其他的用到了再學也可以,

熟悉C語言后,就可以進入STM32的學習了,
首先要把環境準備好,
軟體方面:
安裝keil編譯器,裝完要用注冊機破解一下,
下一個串口除錯助手,后面在開發程序中要看板子print的除錯資訊
硬體方面:
準備一塊F103ZET6的最小系統開發板,最小系統就是硬體最小,指保證系統能正常運行的最小外圍電路,
準備一個STLINK燒錄器,程式寫完燒錄到板子里面少不了他,
使用USB轉TTL模塊連接STM32的USART和電腦,就能在串口除錯助手上顯示資訊了,
杜邦線這個用來連接引腳的也是必不可少的,

然后我們可以去教程了,我們選正點原子的教程,當然也可以選野火的,
教程也分暫存器版和庫函式版,庫函式就是對暫存器的封裝,能加快開發速度,增加代碼可讀性,建議大家直接看庫函式版,學會之后再根據興趣去了解暫存器版,
教程一定要好好看,要對著教程手敲一遍代碼,不能光看,只看不練是記不住的,

教程內容這么多,我們可以不用全學,針對實驗室要用到的知識,先掌握其中一部分即可,
比如要做平衡車,可以先學會以上這些內容,掌握之后再去看其他的,
最后,要把所學的知識結合起來,做一個綜合實踐,

既然與硬體接觸,我們之后可能會經常遇到原理圖,
不需要你會畫原理圖,但必須要看得懂原理圖,知道引腳怎么對應,
比如這些藍牙介面、串口介面,要知道對應到開發板上怎么去接,

任何單片機,必定是靠時鐘驅動的,時鐘就是單片機的動力,通過時鐘樹,我們可以知道,各種外設的時鐘是怎么來的?有什么限制?從而理清思路,方便理解,
比如通過時鐘樹,我們就能知道,某個定時器的頻率是多少,I2S掛載在哪條時鐘總線上,
所以我們要看得懂時鐘樹,能理解時鐘樹,

然后是擴展閱讀,
《STM32中文參考手冊》是ST出的官方資料,有STM32的詳細介紹,包括了STM32的各種暫存器定義以及功能等,而《Cortex-M3權威指南》則是對《STM32中文參考手冊》的補充,
大家在學習之余,可以隨手讀一讀這兩本書,因為這兩本書干貨滿滿,有些同學可能看不下去,而且看了就忘,所以可以前面學完之后再來看這個,或者結合前面學的內容,再看一看這兩本書對應的章節,會對STM32有更深的理解,

寫代碼程序中,難免會遇到bug,或不知道怎么寫的情況,那我們應該怎么辦呢?這里簡單介紹幾個方法,

第一點,我們可以查閱一下教程,現在比較大的兩家是正點原子和野火,他們的內容差不多,
教程內基本包括了大部分應用場景,并提供了代碼例程,可以借鑒一下他們的代碼,

資料手冊是有關產品技術特征的說明,包括產品的基本配置(如內置Flash和RAM的容量、外設模塊的種類和數量等),管腳的數量和分配,
比如想知道GPIO的功能分配情況,就可以查一下這個檔案,

每個外設驅動都由一組函陣列成,這組函式覆寫了該外設所有功能,韌體庫使用手冊介紹了外設的所有函式,當想使用某個外設,但不知道有哪些函式以及它的用法的時候,可以查閱它,
技術手冊是有關如何使用該產品的具體資訊,包含各個功能模塊的內部結構、所有可能的功能描述、各種作業模式的使用和暫存器配置等詳細資訊, 如果對某個函式原理不理解,或者想了解底層實作的話,可以查閱它,

第四點,這應該是我們最常用到的方法了,遇到問題,直接復制錯誤去百度谷歌搜,
如果運氣好,有前人也遇到過的話還好;如果翻了好久都沒找到類似的,就比較煩躁了,

谷歌要VPN翻墻的,一般校園網也支持ipv6,通過ipv6也能達到翻墻的效果,
如果不行的話,那就用VPN軟體吧,

如果直接搜搜不到的話,可以到正點原子或者野火的論壇上去找一找,或者發帖問一下,
不過按我的經驗,發帖的好少有回的,大部分人都是去發帖問的,

如果之前你不好意思問別人,可以自己搜索,
但如果都到這步了還沒解決,那就問問同學唄,可能他們正好也遇到過還解決了呢,

這里還有一個方法,可以淘寶上問正點原子或者野火旗艦店的客服,他們都有專門的技術支持客服,
你用的誰家的例程,就找哪家的,將問題描述詳細,例程是他們寫的,他們會比較懂一些,
在論壇上發帖,可能是網友回復;而淘寶咨詢,則是直接對應開發人員,

一個籬笆三個樁,最后我再向大家推薦一些我覺得挺好用的,可以提高學習效率的工具

不知道大家平時記筆記用的什么軟體,用word嗎還是記事本,我相信如果你用了Markdown,就會愛上他的,markdown通過簡單地語法,就能讓你的筆記非常的好看,而Typora是我用過的最好用的免費的markdown編輯軟體,

Typora雖然好用,但它的圖片保存在本地,將md檔案分享給他人后,就沒法顯示了,
通過PicGo+Typora+Gitee方式,可以自動將圖片上傳到碼云保存,解決了上述問題,

我們可能實驗室有一臺電腦,宿舍有一臺電腦,這兩臺電腦之間經常要共享一些檔案,比如實驗室電腦上做得筆記,我想在筆記本上也保存一份,最簡單的方法是用U盤拷貝,但還有更簡單的方法,
使用堅果云同步軟體,多臺電腦上登錄同一個賬號,并指定存放的路徑,堅果云就會自動同步檔案,不過免費版每個月有流量限制,但對于平時同步筆記來說足夠了,

在學習程序中看英文文章是不可避免的,但對于我這個英語渣渣來說就很頭疼,
網易有道詞典提供了截屏翻譯和劃詞翻譯,可以很方便地翻譯英文段落,

感興趣的同學還可以看一下這個,
Git 是一個開源的分布式版本控制系統,用于敏捷高效地處理任何或小或大的專案,
簡單應用就是,比如你有一個txt檔案通過Git提交了,然后往txt里增刪了一些內容,后來你發現刪錯了想改回去,就可以通過Git指令,回退到上一個版本,
我們寫代碼時候,有時候想增加一個功能,但又怕把工程搞壞了,就會復制一份新工程,在新工程上如果改完發現出錯了,還能有備份,通過Git的話,就不用每次都復制了,直接通過指令操作,

對于新功能,我們一般不直接上來就敲代碼,而是先畫好流程圖,最后再根據流程圖寫代碼,
通過流程圖,能更容易得發現漏洞,一般都是用visio,但其他幾款也不錯,
億圖比visio有更多的圖示,做出來的圖很好看,但是是收費的,可以找破解版,
XMind是思維導圖,可以用來理清思路、搞清關系,
draw.io是一款開源的繪制流程圖的工具,擁有大量免費素材和模板,效果不比visio差,

以上就是本次培訓的所有內容了,謝謝大家,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/279329.html
標籤:其他
