ARM開發環境入門(嵌入式作業二)
一.MDK5軟體和stm32包的安裝
1.開啟我們下載好的mdk5安裝包裡面的mdk_510.exe,如下圖所示:
2.在出現提示框之後,點選next進行下一步:
3.勾選箭頭所示的條文,點選next進行下一步:
4.選擇要安裝到的儲存位置,進行下一步操作(注意:在選擇安裝位置時,安裝位置檔案的名稱要用英文名,不能出現中文字元和漢字,否則在後續的安裝過程中可能會出現安裝失敗的問題和一些錯誤的彈框):
5.編輯自己相應的名稱和郵箱,再進行下一步:
6.等待安裝:
7.點選finish完成mdk5的安裝:
8.mdk5完成安裝之後,會彈出一個視窗框,我們點選ok後關閉即可:
9.再進行stm32包的安裝,我們首先安裝第一個箭頭的包:
10.第一個包點選開啟之後,出現該提示框,點選next繼續等待安裝完畢點選finish即可:
11.再安裝第二三個包,與上一述步驟一樣(但安裝第三個包時會發現:當雙擊第三個包,會出現安裝失敗,是因為2.2.0版本的pack只支援更高版本的MDK軟體,如若想安裝上這個pack,可以去下載最新的MDK,這裡我們只做學習用,1.0.4版本的足夠用,沒有影響)
至此mdk5和stm32均已安裝完畢,將進行下面的步驟用於啟用。
二.MDK5軟體的註冊
1.前面我們已經安裝好了mdk5軟體,現在我們將進行註冊並啟用它,首先我們應將電腦防火牆關閉(不關閉防火牆可能會導致註冊失敗):
2.開啟我們安裝包裡面箭頭所示的檔案:
3.會出現如下視窗,我們將箭頭所示的C51選擇更改為ARM,暫時不要關閉該視窗:
4.我們再以管理員身份執行我們安裝好的的keil軟體:
5.開啟之後點選File,再點選箭頭所示的選項
6.會出現下面彈窗,我們再將箭頭所指的CID複製下來,返回前面第3步出現的彈框上進行貼上:
7.貼上CID之後,點選圖中的Generate可以得到一串字元,將其複製下來:
8.將複製的這串字元貼上到第6步出現的框中,再點選Add LIC,出現下圖上小箭頭所示的提示時,就證明註冊成功了:
9.註冊成功之後我們就可以使用該軟體進行工作學習了:
三.STM32簡單程式編譯
我們進行一個LED閃爍的實驗。
(開始之前我們需要進行一些引數的設定)如下圖所示:
點選箭頭所示的選項進入設定更改如下即可(這樣就會避免在後續貼上程式碼過程中的中文註釋出現亂碼):
1.a.首先開啟我們的keil軟體,新建一個工程,如圖所示:
然後輸入工程名稱並儲存:
1.b.在彈出的視窗中選擇箭頭所示的選項:
1.c.勾選對應的選項,再點選OK即可,至此工程建立完畢:
2.a.建立main.c檔案,然後在此編輯程式:
程式程式碼如下:
//巨集定義,用於存放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);//延時時間
}
}
2.b.將複製貼上好的程式碼進行儲存,即點選箭頭所示按鈕,再輸入檔名儲存即可生成main.c檔案:
2.c.再在Target中找到source group 1,右鍵點選,點選箭頭所指的選項
開啟後將main檔案Add進去,在進行編譯:
按照箭頭所示對main.c編譯之後無錯誤就代表編譯成功!:
四.安裝並熟悉Proteus電路模擬軟體,並完成一個51程式設計和模擬。
( 因為之前proteus在電腦上已經安裝,這裡不再做描述,具體可以參考:連結: link.裡面有安裝教程的描述。)
1.新建工程,按箭頭所示進行選擇相應的選項:
之後出現該文字框,再點選是:
2.因為後續需要一個.hex檔案,所以需要先修改一下設定,按下列步驟進行:
3.在左上角點選“File ”中選擇“New”,建立新檔案,進行編輯,編輯之後再進行編譯,編譯結果無錯誤如圖:
4.上面新檔案的編輯編譯的程式如下:
#include <reg51.h>
void delayms(unsigned int m) //延時程式
{
unsigned int a,b;
for(a=0; a<m; a++)
for(b=0; b<120; b++);
}
unsigned int a[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//分別顯示0 1 2 3 4 5 6 7 8 9
void main (void)
{
unsigned char n;
//定義初始化
while(1)
{
for(n=0; n<10; n++) //0-9迴圈顯示
{
P0 = a[n]; //數碼管輸出
delayms(500);
}
}
}
5.因為步驟3中編譯無錯誤已經生成了.hex檔案,所以現在進行後面的步驟
6.開啟proteus軟體,新建一個工程進去新增如下元件:
7.將原件連線成0-9計時器的電路原理圖:
8.雙擊電路圖的晶片,新增.hex檔案並確定:
9.執行模擬,得到如下結果,可以發現能夠正常計數:
最後,模擬無誤,0-9計時器模擬結束,能夠實現相關功能。
五.小結
通過本次實驗,讓我學會了如何正確的安裝MDK5和stm32包,並在過程中學到了很多新的知識和技巧;同時也深化了我對keil5軟體的使用和掌握。能夠正確的將keil5和proteus結合運用並進行模擬實驗,收益頗豐!本次作業的完成參考了該部落格:https://blog.csdn.net/qq_45189556/article/details/108944460
https://blog.csdn.net/qq_45907958/article/details/108951335
對此表示感謝!
最後附上MDK官方下載地址: http://www.keil.com/download/product/
相關文章
- ARM開發環境入門開發環境
- 嵌入式系統第三週ARM開發環境入門開發環境
- 嵌入式開發 ARM入門經典
- Flutter入門教程(二)開發環境搭建Flutter開發環境
- 安卓開發入門(一)開發環境搭建安卓開發環境
- 開發環境配置pyenv快速入門開發環境
- java入門:安裝開發環境Java開發環境
- Android開發入門之熟悉開發環境Android開發環境
- Flutter開發入門之開發環境搭建(VSCode搭建Flutter開發環境)Flutter開發環境VSCode
- Mac 後端入門開發環境搭建Mac後端開發環境
- 麒麟作業系統 (kylinos) 從入門到精通 - 研發環境 - 第十篇 Java開發及環境準備作業系統Java
- 麒麟作業系統 (kylinos) 從入門到精通 - 研發環境 - 第四十四篇 python開發環境搭建作業系統Python開發環境
- 寫作業系統之搭建開發環境作業系統開發環境
- 二、Rust 開發環境Rust開發環境
- 從零搭建嵌入式開發環境開發環境
- LEDE - Linux嵌入式開發環境Linux開發環境
- 搭建嵌入式Linux開發環境Linux開發環境
- QT開發快速入門-教程1:搭建QT開發環境QT開發環境
- Arduino可穿戴開發入門教程Arduino開發環境介紹UI開發環境
- 《Golang 從入門到跑路》之開發環境搭建Golang開發環境
- C++入門(3):C++開發環境搭建C++開發環境
- (二) electron 開發環境配置開發環境
- 麒麟作業系統 (kylinos) 從入門到精通 - 研發環境 - 第二十一篇 C++/C語言開發環境搭建作業系統C++C語言開發環境
- Elementary OS 作業系統:PHP 開發環境配置 (一)作業系統PHP開發環境
- 實現ARM+ROS(機器人作業系統)之環境搭建!ROS機器人作業系統
- Python GUI開發- PyQt5 開發小工具環境入門PythonGUIQT
- golang 快速入門 [2.1]-go 語言開發環境配置-windowsGolang開發環境Windows
- rust學習一、入門之搭建簡單開發環境Rust開發環境
- spring boot + vue + element-ui全棧開發入門——windows開發環境Spring BootVueUI全棧Windows開發環境
- mac搭建hadoop開發環境(二)MacHadoop開發環境
- SSM開發環境的搭建(方式二)SSM開發環境
- Qemu搭建ARM vexpress開發環境(二)----通過u-boot啟動Linux核心Express開發環境bootLinux
- 用 Docker 製作的 Laravel 開發環境DockerLaravel開發環境
- 使用 Docker 作為 Python 開發環境DockerPython開發環境
- openresty前端開發入門二REST前端
- OSDev Wiki——作業系統開發入門基礎(一)dev作業系統
- Laravel 入門篇之開發環境 Homestead 的安裝配置Laravel開發環境
- webpack4.0 入門篇 - 構建前端開發的基本環境Web前端