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 的了解肯定不够,所以在这里面肯定有很多问题,希望大家指正。