目錄
- 一、環境配置
- 1、準備作業
- 2、安裝MDK軟體
- 3、安裝stm32 pack
- 4、MDK5.10注冊
- 1)關閉Win10的防火墻
- 2)獲取注冊碼
- 二、MDK5的簡單設定
- 三、一個stm32簡單程式編譯(LED閃爍)
- 1、新建工程
- 2、新建main.c檔案
- 3、編譯程式
- 4、stm32程式仿真除錯
- 1)除錯前的設定
- 2)開始除錯
- 四、總結
- 五、參考資料
MDK 源自德國的 KEIL 公司,是 RealView MDK 的簡稱,在全球 MDK 已經有超過 10 萬的嵌入式開發工程師使用,本文章主要是學習如何安裝MDK軟體及其配置,并熟悉MDK5開發環境,完成一個stm32的簡單程式(LED燈閃爍)的編譯、仿真除錯,
一、環境配置
1、準備作業
首先需要下載安裝mdk5軟體和stm32包,這里附帶配置MDK所需要的的包,
鏈接:https://pan.baidu.com/s/1f0nHjn7sSG8SK3waV_G1Pg
提取碼:94xf
將壓縮包解壓后,我們就可以開始安裝MDK了,
2、安裝MDK軟體
(1)雙擊打開mdk_510.exe應用程式檔案,點擊Next>>,


(2)勾選I agree…后,點擊Next>>,

(3)選擇安裝路徑,并點擊Next>>,

(4)隨意輸入Name和E-mail,再點擊Next>>,

(5)點擊安裝,

(6)點擊Finish,

(7)點擊OK后,滑鼠會變成轉圈圈的,因為正在進行在線安裝各種pack,但會安裝失敗,不用著急,右上角關掉視窗,下面開始手動安裝pack包,

3、安裝stm32 pack
(1)在剛解壓縮的檔案中,雙擊打開ARM.CMSIS.3.20.4包,出現安裝界面后點擊Next>>,開始安裝,


(2)點擊Finish,

(3)在剛解壓縮的檔案中,雙擊打開Keil.STM32F1xx_DFP.1.0.4包,出現安裝界面后點擊Next>>,開始安裝,


(4)安裝結束后點擊Finish,

(6)當雙擊2.2.0的STM32 pack時,會出現安裝失敗,是因為2.2.0版本的pack只支持更高版本的MDK軟體,如若想安裝上這個pack,可以去下載最新的MDK,這里我們只做學習用,1.0.4版本的足夠了,


現在MDK5軟體就安裝完畢了,相關的pack也手動安裝了,如果需要更多的pack可以去官網下載:https://www.keil.com/download/product/
4、MDK5.10注冊
安裝好MDK5.10需要進行注冊,不注冊是不能夠正常使用的,
1)關閉Win10的防火墻
注:如果不關閉,后續得到的注冊碼無法正常使用,
(1)打開控制面板,

(2)點擊系統和安全,

(3)點擊Windows Defender 防火墻,

(4)點擊左側的 啟用或關閉Windows Defender 防火墻,

(5)點擊 關閉 Windows Defender 防火墻(不推薦),再點擊確定(注:MDK注冊后,記得回傳來啟用防火墻)

2)獲取注冊碼
(1)解壓縮 keygen.rar 壓縮檔案,

(2)打開 KEIL_Lic 檔案夾,

(3)打開 keygen.exe 應用程式,(注意:打開后會有較為大聲的音樂,注意插上耳機或者調小音量或者靜音)


(5)以管理員身份運行,

(6)點擊File→License Management…

(7)選中 Single-User License目錄,復制右上角的CID備用,

(8)將復制的CID粘貼到①處,Target選為ARM,再點擊Generate,在④處即可生成注冊碼,將注冊碼復制,以備用,

(9)將注冊碼粘貼至紅色方框內,并點擊Add LIC,此時就注冊完畢了,點擊Close(注:第一次注冊時,藍色方框內應是黑色字體,我這里顯示的是紅色,因為之前注冊成功過)

到此,MDK的環境配置就已經完成了,
二、MDK5的簡單設定
下載好了MDK5后,我們需要進行一些簡單的設定
(1)首先點擊Edit→Configuration…,或者直接點工具列的扳手圖示,進入設定界面,

(2)設定編碼形式為Chinese GB2312(Simplified),如果不設定,你從其它地方粘貼過來的代碼含有中文的話,就會出現亂碼,然后設定Tab size為4,

(3)進入Color & Fonts,選中C/C++ Editor files,選中中間視窗內的元素后,可以在右側修改樣式,比如設定字體、大小、顏色、背景,Sample是設定后預覽效果,

三、一個stm32簡單程式編譯(LED閃爍)
現在安裝好了MDK和stm32包,就來開始一個stm32的簡單程式的編譯,
1、新建工程
(1)打開 Keil uVision5 ,并新建一個工程,


(2)在左側的視窗內選擇STM32芯片,這里我們選擇STM32F103RB,并保存,

(3)勾選相應的選項,并點擊OK,這樣工程創建完畢,

2、新建main.c檔案
(1)工程創建完畢后,在左上角點擊新建檔案,然后視窗出現了一個Text1的檔案,

(2)然后將下列代碼復制粘貼到Text1文本框內,
//宏定義,用于存放stm32暫存器映射
#define PERIPH_BASE ((unsigned int)0x40000000)//AHB
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)
//GPIOA_BASE=0x40000000+0x10000+0x0800=0x40010800,該地址為GPIOA的基地址
#define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00)
//GPIOB_BASE=0x40000000+0x10000+0x0C00=0x40010C00,該地址為GPIOB的基地址
#define GPIOC_BASE (APB2PERIPH_BASE + 0x1000)
//GPIOC_BASE=0x40000000+0x10000+0x1000=0x40011000,該地址為GPIOC的基地址
#define GPIOD_BASE (APB2PERIPH_BASE + 0x1400)
//GPIOD_BASE=0x40000000+0x10000+0x1400=0x40011400,該地址為GPIOD的基地址
#define GPIOE_BASE (APB2PERIPH_BASE + 0x1800)
//GPIOE_BASE=0x40000000+0x10000+0x0800=0x40011800,該地址為GPIOE的基地址
#define GPIOF_BASE (APB2PERIPH_BASE + 0x1C00)
//GPIOF_BASE=0x40000000+0x10000+0x0800=0x40011C00,該地址為GPIOF的基地址
#define GPIOG_BASE (APB2PERIPH_BASE + 0x2000)
//GPIOG_BASE=0x40000000+0x10000+0x0800=0x40012000,該地址為GPIOG的基地址
#define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C
#define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C
#define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C
#define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C
#define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C
#define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C
#define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x40011E0C
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
#define LED0 MEM_ADDR(BITBAND(GPIOA_ODR_Addr,8))
//#define LED0 *((volatile unsigned long *)(0x422101a0)) //PA8
//定義typedef型別別名
typedef struct
{
volatile unsigned int CR;
volatile unsigned int CFGR;
volatile unsigned int CIR;
volatile unsigned int APB2RSTR;
volatile unsigned int APB1RSTR;
volatile unsigned int AHBENR;
volatile unsigned int APB2ENR;
volatile unsigned int APB1ENR;
volatile unsigned int BDCR;
volatile unsigned int CSR;
} RCC_TypeDef;
#define RCC ((RCC_TypeDef *)0x40021000)
//定義typedef型別別名
typedef struct
{
volatile unsigned int CRL;
volatile unsigned int CRH;
volatile unsigned int IDR;
volatile unsigned int ODR;
volatile unsigned int BSRR;
volatile unsigned int BRR;
volatile unsigned int LCKR;
} GPIO_TypeDef;
//GPIOA指向地址GPIOA_BASE,GPIOA_BASE地址存放的資料型別為GPIO_TypeDef
#define GPIOA ((GPIO_TypeDef *)GPIOA_BASE)
void LEDInit( void )
{
RCC->APB2ENR|=1<<2; //GPIOA 時鐘開啟
GPIOA->CRH&=0XFFFFFFF0;
GPIOA->CRH|=0X00000003;
}
//粗略延時
void Delay_ms( volatile unsigned int t)
{
unsigned int i,n;
for (n=0;n<t;n++)
for (i=0;i<800;i++);
}
int main(void)
{
LEDInit();
while (1)
{
LED0=0;//LED熄滅
Delay_ms(500);//延時時間
LED0=1;//LED亮
Delay_ms(500);//延時時間
}
}
(6)復制粘貼完后,點擊左上角保存按鈕,在彈出的視窗內,輸入檔案名main.c(如果不加后綴,就不會是.c檔案),點擊保存,而后Text1檔案就變成了main.c檔案,

(7)右鍵點擊 Source Group 1 ,然后點擊 Add Existing Files to Group …(在工程下添加main.c檔案)

(8)選中main.c檔案,再點擊Add,然后關閉視窗,此時你會發現,Source Group 1 檔案下新增了一個main.c檔案,

3、編譯程式
點擊左上角編譯按鈕,開始編譯程式,此時0錯誤,0警告,表示編譯成功,

4、stm32程式仿真除錯
1)除錯前的設定
(1)首先點擊 魔法棒,然后在彈出的視窗內,點擊 Debug,勾選 Use Simulator ,再選擇 ULINK2/ME Cortex Debugger ,并點擊 Settings ,

(2)確定一下Port是JTAG,Reset可以設定為Autodetect或SYSRESEETREQ,然后點擊OK回傳上一級視窗,再點擊OK,

2)開始除錯
選中帶有紅色d的放大鏡開始除錯,在②處就是仿真除錯所需要的除錯工具,

四、總結
因為沒有接入硬體設施,所以只能先進行程式的編譯和仿真測驗,而沒有辦法下載到硬體上運行,這個LED燈閃爍的代碼不用深入了解,只是進行一個簡單的程式編譯除錯,這篇文章的重點是學會如何安裝MDK軟體、建立工程、撰寫代碼、編譯程式、仿真除錯,希望能幫到你,
五、參考資料
1、如何開始一個stm32的簡單程式的編譯
2、《STM32底座實驗指導書》
鏈接:https://pan.baidu.com/s/13vxZ8cFsdt8zwPSCz0gFDA
提取碼:g2q6
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/161433.html
標籤:其他
上一篇:PIC16F887 單片機 proteus 紅外遙控燈光控制系統
下一篇:阻塞式編程和非阻塞式編程區別
