开源商城系统 图像处理 http database asynchronous concurrency stack architecture swagger lazyloadjs vue论坛 bootstrap后台模板 git视频 jquery关闭当前窗口 mysql批量更新数据 matlab求向量的模 range函数python windows搭建python开发环境 python命令大全 java变量类型 java初级教程 java链接mysql数据库 linux如何安装 kafka中文教程 python视频教程 bcdautofix 修改mac地址软件 swing布局 网络电视软件下载 灼热峡谷 删除数组中的某个元素 苹果手机老是自动重启 临时会话 robotstudio 社区网格化管理平台 脚本列表 windowsjs延时函数 平原门下客三千 js刷新当前页面 appsync补丁
当前位置: 首页 > 学习教程  > 编程语言

熟悉MDK,stm32的简单程序编译,以及用proteus进行51程序设计和仿真

2020/10/8 18:17:08 文章标签:

MDK环境下stm32的简单程序编译以及用proteus进行51程序设计和仿真 ARM开发环境入门MDK环境下stm32的简单程序编译以及用proteus进行51程序设计和仿真一 mdk5软件和stm32包的安装二 一个stm32的简单程序编译三 一个51程序设计和仿真一 mdk5软件和stm32包的安装 1 下载压缩包&am…

MDK环境下stm32的简单程序编译以及用proteus进行51程序设计和仿真

ARM开发环境入门

    • MDK环境下stm32的简单程序编译以及用proteus进行51程序设计和仿真
  • 一 mdk5软件和stm32包的安装
    • 二 一个stm32的简单程序编译
      • 三 一个51程序设计和仿真

一 mdk5软件和stm32包的安装

1 下载压缩包,解压后打开安装程序。

2 选择同意
在这里插入图片描述
3 完成注册
在这里插入图片描述
安装完成。

二 一个stm32的简单程序编译

1 创建一个新的工程项目
在这里插入图片描述
选project栏第一项创建。
2 选取CPU并设置参数。
在这里插入图片描述
在这里插入图片描述
3 用C语言编写一个源程序,代码如下。(代码来源于网络)

//宏定义,用于存放stm32寄存器映射
#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;
 
#define RCC ((RCC_TypeDef *)0x40021000)
//定义typedef类型别名
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;
//GPIOA指向地址GPIOA_BASE,GPIOA_BASE地址存放的数据类型为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;//LED熄灭
         Delay_ms(500);//延时时间
         LED0=1;//LED亮
         Delay_ms(500);//延时时间
     }
}



在这里插入图片描述
4 将C文件加入到工程项目中,右键source group 选第三行添加。
在这里插入图片描述

在这里插入图片描述
添加成功。
5 编译文件。
在这里插入图片描述
编译成功。
6 对程序进行仿真测试。
依次选择下如下选项
在这里插入图片描述
在这里插入图片描述
可得仿真
在这里插入图片描述

三 一个51程序设计和仿真

本实验很基础,即用单片机点亮一个灯泡并让灯泡不停闪烁。
1
新建一个工程项目并在下栏选择ATM89C51。
在这里插入图片描述
2
生成文件方法同任务一一致,在此不再赘述。

#include<reg51.h>
 
sbit P1_3 = P1^3; 
 
void delay(int n)
{
	int i = 0;
	int j = 0;
	for(i = n; i > 0; i--)
	{
		for(j = 110; j > 0; j--)
		{
			;
		}
	}
}
 
void main() 
{
	int i = 0;
	while(1)
	{
		P1_3 = (i++ % 2)? 0 : 1  ;
		delay(200);
	}
}

在这里插入图片描述
3 生成hex文件
在这里插入图片描述
4在pro画出原理图。
在这里插入图片描述
5 将hex文件导入后得仿真
在这里插入图片描述


本文链接: http://www.dtmao.cc/news_show_250037.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?