ARM開發環境入門:keil與proteus的簡單程式的熟悉

2020-10-09 15:01:26

安裝mdk5,stm32與proreus

安裝包連結:keil https://pan.baidu.com/s/1o934WcU
proteus www.zhanshaoyi.com/14398.html
安裝教學參照微信公眾號軟體智庫中的教學

參考網上程式碼,完成一個STM32簡單程式的編譯

首先開啟keil5,將Encoding設定成Chinese GB2312

在這裡插入圖片描述
Tab size 從2調成4,並點選上面的Colors&Fonts

在這裡插入圖片描述
選擇C/C++ 可以偵錯顏色 我們這裡選擇預設的規格

下面我們可以做一個簡單的STM32的程式編譯:

以下建立一個新檔案,選擇晶片 我們這裡選擇STM32F103RB晶片
在這裡插入圖片描述
勾選以下選項
在這裡插入圖片描述
然後建立完成 將程式碼貼上至文字中

在這裡插入圖片描述
(程式碼源來自於百度百科)

#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;
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);//延時時間
     }
}

儲存後記得將字尾改成main1.c 如果沒有加.c檔案就不是.c檔案

在這裡插入圖片描述
然後新增將形成的main1.c新增至工程 再點編譯按鈕
在這裡插入圖片描述
0警告 0錯誤 就表示編譯成功
接下來就是stm32的模擬偵錯(由於沒有硬體,只能做程式的編譯喝模擬測試,無法下載到硬體上執行)

在這裡插入圖片描述

首先點選target1右邊的那個按鈕,選擇debug,選擇如下按鈕。

在這裡插入圖片描述
如果未選擇 Use Simuator 就會出現不成功的現象,之前筆者也是為勾選此按鈕,就未成功偵錯

在這裡插入圖片描述
勾選之後 偵錯就是此畫面

在這裡插入圖片描述

結語:在安裝軟體的時候,要注意根據教學選擇點選哪些按鈕,在使用時,也要勾選一些選項,不然不能正常完成偵錯和模擬!

完成一個51程式設計和模擬

筆者這裡選擇的是中斷和定時
程式碼及編譯如下
在這裡插入圖片描述

#include<reg51.h>
sbit pl_0=pl^0;
void main()
{
TMOD=OXO6;
THO=-10;
TLO=-10;
TRO=1;
while(TFO==0)
pl_0=~pl_0;

}

程式碼來自
李群芳:
《微控制器微型計算機與介面技術》

將程式碼生成hex檔案,連結: 如何生成hex檔案

模擬圖如下:
在這裡插入圖片描述
雙擊晶片,將生成的hex檔案放入晶片中

在這裡插入圖片描述
每秒led快速閃爍10次
在這裡插入圖片描述
在這裡插入圖片描述