文章目录
一、学习内容二、MDK1.MDK安装2.MDK注册3.stm32安装4.运行一个简单的STM32程序(LED灯闪烁)代码部分
三、Proteus仿真代码proteus流水灯原理图仿真结果
一、学习内容
安装mdk5软件和stm32包,熟悉mdk开发环境,完成一个stm32的简单程序的编译安装并熟悉Proteus 电路仿真软件,完成一个51程序设计和仿真。
二、MDK
1.MDK安装
点击next
点击 I agree… 选择安装路径(注意路径中不要存在中文字符) 填写基本信息 稍等片刻
2.MDK注册
打开keil,点击文件选择 license management… 复制CID 将复制的CID填入,再点击Generate.注意:运行前关闭系统防火墙
将新生成的ID填入,再点击Add LIC即可
3.stm32安装
4.运行一个简单的STM32程序(LED灯闪烁)
打开keil,点击 new uvision project… 新建文件保存 选择stm32芯片 点击file,新建
代码部分
#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)
#define GPIOB_ODR_Addr (GPIOB_BASE+12)
#define GPIOC_ODR_Addr (GPIOC_BASE+12)
#define GPIOD_ODR_Addr (GPIOD_BASE+12)
#define GPIOE_ODR_Addr (GPIOE_BASE+12)
#define GPIOF_ODR_Addr (GPIOF_BASE+12)
#define GPIOG_ODR_Addr (GPIOG_BASE+12)
#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))
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
->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);
}
}
保存 注意文件后缀为.c 右键点击source group 1 编译(点击最右边那个) 编译结果
三、Proteus仿真
选择AT89C51芯片
代码
新建文本写入代码
#include <reg51.h>
#include <intrins.h>
void delay_ms(int a
)
{
int i
,j
;
for(i
=0;i
<a
;i
++)
{
for(j
=0;j
<1000;j
++) _nop_();
}
}
void main(void)
{
while(1)
{
P0
=0xfe;
delay_ms(50);
P0
=0xfd;
delay_ms(50);
P0
=0xfb;
delay_ms(50);
P0
=0xf7;
delay_ms(50);
P0
=0xef;
delay_ms(50);
P0
=0xdf;
delay_ms(50);
P0
=0xbf;
delay_ms(50);
P0
=0x7f;
delay_ms(50);
}
}
点击output,勾选create hex file. 已生成hex文件
proteus流水灯原理图
在program file 中找到hex文件,点击OK. 点击最左边按键开始仿真
仿真结果