2020-10-08

    科技2025-07-28  21

    ARM开发环境入门及51与32的主要区别

    本文软件使用的是proteus及MDK5,具体安装过程可在搜索proteus和MDK5的安装教程

    文章目录

    ARM开发环境入门及51与32的主要区别前言一、应用区别二、程序示例1.STM32:2.C51 总结:


    前言

    本文软件使用的是proteus及MDK5,具体安装过程可在搜索proteus和MDK5的安装教程,本文主要讲的是STM32与51的对比。 可参考以下安装教程链接: MDK5 Proteus


    以下是本篇文章主要内容,下面案例可供参考

    一、应用区别

    51单片机是对所有兼容Intel8031指令系统的单片机的统称,这一系列的单片机的始祖是Intel的8031单片机,后来随着flash ROM技术的发展,8031单片机取得了长足的进展成为了应用最广泛的8bit单片机之一,他的代表型号就是ATMEL公司的AT89系列。 STM32单片机则是ST(意法半导体)公司使用arm公司的cortex-M3为核心生产的32bit系列的单片机,他的内部资源(寄存器和外设功能)较8051、AVR和PIC都要多的多,基本上接近于计算机的CPU了,适用于手机、路由器等等。

    具体区别可参考:链接

    二、程序示例

    1.STM32:

    代码如下(示例): 主函数:

    #include "stm32f10x.h" #include "led.h" int main(void) { LED_Init();//初始化LED while(1){ GPIO_ResetBits(GPIOC,GPIO_Pin_0);//让PC_0口输出为低电平,从而使灯0亮 Delay(100);//延时100ms GPIO_SetBits(GPIOC,GPIO_Pin_0);//灯0灭 GPIO_ResetBits(GPIOC,GPIO_Pin_1);//灯1亮 Delay(100); GPIO_SetBits(GPIOC,GPIO_Pin_1);//灯1灭 GPIO_ResetBits(GPIOC,GPIO_Pin_2);//灯2亮 Delay(100); GPIO_SetBits(GPIOC,GPIO_Pin_2);//灯2灭 GPIO_ResetBits(GPIOC,GPIO_Pin_3);//灯3亮 Delay(100); GPIO_SetBits(GPIOC,GPIO_Pin_3);//灯3灭 GPIO_ResetBits(GPIOC,GPIO_Pin_4);//灯4亮 Delay(100); GPIO_SetBits(GPIOC,GPIO_Pin_4);//灯4灭 GPIO_ResetBits(GPIOC,GPIO_Pin_5);//灯5亮 Delay(100); GPIO_SetBits(GPIOC,GPIO_Pin_5);//灯5灭 GPIO_ResetBits(GPIOC,GPIO_Pin_6);//灯6亮 Delay(100); GPIO_SetBits(GPIOC,GPIO_Pin_6);//灯6灭 GPIO_ResetBits(GPIOC,GPIO_Pin_7);//灯7亮 Delay(100); GPIO_SetBits(GPIOC,GPIO_Pin_7);//灯7灭 GPIO_ResetBits(GPIOC,GPIO_Pin_0);//灯1亮 Delay(100);}}

    delay:

    void Delay(u16 t) { u32 i; while(t--) for(i=1;i<1000;i++); }

    stm32f10x.h部分代码:

    #define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) #define GPIOB ((GPIO_TypeDef *) GPIOB_BASE) #define GPIOC ((GPIO_TypeDef *) GPIOC_BASE) #define GPIOD ((GPIO_TypeDef *) GPIOD_BASE) #define GPIOE ((GPIO_TypeDef *) GPIOE_BASE) #define GPIOF ((GPIO_TypeDef *) GPIOF_BASE) #define GPIOG ((GPIO_TypeDef *) GPIOG_BASE)

    仿真电路图:

    仿真效果图

    注意事项: proteus仿真的时候要将VCCA和VSSA接入电网,及design中的configuration power 要将VSSA加入右边。

    2.C51

    #include <reg52.h> #include <intrins.h> typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; void Delay100ms() //100ms { unsigned char i, j, k; _nop_();_nop_(); i = 5;j = 52;k = 195; do{do{while (--k);} while (--j);} while (--i); } void main() { u8 LEDLogic = 0; //指示第几个灯 bit Dir = 1; //控制流水灯依次亮灭的方向 while(1) { if(Dir) //正方向,灯由P0.0向P0.1亮 P0 = ~(0x01<<LEDLogic); //先将要亮灯的某一位置1,其余置0,然后取反,就变为只有指定位为0 else P0 = ~(0x80>>LEDLogic); if(LEDLogic==7) LEDLogic = !Dir; //到了最后一个灯,改变灯的亮灭方向 LEDLogic = (LEDLogic+1)%8; // 每次加一,%8保证 LEDLogic 取值在0~7之间 Delay100ms(); //延时100ms } }

    仿真图:


    总结:

    C51可以直接通过对寄存器的输出赋值,而STM32赋值的时候需要位操作,这样能够提高单片机运行的效率,能够是单片机反应更迅速,而且,STM32封装得也比51完善,能够实现更多的功能。

    Processed: 0.012, SQL: 8