1. STM32F10X-架構

STM32F10xx系列單片機是意法半導體推出的ARM核心32bit單片機。性價比非常高,真正做到了高性能、低價格並且極易使用,因此受到了工程師和應用廠商的共同青睞。

1. ST和ARM

ST是半導體設計、製造公司,它設計並生產芯片。
ARM是知識產權(IP intellectual property)供應商,它的產品是ARM內核(只做設計)。

對於STM32F10XX,其中CPU是ARM公司設計的,其他部分是ST公司設計的,整個芯片是ST公司製造的。

2. STM32F10X

對於一個MCU(microcontroller unit),就像它的名字一樣,其主要角色就是一個控制器(controller)而且是一個微(micro)控制器,並且它自成一個單元(unit),因此它是一系列組件的結合。
這些組件包括CPU(中央處理器)、ROM、RAM、總線、各種被控制設備(外設)等等。。。


2.1 STM32F10X系統架構

簡單一點,所謂的系統架構就是:MCU裏面有哪些東西?這些東西是怎麼佈置(連接)的?

通過這幅框圖(來自野火的資料),理解它的架構就足夠了:
這裏寫圖片描述

通過上面框圖可以看到MCU的組成:

  1. ICode總線;
  2. 驅動單元;
  3. 被動單元;
  4. 總線矩陣;

其中:
1.ICode總線:該總線將Cortex™-M3內核的指令總線與閃存指令接口相連接。指令預取在此總線上完成。

2.驅動單元
DCode總線:該總線將Cortex™-M3內核的DCode總線與閃存存儲器的數據接口相連接(常量加載和調試訪問)。
DCode 中的 D 表示 Data,即數據,那說明這條總線是用來取數的。 我們在寫程序的時
候,數據有常量和變量兩種,常量就是固定不變的,用 C 語言中的 const關鍵字修飾,是放
到內部的 FLASH 當中的,變量是可變的,不管是全局變量還是局部變量都放在內部的
SRAM。 因爲數據可以被 Dcode 總線和 DMA 總線訪問,所以爲了避免訪問衝突,在取數的
時候需要經過一個總線矩陣來仲裁,決定哪個總線在取數。

系統總線:此總線連接Cortex™-M3內核的系統總線(外設總線)到總線矩陣,總線矩陣協調着內核和DMA間的訪問。
系統總線主要是訪問外設的寄存器,我們通常說的寄存器編程,即讀寫寄存器都是通
過這根系統總線來完成的。

DMA 總線:DMA 總線也主要是用來傳輸數據,這個數據可以是在某個外設的數據寄存器,可以在
SRAM,可以在內部的 FLASH。因爲數據可以被 Dcode 總線和 DMA 總線訪問,所以爲了
避免訪問衝突,在取數的時候需要經過一個總線矩陣來仲裁,決定哪個總線在取數。

3.被動單元
內部的Flash:用於存放指令和只讀數據,也包括未加載的程序的存儲以及用戶自由存儲的數據;

內部SRAM:用於全局變量和堆棧的開銷;

FSMC:flexible static memory controller,可用於擴展設備。

AHB到APB的橋:APB1和APB2上掛載者各種外設,它們速度相對較低,因此使用AHB到APB的橋來銜接。

4.總線矩陣:總線矩陣協調各個總線之間的訪問仲裁,仲裁利用輪換算法。


來個更詳細的:
這裏寫圖片描述


小結:
芯片內各個組件都連接到各自總線->各個總線都連接到總線矩陣->總線矩陣協調各個總線之間的訪問仲裁。

2.2 存儲器映射

爲使CPU能控制芯片中的每個被動單元,這些被動單元的每個組件就必須要有一個確切的地址。
各個組件和4GB地址空間的對應關係就是儲器映射。

程序存儲器、數據存儲器、寄存器和輸入輸出端口被組織在同一個4GB的線性地址空間內。可訪問的存儲器空間被分成8個主要塊,每個塊爲512MB。

數據字節以小端格式存放在存儲器中。其他所有沒有分配給片上存儲器和外設的存儲器空間都是保留的地址空間。(沒有分配的不要用,是系統保留的,用了會出問題。)

知識點:
- 小端:低尾端,即字節序的尾端存儲在低地址的存儲單元。
- 大端:反過來即是。
這裏寫圖片描述

這裏寫圖片描述

存儲器映射圖:
這裏寫圖片描述


其實,上面的具體分配是ST做的,但是ARM提供了一個框架,ST具體了每個組件的地址。下面是ARM的存儲器映射框架:
這裏寫圖片描述

2.3 寄存器映射

在block2地址塊中編排的是外設寄存器的地址。
外設寄存器是用來控制外設或緩存外設數據的數字電路結構。在本質上,它們和存儲器(如FLASH或SRAM)沒什麼區別,都是不同功能的數字電路。只是在應用上主要用於外設的訪問和控制。

映射的定義沒有改變,就是對應關係。
寄存器映射是指:一個(寄存器的)地址與一個(我們取的)名字的對應關係。有了這樣的映射關係,在寫程序時就可以用一個符號來代指一個寄存器,而不要通過一個個地址來代指,大大地方便了程序的編寫(特別是C語言程序)。

3. Cortex系列處理器

前面簡單地看了看STM32的功能結構,在單片機中最重要的一部分便是CPU,往往,我們在做應用時與它打交道是最少的,但對於整個單片機來講,它是最重要的,也是最複雜的。

ARM公司設計的處理器自從ARM11(指令集版本爲ARMv6)之後,命名爲Cortex
Cortex分爲三個系列,如下圖(指令集版本分別爲ARMv7-A、ARMv7-R、ARMv7-M):
這裏寫圖片描述

  • Cortex-A:Application,面向尖端的基於虛擬內存的操作系統和用戶應用。
  • Cortex-R:Realtime,面向實時應用。
  • Cortex-M:Mircocontroller,面向微控制器。

ARM指令集架構歷史回顧:
這裏寫圖片描述

3.1 Cortex-M家族:

這裏寫圖片描述

3.2 Cortex-M結構

和其他哈佛結構的精簡指令集CPU一樣,Cortex-M3的指令總線和數據總線是分開的,這樣的設計大大提高了執行效率。

這貨比較底層,也沒什麼好說的,不是太簡單而是太複雜,不懂,所以不敢亂說。

看圖:

這裏寫圖片描述

這裏寫圖片描述

內核的詳細知識請看一本書:
Cortex-M3 權威指南
Joseph Yiu 著
宋巖 譯

4. 小結

主要描述了基於ARMv7架構的Cortex-M3內核的STM32F10XX芯片的架構。它包括:

  • 哈佛結構的Cortex-M3內核(單片機的核心)。
  • 驅動設備:數據總線、系統總線、DMA1、DMA2.
  • 被驅動設備:嵌入式片上Flash、片上SRAM、FSMC、總線橋以及各種外設。
  • 連接各個總線的總線矩陣。

還描述了存儲器的映射關係。
意思意思了一下Cortex-M3內核。

本着回頭再看看STM32的想法,又花了一天時間,才寫了個基礎架構,其實還有很多細節沒顧得到。請看以後的博客,接下來複習複習外設,畢竟,它們纔是一線士兵,衝鋒陷陣!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章