STM32 ARM學習錦集一

STM32 ARM學習錦集一

內容簡介

1、最小外圍電路

2、啟動模式儲存器

3、對映暫存器對映

4、訪問暫存器內容

5、GPIO工作模式

6、安裝KEIL5

7、GPIO初始化

8、埠配置及輸出模式

9、啟動檔案功能

10、韌體庫檔案

一、最小外圍電路

電源電路

復位電路

晶振電路

下載電路

二、啟動模式

透過BOOT[1:0]引腳選擇三種;

設定串列埠下載程式碼,需配置BOOT0=1,BOOT1=0;

設定一按復位鍵就開始跑程式碼,需配置BOOT0=0,任何值BOOT1;

將內建SRAM設定為啟動區,需配置BOOT0=1,BOOT1=1;

三、儲存器對映

1、儲存器地址通常是由MCU廠商或使用者分配,而本身是不具有地址資訊的,這一給儲存器分配地址的過程為儲存器對映;

四、暫存器對映

1、暫存器即為自己使用時設定的名稱,該名稱為給具有特定功能記憶體單元所取,且該單元已分配好地址;

2、而這個設定過程即為暫存器對映;

五、訪問暫存器內容

1、採用的方式主要是透過指標的使用來操作STM32記憶體單元;

如設定STM32的GPIOC 0管腳輸出低電平;

首先確定GPIOC掛接於APB2總線上,確定其地址;

STM32匯流排地址

匯流排名稱 匯流排基地址 相對外設基地址的偏移

APB1 0x4000 0000 0x0

APB2 0x4001 0000 0x0001 0000

AHB 0x4001 8000 0x0001 8000

3、宏定義外設基地址

#define MS_BASE ((unsigned int)0x40000000)

4、分別定義APB2匯流排基地址

#define APB2MS_BASE (MS_BASE + 0x00010000)

5、宏定義埠外設地址

#define GPIOC_BASE (APB2MS_BASE + 0x1000)

定義GPIOC埠暫存器地址

#define GPIOC_BSRR *(unsigned int*)(GPIOC_BASE+0x10)

STM32 ARM學習錦集一

A、BSRR暫存器的BR0置 1為清零,GPIOC引腳0管腳,輸出低電平;GPIOC_BSRR = (0x01<<(16+0));

B、BSRR 暫存器的BS0置1,GPIOC 0管腳輸出高電平;

GPIOC_BSRR = 0x01<<0;

讀IDR暫存器可知GPIOC全部引腳電平狀態;

輸入資料暫存器(GPIOx_IDR),其在每個APB2時鐘週期都會捕捉I/O引腳上的資料;

unsigned int temp;

temp = GPIOC_IDR;

淺談GPIO結構

六、GPIO工作模式

通用輸入輸出埠統稱;

輸入浮空

輸入高阻抗,外部干擾對輸入狀態下的影響較小

STM32 ARM學習錦集一

輸入上拉

3、輸入下拉

4、模擬輸入

5、開漏輸出

只可輸出低電平,輸出高電平需要外接上拉;

開漏輸出具有線與功能,當內部出現一個匯流排動作為低,則輸出全部為低,如I2C的使用;

STM32 ARM學習錦集一

開漏複用功能

STM32 ARM學習錦集一

7、推輓式輸出

8、推輓式複用功能

推輓輸出開關效率高,驅動能力強;

灌電流即為輸出高電平,電流輸出到負載;

七、安裝KEIL5

Keil5需要單獨安裝晶片包,否則無法選擇晶片型別,Keil4則可以不用此操作。

晶片包直接雙擊安裝在KEIL5相應的目錄即可;

使用註冊機破解;

1、管理員身份執行KEIL5;

2、File-LicenseManagement;

STM32 ARM學習錦集一

3、複製程式碼;

STM32 ARM學習錦集一

4、Add LIC,完成破解;

STM32 ARM學習錦集一

八、GPIO初始化

1、確定GPIO的工作模式和工作速度

透過配置暫存器GPIOx_CRL、GPIOx_CRH;

輸出內容

置/復位暫存器:BSRR;

資料輸出暫存器:ODR;

九、埠配置及輸出模式

STM32 ARM學習錦集一

STM32 ARM學習錦集一

十、啟動檔案功能

1、初始化堆疊指標SP;

2、初始化程式計數器指標PC;

3、設定堆/棧的大小;

A、堆是程式在執行時,申請/給予記憶體的過程,由系統自動分配釋放;

B、棧/堆疊是指一種使用堆的方法-先進後出,由程式設計師分配釋放;

4、設定中斷向量表入口地址;

5、配置外部SRAM作為資料儲存器;

6、呼叫 SystemInit() 函式配置系統時鐘;

ARM Cortex微控制器軟體介面標準CMSIS;

十一、韌體庫檔案

1、標準外設庫稱為韌體庫;

2、是一個韌體函式包,由程式、資料結構、宏組成;

3、使用韌體庫可減少程式編寫開發時間;