ARM开发环境入门

    科技2024-05-07  91

    ARM开发环境入门

    1.完成一个stm32的简单程序编译2.完成一个51程序设计和仿真

    1.完成一个stm32的简单程序编译

    打开keil5 创建新工程 选择路径,输入文件名点击保存 随意选择一款芯片,点击ok 然后弹出来以下窗口,注意此处要这样勾选 然后创建新文件 然后把以下代码粘贴进去(此代码是控制led灯闪烁的代码)

    #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); } }

    点击保存 储存为.c文件 点击此处把.c文件加入工程 然后点击此处 在output中勾选Creat HEX File选项 现在就可以编译,执行并生成hex文件了

    2.完成一个51程序设计和仿真

    keil5默认不支持c51,要先添加C51V954a安装包, 可以去此处下载:链接:https://pan.baidu.com/share/init?surl=mh97gI8 提取码:5hik 下载后放到keil安装目录直接运行,然后全部默认点击下一步就可以了。 添加完成后就可以在创建工程时找到c51的芯片了 创建好工程后就可以创建文本写代码了,以下是动态数码管的代码:

    #include<reg52.h> #include<intrins.h> typedef unsigned char u8; typedef unsigned int u16; u8 code smgduan[16]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; void delay(u16 i) { while(i--); } void main() { u16 i; for(i=0;i<8;i++) { switch (i) { case 7:LSA=0,LSB=0,LSC=0;break; case 6:LSA=1,LSB=0,LSC=0;break; case 5:LSA=0,LSB=1,LSC=0;break; case 4:LSA=1,LSB=1,LSC=0;break; case 3:LSA=0,LSB=0,LSC=1;break; case 2:LSA=1,LSB=0,LSC=1;break; case 1:LSA=0,LSB=1,LSC=1;break; case 0:LSA=1,LSB=1,LSC=1;break; } P0=smgduan[i]; delay(50000); P0=0x00; } }

    然后添加到工程并编译执行生成hex文件: 接下来就可以进行仿真了。 打开protues新建工程,并添加8段数码管和c51 连线

    双击51单片机,点击下图中的地方,找到之前生成的hex文件添加进去。 然后就可以运行仿真了,效果图如下 参考文章:https://blog.csdn.net/farsight1/article/details/80984834

    Processed: 0.012, SQL: 9