STM32學習筆記 —— 1.1 什麼是寄存器(概念分析)

問題引入:算法

用一句話回答如下問題:架構

  • 什麼是寄存器?
  • 什麼是寄存器映射?
  • 什麼是存儲器映射?

(本章重點在 1.1.3 和 1.1.4)設計

1.1 STM32芯片實物圖

(圖)指針

  1. 學會看絲印圖
    • 芯片型號、內核提供商等其餘信息
  2. 學會辨別正方向(芯片上的小圓點與PCB上的小圓點對應)
    • 以小圓點爲基礎,逆時針旋轉,從1號引腳開始遞增(圖)
    • 若是芯片上沒有小圓點,那麼就把絲印圖正對着本身,左上角的引腳爲1號引腳,一樣逆時針旋轉遞增。
    • 全部芯片的引腳排列都是逆時針的,不管是LQFP仍是DIP封裝的。

1.2 STM32芯片架構簡圖

(圖)code

芯片主要是由內核和外設組成。教程

內核(主控制器):接口

  • Cortex - M4內核(由Arm公司設計)用於控制外設。

外設(從控制器):內存

  • Flash、Sram、USART、GPIO、IIC、SPI等(由Soc公司設計)

總線:class

  1. 內核與外設經過總線鏈接,其分爲:I(指令)、S(系統)、D(數據)總線。基礎

  2. 幾個總線同時訪問某個外設或者內核,產生競爭的時候,總線矩陣會使用調度算法進行仲裁。

  3. STM32F42xx的總線接口

(圖)

  • 黃色爲主控制器,紅色爲從控制器。
  • 指令總線主要訪問Flash,程序能夠從內置Flash、外置Flash和Sram中啓動。
  • 總線交叉處有圓點,說明能夠鏈接,例如:程序只能存儲在Sram1中,不能存儲在Sram2中。
  • 數據總線主要用於取常量。常量的存儲區域和程序的存儲區域是同樣的。
  • 系統總線主要訪問Sram和寄存器。

1.3 存儲器映射

  1. 存儲器自己是不具備地址信息的,地址信息是由用戶或者廠商分配的,爲存儲器從新分配地址的過程即爲存儲器映射。

  2. Cortex - M4內核是32位的,能夠尋址2的32次方,也就是4GB(0x0000 0000 - 0xFFFF FFFF)的內存空間,

  3. 這4GB的內存空間被分紅了8個Block,每一個Block都有特定的功能,每一個Block大小爲512MB。(教程裏有每一個Block的功能劃分)

    • Block0用於設計Flash,429IGT6只用了1MB。

    • Block1用於設計Sram,用於存儲變量,429IGT6用了256KB,被分紅了三個部分:Sram1爲112KB,Sram2爲16KB,Sram3爲64KB。

    • Block2用於設計片上外設。外設根據速度不一樣被分紅四條總線進行控制:AHB一、AHB二、APB二、APB1。

      (圖)

    • Block3是FMC的bank1 - bank2,用於擴展外部存儲,一個bank爲256MB,板上拓展了一個大小爲8MB的Sram。

    • Block4是FMC的bank3 - bank4

      • 四個bank經過一個片選信號控制四片拓展芯片 。
    • Block5用於FMC
    • Block6用於FMC
    • Block7爲Cortex - M4的內部外設,是由Arm公司設計的,如:NVIC等。

  4. 經過地址和偏移量間接訪寄存器。

1.4 寄存器映射

問題引入:

  • 如何經過控制寄存器的方法,讓GPIOH的16個引腳均輸出高電平?

經過絕對地址訪問內存單元:

//GPIO端口所有輸出高電平
*(unsigned int *)(0x40021C14) = 0xFFFF;
  1. 0x40021C14是輸出數據寄存器OCR的地址,如何找到?

    1. 在《STM32中文參考手冊》2.3.1 嵌入式SRAM這節中,能夠查到GPIOH外設的起始地址爲0x4002 1c00。
    2. 在 7.4.6 GPIO端口輸出數據寄存器這節中,能夠查到偏移地址爲0x14。
  2. (unsigned int *)的做用是什麼?

    • 0x4002 1c14是咱們人爲理解的地址,可是直接寫在程序中,只是一串十六進制常量,須要將其強制類型轉換爲指針類型,才能使用間接訪問運算符訪問該地址內存的數據。

經過寄存器別名方式訪問內存單元:

#define GPIOH_ODR *(unsigned int *)(0x40021C13)
GPIOH_ODR = 0XFF;

什麼是寄存器?

  • 給具備特定功能的內存單元取一個別名,這個別名就是寄存器,給已經分配好地址的特定內存單元取別名的過程叫作寄存器映射。

什麼是存儲器映射?

  • 給存儲器分配地址的過程叫作存儲器映射,再分配一個地址的過程叫作重映射。