ARM开发环境入门

    科技2025-07-21  14

    目录

    一、问题描述

    二、设置开发环境

    1、下载MDK5和stm32压缩包

    2、安装MDK5和stm32

    3、MDK5注册

    4、设置MDK5

    三、stm32的简单程序的编译(LED闪烁)

    1、新建工程

    2、新建main.c文件

    3、编译程序

    4、仿真

    四、Proteus软件下进行51程序设计和仿真(数码管的显示)

    1、原理

    2、keil 完成数码管的显示的设计和hex头文件的生成

    3、proteus中完成原理图的绘制

    4、仿真

    五、总结

    一、问题描述

    安装mdk5软件和stm32包,熟悉mdk开发环境,完成一个stm32的简单程序的编译。安装过程可参考网上或者“STM32底座实验指导书”第1章。示例程序可以参考网上代码,或者“STM32底座实验指导书”第3章的“LED闪烁”。(注意,没有硬件之前,只能做程序的编译和仿真测试,无法下载到硬件上运行)

    安装并熟悉Proteus 电路仿真软件,完成一个51程序设计和仿真,可参考:http://m.elecfans.com/article/581557.html

    二、设置开发环境

    1.下载MDK5和stm32压缩包

    下载安装mdk5软件和stm32包,将压缩包解压后,我们就可以开始安装MDK5了。

    2、安装MDK5软件

    参考如下安装链接: 链接:https://pan.baidu.com/s/1pRuDNycUAU8f1duk_blm9g 提取码:lxy7

    3、MDK5注册

    运行keygen.exe(需要先解压,如果杀毒软件报毒,则暂时退出杀毒软件先),在CID栏,输入MDK License Management里面的CID号,点击Genrate,即可获得注册码,输入MDK License Management里面,完成注册。

    4、设置MDK5

    1)首先点击Edit→Configuration 2)设置编码形式为Chinese GB2312(Simplified),如果不设置,你从其它地方粘贴过来的代码含有中文的话,就会出现乱码,然后设置Tab size为4。 3)进入Color & Fonts,选中C/C++ Editor files,选中中间窗口内的元素后,可以在右侧修改样式,比如设置字体、大小、颜色、背景,Sample是设置后预览效果。

    三、stm32的简单程序的编译(LED闪烁)

    1、新建工程

    1)打开 Keil uVision5 ,并新建一个工程。

    2)在左侧的窗口内选择STM32芯片中的STM32F103RB,并保存。

    3)勾选相应的选项,并点击OK,工程创建完毕。

    2、新建main.c文件

    1)工程创建完毕后,在左上角点击新建文件,然后窗口出现了一个Text1的文件。 2)构建代码

    //宏定义,用于存放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);//延时时间 } }

    3)点击左上角保存按钮,在弹出的窗口内,输入文件名main.c(如果不加后缀,就不会是.c文件),点击保存,而后Text1文件就变成了main.c文件。 4)右键点击 Source Group 1 ,然后点击 Add Existing Files to Group …(在工程下添加main.c文件),选中main.c文件,再点击Add

    3、编译程序

    点击左上角编译按钮,开始编译程序,此时0错误,0警告,表示编译成功。

    4、仿真

    1)仿真前的设置 2)仿真

    四、Proteus软件下进行51程序设计和仿真(数码管的显示)

    1、原理

    用74LS373接成直通的方式作驱动 电路,阴极用非门74LS04反相门驱动,字形选择由P0口提供,位选择由P3口控制。使用共阴极数码管,阴极接地,阳极a-g分别接P0-P3的某个口的7位,将0~F的段码列成表,表的内容顺次从该口,数码管接P0口。在程序中用tab列出0-F的数,在通过一个while循环和其中的for循环,使p0(0-7)控制数码管的数字并输出,p30控制数码管的灯亮,从而实现数码管循环显示0-F。

    2、keil 完成数码管的显示的设计和hex头文件的生成

    1)在keil中新建工程和文本(如上LED闪烁的步骤实现) 注:打开keil 时选择AT89C51芯片

    2)编写代码

    #include<reg51.h> #define uint unsigned int #define uchar unsigned char sbit P32 =P3^0; main() { uint j; unsigned char i; uchar code tab[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};/*段码表*/ while(1) { P32=1; for(i=0;i<=15;i++) { P2=tab[i]; for(j=0;j<10000;j++);/*延时*/ } } }

    3)生成hex文件 点击图中第一个按钮

    选择Create HEX File,再编译一次即可生成hex文件

    3、proteus中完成原理图的绘制

    4、仿真

    五、总结

    本次作业的重点是让我们简要了解一下MDK5和stm32以及proteus的使用,难点主要是在安装这些软件上,而proteus的使用我们在上学期的单片机的学习中已经使用过了,本次嵌入式系统中对于它的使用应该说是温故而知新,而keil软件我们也不陌生了。总的来说,当你安装好这些软件后,接下来的操作都是比较简单的。

    Processed: 0.013, SQL: 9