安裝包連結:keil https://pan.baidu.com/s/1o934WcU
proteus www.zhanshaoyi.com/14398.html
安裝教學參照微信公眾號軟體智庫中的教學
首先開啟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 就會出現不成功的現象,之前筆者也是為勾選此按鈕,就未成功偵錯
勾選之後 偵錯就是此畫面
結語:在安裝軟體的時候,要注意根據教學選擇點選哪些按鈕,在使用時,也要勾選一些選項,不然不能正常完成偵錯和模擬!
筆者這裡選擇的是中斷和定時
程式碼及編譯如下
#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次