mdk5軟體和stm32包的安裝以及stm32程式「LED閃爍」偵錯,用Proteus模擬一個51程式設計和模擬

2020-10-08 12:01:04

mdk5軟體和stm32包的安裝以及stm32程式「LED閃爍」偵錯,用Proteus模擬一個51程式設計和模擬

一.mdk的安裝以及stm32包的安裝

1.mdk的安裝

1.1雙擊安裝包出現如下介面,點選next。

在這裡插入圖片描述

1.2.點選next。

在這裡插入圖片描述

1.3.把它的安裝路徑改一下,這裡我們把它裝在D槽,然後繼續點選next。

在這裡插入圖片描述

1.4.填入資訊,點選next。

在這裡插入圖片描述

1.5.安裝過程等幾分鐘。

在這裡插入圖片描述

1.6.若安裝過程彈出如下介面,點選安裝。

在這裡插入圖片描述

1.7.安裝完成,點選Finish。

在這裡插入圖片描述

1.8.自動更新支援包,也可以直接退出,自己去下載安裝。

在這裡插入圖片描述

1.9.雙擊安裝包,出現以下介面,點選next。

在這裡插入圖片描述

1.10.等待安裝完成。

在這裡插入圖片描述

1.11.點選Finish。

在這裡插入圖片描述

二.stm32的程式例子偵錯

1.mak中建立工程檔案

點選project,點選New uVision project 建立工程
在這裡插入圖片描述
點選New建立一個文字檔案,
在這裡插入圖片描述

輸入程式
在這裡插入圖片描述
然後儲存,自己定義檔名字尾加.c,
在這裡插入圖片描述
儲存之後將檔案新增到工程中。
在這裡插入圖片描述
進行編譯
在這裡插入圖片描述
編譯無錯
在這裡插入圖片描述
程式碼例子如下:

#define PERIPH_BASE           ((unsigned int)0x40000000)
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)
#define GPIOA_BASE            (APB2PERIPH_BASE + 0x0800)
#define GPIOB_BASE            (APB2PERIPH_BASE + 0x0C00)
#define GPIOC_BASE            (APB2PERIPH_BASE + 0x1000)
#define GPIOD_BASE            (APB2PERIPH_BASE + 0x1400)
#define GPIOE_BASE            (APB2PERIPH_BASE + 0x1800)
#define GPIOF_BASE            (APB2PERIPH_BASE + 0x1C00)
#define GPIOG_BASE            (APB2PERIPH_BASE + 0x2000)
#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 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 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;
 
#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;
        Delay_ms(500);
        LED0=1;
        Delay_ms(500);
    }
}

三.proteus中模擬51微控制器的範例流水燈

1.類比電路

在這裡插入圖片描述
原件如下圖:
在這裡插入圖片描述

2.在keil c51,輸入以下程式碼,編譯生成hex檔案

#include <reg51.h>
void delay(void) 
{ 
 unsigned char i ,j; 
 for(i=0;i<250;i++) 
 for(j=0;j<250;j++); 
}
void main(void) 
{ 
 while(1) 
 { 
   P0=0xfe; 
  delay(); 
  P0=0xfd; 
  delay(); 
  P0=0xfb; 
  delay(); 
  P0=0xf7; 
  delay(); 
  P0=0xef; 
  delay(); 
  P0=0xdf; 
  delay(); 
  P0=0xbf; 
  delay(); 
  P0=0x7f; 
  delay(); 
 } 
}

3.在protues中雙擊51微控制器,裝載hex檔案

點選確定
在這裡插入圖片描述

4.進行模擬

模擬結果如圖
在這裡插入圖片描述
可以看到LED燈的閃爍。

四.總結

以上就是mdk和stm32包的安裝以及stm32程式的偵錯,這裡stm32沒有硬體,所以只看編譯結果。用protues和keil51做了一個流水燈的模擬實驗。因為是初學者,我對於mdk和sym32 的瞭解肯定不夠,所以在這裡面肯定有很多問題,希望大家指正。