愛伊米

【icspec】STM32 知識概要小結

1、  SYSCLK時鐘源有三個來源:HSI RC、HSE OSC、PLL

【icspec】STM32 知識概要小結

2、  MCO[2:0]可以提供4不同的時鐘同步訊號,PA8

3、  GPIO口貌似有兩個反向串聯的二極體用作鉗位二極體。

【icspec】STM32 知識概要小結

4、  ICode匯流排,DCode匯流排、系統匯流排、DMA匯流排、匯流排矩陣、AHB/APB橋

5、在使用一個外設之前,必須設定暫存器RCC_AHBENR來開啟該外設的時鐘

6、 STM32復位有三種:系統復位、上電覆位、備份區域復位。其中系統復位除了RCC_CSR中的復位標誌和BKP中的數值不復位之外,其他的所有暫存器全部復位。

觸發方式例如外部復位、看門狗復位、軟體復位等;電源復位由於外部電源的上電/掉電覆位或者待機模式返回。

復位除了BKP中的暫存器值不動,其他全部復位;備份區域復位的觸發源為軟體復位或者VDD和VBAT全部掉電時。

7、 (NestedVectored Interrupt Controller)NVIC巢狀向量中斷控制器,分為兩種:搶先式優先順序(可巢狀)和中斷優先順序(副優先順序,不能巢狀)。

兩種優先順序由4位二進位制位決定。分配下來有十六種情況:

【icspec】STM32 知識概要小結

8、自動裝載暫存器和影子暫存器:前者相當於51當中的溢位設定數值。而影子暫存器顧名思義是影子,就是暫存器的另一份copy。

實際起作用的是影子暫存器,而程式設計師操縱的則是自動裝載暫存器。如果APPE位使能,表明自動裝載暫存器的值在下一次更新事件發生後才寫入新值。

否則,寫入自動裝載暫存器的值會被立即更新到影子暫存器。

9、

【icspec】STM32 知識概要小結

10、ARM公司只生產核心標準,不生產晶片。ST、TI這樣的公司從ARM公司那裡購買核心,然後外加自己的匯流排結構、外設、儲存器、始終和復位、I/O後就組成了自己的晶片。

【icspec】STM32 知識概要小結

11、電容觸控式螢幕原理:透過充放電的曲線不同來檢測是否被按下。 實際的實驗過程中,TPAD可以用一塊覆銅區域來替代,透過電容的充放電常數來確定是否按下。

【icspec】STM32 知識概要小結

12、OLED,即有機發光二極體,又稱為有機電鐳射顯示。下圖為OLED的GRAM與螢幕的對應表

【icspec】STM32 知識概要小結

PAGE2單獨列出來:

【icspec】STM32 知識概要小結

13、USART可以操縱SPI裝置。不過最大頻率只有4。5MHz

14、使用I/O口時應該注意的問題

【icspec】STM32 知識概要小結

15、ADC的Vref+和Vdda與VSS,Vref-一定要加高質量的濾波電容,切靠近微控制器。

【icspec】STM32 知識概要小結

16、在STM32內部,FSMC的一端透過內部高速匯流排AHB連線到核心Cortex-M3,另一端則是面向擴充套件儲存器的外部匯流排。

核心對外部儲存器的訪問訊號傳送到AHB匯流排後,經過FSMC轉換為符合外部儲存器通訊規約的訊號,送到外部儲存器的相應引腳,實現核心與外部儲存器之間的資料互動。

17、FSMC中的DATASET和ADDSET的設定需要參看外部儲存器的時序圖來確定。

一般而言,DATASET指的是資料建立時間,也就是讀/寫訊號開始到讀/寫訊號停止(上升沿儲存資料)的持續時間。(一般來說寫比讀快!)。

而ADDSET指的是地址建立時間,指的是片選之後到讀/寫操作之前的時間,這是針對SRAM來說的,如果操縱的是TFT,不存在地址線,所以此時的ADDSET就是讀/寫訊號結束到RS電平的轉換時間。

【icspec】STM32 知識概要小結

18、

【icspec】STM32 知識概要小結

19、

【icspec】STM32 知識概要小結

20、FSMC的三個配置暫存器:FSMC_BCRx(片選控制配置)、FSMC_BTRx(片選時序)、FSMC_BWTRx(片選寫時序)。

21、RTC時鐘配置必須要用到BKP暫存器,BKP暫存器在微控制器復位、電源復位、待機喚醒模式下是不會更改值的,他的供電由VDD供電,VDD被切斷後自動切換至外部的VBAT供電。

22、要修改BKP暫存器的值,必須取消其防寫的標誌。BKP暫存器在上電時自動防寫。

23、Stm32有三種省電模式:

【icspec】STM32 知識概要小結

三種省電模式中,耗電量從上到下依次降低,待機模式的電流僅為2uA。

24、從待機模式中喚醒微控制器等效於讓微控制器復位,但是電源暫存器的值會有一個標誌位指示微控制器是被喚醒的,不是被複位的。

25、ADC的時鐘不要超過14MHz,否則轉換精度會下降。最大轉換速率為1MHz,即轉換週期為1us(14MHz,取樣週期為1。5個ADC時鐘)

26、Tcovn=取樣時間+12。5個週期。取樣時間儘量選長一點,這樣精度高一些,但是轉換速率下降,這也是有利必有弊。

27、

【icspec】STM32 知識概要小結

28、拿ARM7TDMI來說,T代表Thumb指令集,D是說支援JTAG除錯(Debugging),M意指快速乘法器,I則對應一個嵌入式ICE模組。

29、MMU作為嵌入式處理器與應用處理器的分水嶺標誌à具有記憶體管理單元的嵌入式處理器可以定位為應用處理器。

這麼說M系列和A系列的處理器的區別在於A系列的處理器具有MMU單元可以進行記憶體模組的管理。

30、ARM處理器有兩種狀態:ARM狀態和Thumb狀態。

【icspec】STM32 知識概要小結

31、這張圖說明了一切:Thumb2指令集做了一件很偉大的事情:將16位和32位的指令集融為一體,相容性非常強!(這麼說CM3不支援某些32位ARM指令集??)

32、

【icspec】STM32 知識概要小結

33、MSP是系統復位後使用的堆疊指標,PSP由使用者的程式碼使用。兩個堆疊指標為4位元組對齊!!

34、在ARM程式設計領域中,凡是打斷程式執行的事件,統稱為異常(exception)。

35、因為存在LR(連結暫存器),所以可支援1級的子程式呼叫而不用壓棧到記憶體,大大提高了執行速度。——-à這就是說,我們在程式設計的時候,一級呼叫是不會耗費太多時間的,除非是二級呼叫!

36、處理器有兩種操作模式:handler模式和執行緒模式。

【icspec】STM32 知識概要小結

處理器也有兩種特權分級:特權級和使用者級。 這張圖說明了一切:復位進入特權級執行緒模式,如果有異常,進入特權級的handler模式處理異常或中斷例程,然後返回至特權級執行緒模式。透過修改CONTROL暫存器可以進入使用者級執行緒模式。

37、兩個高階定時器TIM1和TIM8是掛接在APB1總線上

38、STM32的外部中斷是以組來區分的,也就是說PA0,PB0,PC0微控制器是無法區分其中哪個觸發的中斷à均為EXIT0線中斷服務例程。

所以,外部中斷支援16路的中斷解析度。從另一個方面來講,我們可以設定GPIO_EXTILineConfig(GPIO_PortSourceGPIOx, GPIO_PinSourcex);來開通中斷線實現組內的不同中斷。

39、DAC有兩個暫存器,一個是DHR(Data HoldingRegister)資料保持暫存器,一個DOR(Data Output Register)資料輸出暫存器。

真正起作用的是DOR暫存器,該暫存器把值給數模轉換髮生單元輸出以VREF+為參考電壓的電壓值。

如果是硬體觸發轉換,系統將在1個ABP時鐘週期後把值給DOR,如果是軟體觸發轉換,時間為3個APB時鐘週期。然後,均等待Tsetting時間(Typical為3us,Max為4us)後真正輸出電壓值。

40、DAC分8位模式和12位模式,其中後者可以選擇左右對齊

41、DMA仲裁器分為軟體和硬體兩種。軟體部分分為4個等級,分別是很高優先順序、高優先順序、中等、低。硬體部分由通道的大小來決定優先順序,越低優先順序越高。

42、DMA有一個實時的傳輸資料量暫存器叫做DMA_CNDTR,最大值為65535,存放的是當前傳輸所要傳輸的資料量。當資料量變為0時,表明傳輸完成。

43、CAN匯流排(ControllerArea Network)。CAN控制器根據兩根線上的電位差來判斷匯流排電平,匯流排電平又分為顯性電平和隱性電平,二者必居其一。

44、CAN匯流排具有6個特點:

1:多主控制

2:系統若軟性

3、通訊速度較快,通訊距離較遠

4、具有錯誤檢測、錯誤通知和錯誤恢復功能

5、故障封閉,當總線上的裝置發生連續故障錯誤時,CAN控制器會把該控制器踢出匯流排

6、連線節點多。理論上可以無限制載入,但是受到時間延遲和電氣負載的限制,實際數目是有限制的。降低傳輸速度可以適當增加可掛接負載個數。

45、CAN協議有兩個標準,ISO11898(針對125kbps~1Mbps的高速速率)和ISO11519-2(125kbps以下的低速速率)

【icspec】STM32 知識概要小結

46、

【icspec】STM32 知識概要小結

47、CAN協議的有5種類型的幀:資料幀、遙控幀、錯誤幀、過載幀、幀間隔。其中前兩種幀有標準格式(11位ID)和擴充套件格式(29位ID)。

【icspec】STM32 知識概要小結

48、資料幀構成:

(1) 幀起始。 表示資料的段幀起始。

(2) 仲裁段。 表示該幀優先順序的仲裁段。

(3) 控制段。 表示資料的位元組及保留位段。

(4) 資料段。 資料的內容,一幀可傳送0~8個位元組的資料。

(5) CRC段。  檢查幀的傳輸錯誤段。

(6) ACK段。  表示確認正常接收的段。

(7) 幀結束。  表示資料的段幀結束。

【icspec】STM32 知識概要小結

49、Stm32f103系列只有一個CAN控制器,有3個傳送郵箱和3級深度的2個FIFO,14個過濾組器。

50、STM32的每個過濾組可以配置為1個32位過濾器和2個16位過濾器。除此之外,還可以配置為遮蔽位模式(ID+遮蔽)和識別符號列表(ID和遮蔽暫存器均用來做ID暫存器)模式。

51、CAN接收到有效報文被放置在3級郵箱深度的FIFO中,FIFO完全由硬體來管理。

52、CAN匯流排的波特率

【icspec】STM32 知識概要小結

53、觸控式螢幕一般分為電阻式觸控式螢幕和電容式觸控式螢幕。前者檢測觸控的位置原理是利用觸控式螢幕控制器中的A/D轉換器經過兩次A/D讀值後得出X和Y的座標值。注意:這個X和Y的值是相對於觸控式螢幕的,而非LCD屏。

所以在這裡需要注意兩個概念:觸控式螢幕和LCD屏。這是兩個不同的概念,也是兩個不同的物理結構,其中電阻觸控式螢幕是由上下兩個導電層中間夾著一層非常薄的透明隔層;而LCD就是指顯示屏。

54、電阻觸控式螢幕有X和Y、X和Y的比例因子、座標軸方向、偏移量。LCD也有自己的這些引數。兩者完全不相干,所以在定位的時候需要進行座標轉換。公式:

透過對螢幕的四個點進行校準,得到四元一次方程,求解即可。

55、NEC協議的資料幀格式:同步碼頭、地址碼、地址反碼、控制碼、控制反碼。同步碼由一個9ms的低電平和一個4。5ms的高電平組成,地址碼、地址反碼、控制碼、控制反碼均是8位資料格式。按照低位在前,高位在後的順序傳送。

56、NEC協議在傳送的時候,會有560us的38KHz的載波訊號,而在接收的時候這部分載波訊號被認定為低電平,而剩餘的(2。25ms-650us)的邏輯“1”和(1。12ms-650us)的邏輯“0”時間則被認定為高電平。

57、在單位時間內的位移被定義為速度,速度有線速度和角速度之分,分別對應兩種感測器測量這兩種不同的速度:線速度感測器(加速度計)、角速度感測器(陀螺儀)。

前者多應用在靜態或者低慢速運動中的姿態求解,後者多應用在動態運動中姿態求解。

58、根據標準約定,零加速度(或零 G 準位)通常定義為相當於最大輸出值(12 位輸出為 4096,10 位輸出為 1024 等)一半的輸出。對於提供 12 位輸出的加速度計,零 G 準位將等於 2048。

輸出大於 2048 表示正加速度。輸出小於 2048 表示負加速度。加速度的數量通常用單位 g (1g = 9。8m/s2 = 重力加速度)表示。

透過確定測量的輸出與零 G 準位之間的差值,然後除以加速度計的靈敏度(用計數/g 或 LSB/g表示)來計算加速度。

對於提供 12 位數字輸出的 2g 加速度計,靈敏度為 819 計數/g 或 819 LSB/g。加速度等於:a = (Aout - 2048)/(819 計數/g),單位為 g。

59、加速度計測得的加速度的方向和裝置設定的座標系是相反的,因為原理表明在測量力的時候採用的是非慣性系參考系,而我們高中時代研究的座標系是慣性系參考系,前者在物體進行運動產生加速度時,假想一個與速度方向相反的力作用在物體上,這個力就是慣性力;後者我們說不存在慣性力,只說存在慣性,因為在慣性座標系中,我們研究的是物體,而非座標系(即假定座標系相對地球靜止),當我們把座標系也考慮在內時,當座標系運動,就產生了慣性力f,這種力作用會假想作用在物體上,只是與運動方向相反。

60、由上可知,加速度計的本質是測量力而非加速度。

61、NRF24L01工作在2。4GHz的頻段,由於頻段頻率較高,所以傳輸速率較快,為2Mbps。

62、STM32的快閃記憶體模組由主儲存器、資訊塊和快閃記憶體儲存器介面暫存器3個部分構成。

主儲存器用來存放程式碼和const常量;資訊塊由兩個部分組成:啟動程式程式碼、使用者選擇位元組。

其中啟動程式程式碼為ST公司自帶的啟動程式,用於串列埠下載。

最後的快閃記憶體儲存器介面暫存器用於控制整個對快閃記憶體區域的操作。

63、CPU的執行速度比FLASH的操作速度快的多,一般FLASH的最快訪問速度≤24Mhz。如果CPU的速度超過這個頻率,那麼在讀取FLASH的時候必須加入等待時間(FLASH_ACR設定)。

64、FLASH程式設計時,寫入必須為半字(16位)。並且在寫入的時候必須保證所寫區域的資料必須為0xFFFF。

65、STM32的FSMC有HADDR[27:0],其中[27:26]用來選擇BANK區域的4個不同塊。

剩下的[25:0]則用來連線外部儲存區域的地址線FSMC_A[25:0]。

如果資料寬度是8bit,此時的HADDR[25:0]和FSMC_A[25:0]是完全對應的。

如果資料寬度是16bit,此時的HADDR[25:1]和FSMC_A[24:0]是對應起來的。

需要注意:無論資料寬度是多少,外部的FSMC_A[0]和A[0]總是對應的。

66、關於LB和UB的訊號控制是由硬體自動控制的,當AHB的資料寬度小於外部儲存器的資料寬度時,此時LB和UB的控制訊號自動產生(比如位元組讀取/寫入16bit的外部儲存器)。

67、 __attribute__ (函式屬性、變數屬性、型別屬性等)。如果在使用SRAM時,可以採用u32 sram_array[xx] __attribute__ ((at(0x68000000))代表將外部SRAM的空間全部給了sram_array這個變數,他具有在at0x68000000這個地址的屬性。

往裡面寫值就直接在SRAM裡面寫值。

68、

【icspec】STM32 知識概要小結

記憶體管理有一種方式叫做分塊式記憶體管理。

注意表中的分配方向,從頂到底。每一項對應一個記憶體塊。裡面的數值代表了記憶體池的狀態:如果為0,表示該記憶體沒有被分配;如果非0,那麼數值的大小就表示了該塊記憶體被連續佔用的記憶體數。

比如說數值為20,意思是包括該項在內的記憶體塊被連續佔用了20塊分給了指標。

69、SD卡的分類:

【icspec】STM32 知識概要小結

一般的SD卡支援兩種傳輸模式:SD卡模式(SDIO)、SPI模式。顯然前面一種是專用模式,所以速度比較快。

70、常用的漢字內碼系統有GB2313、GB13000、GBK、BIG5(繁體)。其中GB2313只有幾千個漢字,而GBK則有2萬多漢字。

71、要顯示漢字,採用的方式如果用點陣的形式是不可取的,因為這無法查詢漢字。採用的方式就是內碼系統。

GBK標準中,一個漢字對應2個位元組:前者稱為區(0x81~0xFE)後者為(0x40~0x7E)和(0x80~0xFE)。前者有126個區,後者有190,那麼可以顯示的漢字數量有126*190=23940個。

根據這兩個值用來查詢字型檔,字型檔中存放的還是每個漢字的點陣資料。

這個字型檔非常大,如果是16*16的字型,那麼一個字型就需要32個位元組,如此說來需要23940*32=748K的空間,可見非常大,所以需要外部的Flash來儲存這個字型檔。

72、由於漢字內碼系統不具有國際通用性,但是Unicode幾乎把所有的語言都放置進來,這樣在微控制器中操作漢字時,就需要將GBK和Unicode轉化。

尤其是在FATFS中,建立中文檔名和讀取中文檔案資訊時需要將Unicode換轉為GBK後再進行修改操作,再反轉換成Unicode儲存修改。

這麼說,兩者的存在是由於標準的不統一,並且Unicode中只有6064個漢字,而GBK顯然是一種漢字擴充套件。

73、BMP圖片編碼的順序是從左到右,從下到上。

74、VS1053是一款高效能的數字音訊解碼晶片,從SD卡中將mp3等音樂音訊檔案透過SPI送給VS1053後,由其進行音訊解碼,輸出音樂給耳機。

耳機驅動可以採用TDA1308晶片,這款晶片為AB類耳機驅動晶片。

【icspec】STM32 知識概要小結

75、IAP(In Application Programming)在應用程式設計是為了後期開發更新程式方便而提出的概念。具體的實現方法如下圖所示:

【icspec】STM32 知識概要小結

在普通程式設計中,flash中的code是透過JTAG和ISP等工具下載到微控制器中。

而在IAP程式設計中,flash被分割槽為A和B兩個區域,A區域只允許用USB/USART等方式下載,此區域作為更新B區域的程式碼用。

B區域則是使用者的code區域,真正的程式碼在這裡被執行,放置的就是app。

【icspec】STM32 知識概要小結

上圖表示STM32正常執行的流程圖,可以看到上電覆位後系統從0x80000004處開始執行程式,這裡放置的是復位中斷向量,然後跳轉至復位中斷程式入口後再跳轉至main函式執行使用者的程式。

【icspec】STM32 知識概要小結

上圖表示加入IAP後的STM32程式執行流程圖。可以看到上電覆位後跳到IAP程式的main函式處執行IAP過程(這個過程就是把下面灰底色塊的程式程式碼燒進B區域à程式碼更新)。

後面的過程和STM32正常執行一樣,如果出現中斷請求,還是跳轉到A區域中的中斷向量表中,然後再跳轉到B區域的中斷服務入口。

76、USB有四根線,VCC、GND、D+、D-。在USB主機上,D+和D-均透過一個15K的電阻接地,這樣兩條線均為低電平。

在USB裝置中,對於高速裝置會在D+透過一個1。5K的電阻接到VCC,而低速裝置會在D-透過一個1。5K的電阻接到VCC。

這樣主機就可以透過D+和D-的高電平的到來來檢測是否有裝置接入,並且識別高低速裝置。

77、UCOSII是一種實時作業系統,具有執行效率高、佔有空間小(最小核心2KB)、實施效能優良、擴充套件性強和移植性強等優點。

【icspec】STM32 知識概要小結

UCOS具有多工併發工作的特點(注意,任何時候只有一個任務能夠佔用CPU。併發只是任務輪流佔用CPU而不是同時工作)。最大支援255個任務併發工作。