Linxu磁盘 sed module triggers vue树形菜单 bootstrap管理系统模板 react脚手架 河南普通话考试报名 jquery获取下一个元素 excel动态图表制作 wps临时文件 git下载代码到本地命令 mysql函数返回结果集 flutter 缺点 python安装教程 pythonset python语言编程入门 python环境变量配置 java字符串 java重写和重载的区别 java中continue java获取当前线程 java获取文件大小 java获取数据类型 java求阶乘 java连接mysql的jar包 java网页 linux操作系统原理 corelpainter stata软件 忧思华光玉 隐藏虚拟键 bat脚本 网络文件服务器 谷歌地球用不了 思源字体 电脑待机费电吗 diskman onaccuracychanged ipad怎么清理内存垃圾
当前位置: 首页 > 学习教程  > 编程语言

stm32简单程序编译及完成51程序设计与仿真

2020/10/8 20:20:33 文章标签:

stm32简单程序编译及完成51程序设计与仿真 目录stm32简单程序编译及完成51程序设计与仿真一.stm32简单程序编译1.环境配置1.1安装MDK52.编译stm程序---闪烁LED2.1 建立一个工程2.2 仿真测试二.51程序设计与仿真1.建立工程1.1 打开Keil uVision5,点击Project→New uVision Proje…

stm32简单程序编译及完成51程序设计与仿真

目录

  • `stm32`简单程序编译及完成51程序设计与仿真
  • 一.`stm32`简单程序编译
    • 1.环境配置
      • 1.1安装`MDK5`
    • 2.编译stm程序---闪烁`LED`
      • 2.1 建立一个工程
      • 2.2 仿真测试
  • 二.51程序设计与仿真
    • 1.建立工程
      • 1.1 打开`Keil uVision5`,点击`Project`→`New uVision Project`,选择AT89C51单片机,选择否
      • 1.2点击`file`→`New `保存
      • 1.3 右击`Source Group 1`→`Add file to group`
      • 1.4 编写代码
      • 1.5生成`Hex`文件
    • 2.仿真
      • 2.1双击原理图中`AT89C51 `芯片
      • 2.2 开始仿真及效果
  • 三.总结

一.stm32简单程序编译

1.环境配置

1.1安装MDK5

  • 官网网址下载
    http://www.keil.com/download/product.
  • 百度网盘分享(包中含安装教程与支持包)
    链接: https://pan.baidu.com/s/1pUtNTA3NQ7fDBf0pl9rlrw
    提取码:lzzz

2.编译stm程序—闪烁LED

2.1 建立一个工程

  • 打开Keil uVision5,点击ProjectNew uVision Project
    在这里插入图片描述在这里插入图片描述

  • 选择芯片
    在这里插入图片描述

  • 设置Run-Time Environment,点击OK建立完工程。
    在这里插入图片描述

  • 建立主程序main.c, 打开Target 1Source Group1(右键点击)→Add New Item
    在这里插入图片描述
    在这里插入图片描述

  • 编写代码

#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类型别名
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);//延时时间
     }
}
  • 编译结果
    在这里插入图片描述

2.2 仿真测试

  • 点击工具栏中的红框标志在这里插入图片描述
  • 根据序号点击
    在这里插入图片描述
  • 确定后,点击Start进行仿真测试
    在这里插入图片描述
    在这里插入图片描述

二.51程序设计与仿真

1.建立工程

1.1 打开Keil uVision5,点击ProjectNew uVision Project,选择AT89C51单片机,选择否

在这里插入图片描述

1.2点击fileNew保存

在这里插入图片描述

1.3 右击Source Group 1Add file to group

在这里插入图片描述

1.4 编写代码

//51单片机编程常用的头文件
	#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);
		}
	}

1.5生成Hex文件

在这里插入图片描述

2.仿真

2.1双击原理图中AT89C51芯片

在这里插入图片描述

2.2 开始仿真及效果

在这里插入图片描述

三.总结

熟悉了Proteus电路仿真软件,初步学习了如何建立stm32的工程与51程序设计。


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

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?