mdk5软件和stm32包 的安装并完成一个简单的stm32程序的编译
实验内容:(1)安装并熟悉mdk软件
(2)安装stm32包
(3)完成一个简单的stm32程序的编译
1.1MDK5简介:
MDK是目前针 对 ARM 处理器,尤其是 Cortex-M 内核处理器的最佳开发工具。MDK5 由两个部分组 成:MDKTools 和 SoftwarePacks,,MDK Tools 又分成三个部分:MDK-Core、ARMC/C++ Compiler 和 DS-MDK。MDK-Core 是基于 uVision IDE 和调试器,主要支持Cortex-M 和新的 Armv8-M 架构;ARMC/C++Compiler 包括两个编译器,带有汇 编器、连接器以及专为优化代码大小和性能的高度优化的运行时库;DS-MDK 包 括基于 eclipse 的 DS-5IDE 和调试器,支持 32 位 ARMCortex-A 处理器和广泛的 系统(32 位 ARMCortex-A 和 Cortex-M)。 SoftwarePacks 又分为:Device(芯片支持),CMSIS(ARMCortex 微控制器 软件接口标准)和 Mdidleware(中间库)三个部分。软件包可以随时添加到 MDK 的核心或 ds-mdk 以保证对新设备的支持和使中间件独立于工具链的更新。包括设 备支持、CMSIS 库、中间件、板支持、代码模板和例程。IPv4/IPv6 通信协议栈 也扩展了支持 ARM®mbed™软件部分,使物联网应用得以实现。
1.2MDK5的安装:
安装向导界面,点击next
![在这里插入图片描述](https://img.php1.cn/3cd4a/1eebe/cd5/0d80e8a685a9a87b.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k5ODk4OQ==,size_16,color_FFFFFF,t_70#pic_center)
勾选“I agree with all … Agreement",点击next
![在这里插入图片描述](https://img.php1.cn/3cd4a/1eebe/cd5/b428d8f746fb8d47.webp?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k5ODk4OQ==,size_16,color_FFFFFF,t_70#pic_center)
选择安装路径:
![在这里插入图片描述](https://img.php1.cn/3cd4a/1eebe/cd5/d67981797265d9c7.webp?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k5ODk4OQ==,size_16,color_FFFFFF,t_70#pic_center)
填写信息后点击next
![在这里插入图片描述](https://img.php1.cn/3cd4a/1eebe/cd5/8343fdbffb0056b5.webp?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k5ODk4OQ==,size_16,color_FFFFFF,t_70#pic_center)
等待安装:
![在这里插入图片描述](https://img.php1.cn/3cd4a/1eebe/cd5/a1be7872e8d4934f.webp?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k5ODk4OQ==,size_16,color_FFFFFF,t_70#pic_center)
安装完成,点击finish:
![在这里插入图片描述](https://img.php1.cn/3cd4a/18ace/696/1d8e759bd3e6bbec.jpeg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k5ODk4OQ==,size_16,color_FFFFFF,t_70#pic_center)
2.1 stm32简介
STM32 系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计 的 ARMCortex-M3 内核。按性能分成两个不同的系列:STM32F103“增强型”系 列和 STM32F101“基本型”系列。增强型系列时钟频率达到 72MHz,是同类产品 中性能最高的产品;基本型时钟频率为 36MHz,以 16 位产品的价格得到比 16 位产品大幅提升的性能,是 16 位产品用户的最佳选择。两个系列都内置 32K 到 128K 的闪存,不同的是 SRAM 的最大容量和外设接口的组合。时钟频率 72MHz 时,从闪存执行代码,STM32 功耗 36mA,是 32 位市场上功耗最低的产品,相 当于 0.5mA/MHz。
2.2 stm32包安装
ARM CMSIS 3.20.4安装
![在这里插入图片描述](https://img.php1.cn/3cd4a/1eebe/cd5/6c257b6ba227cc3e.webp?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k5ODk4OQ==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img.php1.cn/3cd4a/1eebe/cd5/433ea70d6ea577b1.jpeg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k5ODk4OQ==,size_16,color_FFFFFF,t_70#pic_center)
Keil STM32F1xx__DFP 1.0.4的安装
![在这里插入图片描述](https://img.php1.cn/3cd4a/1eebe/cd5/ddcc574beb16294e.jpeg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k5ODk4OQ==,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img.php1.cn/3cd4a/1e618/bdf/129913486c37ddf6.jpeg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k5ODk4OQ==,size_16,color_FFFFFF,t_70#pic_center)
3.1 STM32的简单程序编译:
MLED工程的创建:
选择STM32
![在这里插入图片描述](https://img.php1.cn/3cd4a/1eebe/cd5/70be2ca197098d98.webp?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k5ODk4OQ==,size_16,color_FFFFFF,t_70#pic_center)
对Run-Time Environment进行设置,设置完成后,点击OK
![在这里插入图片描述](https://img.php1.cn/3cd4a/1eebe/cd5/7cccb7e4b6cb5cb8.webp?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k5ODk4OQ==,size_16,color_FFFFFF,t_70#pic_center)
工程建立完成
![在这里插入图片描述](https://img.php1.cn/3cd4a/1eebe/cd5/011ac27956d007f0.webp?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k5ODk4OQ==,size_16,color_FFFFFF,t_70#pic_center)
3.2 编码编写(代码来源于网上)
$&#96;//宏定义&#xff0c;用于存放stm32寄存器映射&#96;$$$# &#96;define PERIPH_BASE ((unsigned int)0x40000000)//AHB&#96;# &#96;define APB2PERIPH_BASE (PERIPH_BASE &#43; 0x10000)&#96;# &#96;define GPIOA_BASE (APB2PERIPH_BASE &#43; 0x0800)&#96;&#96;//GPIOA_BASE&#61;0x40000000&#43;0x10000&#43;0x0800&#61;0x40010800&#xff0c;该地址为GPIOA的基地址&#96;# &#96;define GPIOB_BASE (APB2PERIPH_BASE &#43; 0x0C00)&#96;&#96;//GPIOB_BASE&#61;0x40000000&#43;0x10000&#43;0x0C00&#61;0x40010C00&#xff0c;该地址为GPIOB的基地址&#96;# &#96;define GPIOC_BASE (APB2PERIPH_BASE &#43; 0x1000)&#96;&#96;//GPIOC_BASE&#61;0x40000000&#43;0x10000&#43;0x1000&#61;0x40011000&#xff0c;该地址为GPIOC的基地址&#96;# &#96;define GPIOD_BASE (APB2PERIPH_BASE &#43; 0x1400)&#96;&#96;//GPIOD_BASE&#61;0x40000000&#43;0x10000&#43;0x1400&#61;0x40011400&#xff0c;该地址为GPIOD的基地址&#96;# &#96;define GPIOE_BASE (APB2PERIPH_BASE &#43; 0x1800)&#96;&#96;//GPIOE_BASE&#61;0x40000000&#43;0x10000&#43;0x0800&#61;0x40011800&#xff0c;该地址为GPIOE的基地址&#96;# &#96;define GPIOF_BASE (APB2PERIPH_BASE &#43; 0x1C00)&#96;&#96;//GPIOF_BASE&#61;0x40000000&#43;0x10000&#43;0x0800&#61;0x40011C00&#xff0c;该地址为GPIOF的基地址&#96;# &#96;define GPIOG_BASE (APB2PERIPH_BASE &#43; 0x2000)&#96;&#96;//GPIOG_BASE&#61;0x40000000&#43;0x10000&#43;0x0800&#61;0x40012000&#xff0c;该地址为GPIOG的基地址&#96;# &#96;define GPIOA_ODR_Addr (GPIOA_BASE&#43;12) //0x4001080C&#96;# &#96;define GPIOB_ODR_Addr (GPIOB_BASE&#43;12) //0x40010C0C&#96;# &#96;define GPIOC_ODR_Addr (GPIOC_BASE&#43;12) //0x4001100C&#96;# &#96;define GPIOD_ODR_Addr (GPIOD_BASE&#43;12) //0x4001140C&#96;# &#96;define GPIOE_ODR_Addr (GPIOE_BASE&#43;12) //0x4001180C&#96;# &#96;define GPIOF_ODR_Addr (GPIOF_BASE&#43;12) //0x40011A0C&#96;# &#96;define GPIOG_ODR_Addr (GPIOG_BASE&#43;12) //0x40011E0C&#96;# &#96;define BITBAND(addr, bitnum) ((addr & 0xF0000000)&#43;0x2000000&#43;((addr &0xFFFFF)<<5)&#43;(bitnum<<2))&#96;# &#96;define MEM_ADDR(addr) *((volatile unsigned long *)(addr))&#96;# &#96;define LED0 MEM_ADDR(BITBAND(GPIOA_ODR_Addr,8))&#96;&#96;//#define LED0 *((volatile unsigned long *)(0x422101a0)) //PA8&#96;
&#96;//定义typedef类型别名&#96;
&#96;typedef struct&#96;
&#96;{&#96;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;
&#96;} RCC_TypeDef;&#96;# &#96;define RCC ((RCC_TypeDef *)0x40021000)&#96;&#96;//定义typedef类型别名&#96;
&#96;typedef struct&#96;
&#96;{&#96;
&#96;volatile unsigned int CRL;&#96;
&#96;volatile unsigned int CRH;&#96;
&#96;volatile unsigned int IDR;&#96;
&#96;volatile unsigned int ODR;&#96;
&#96;volatile unsigned int BSRR;&#96;
&#96;volatile unsigned int BRR;&#96;
&#96;volatile unsigned int LCKR;&#96;
&#96;} GPIO_TypeDef;&#96;
&#96;//GPIOA指向地址GPIOA_BASE,GPIOA_BASE地址存放的数据类型为GPIO_TypeDef&#96;# &#96;define GPIOA ((GPIO_TypeDef *)GPIOA_BASE)&#96;&#96;void LEDInit( void )&#96;
&#96;{&#96;RCC->APB2ENR|&#61;1<<2; //GPIOA 时钟开启GPIOA->CRH&&#61;0XFFFFFFF0;GPIOA->CRH|&#61;0X00000003;
&#96;}&#96;&#96;//粗略延时&#96;
&#96;void Delay_ms( volatile unsigned int t)&#96;
&#96;{&#96;unsigned int i,n;for (n&#61;0;n&#96;}&#96;&#96;int main(void)&#96;
&#96;{&#96;LEDInit();while (1){LED0&#61;0;//LED熄灭Delay_ms(500);//延时时间LED0&#61;1;//LED亮Delay_ms(500);//延时时间}
&#96;}&#96;
3.3 调试环境设置&#xff1b;
![在这里插入图片描述](https://img.php1.cn/3cd4a/1eebe/cd5/e62700fe09f8933e.webp?x-oss-process&#61;image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k5ODk4OQ&#61;&#61;,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述](https://img.php1.cn/3cd4a/1eebe/cd5/7cccb7e4b6cb5cb8.webp?x-oss-process&#61;image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k5ODk4OQ&#61;&#61;,size_16,color_FFFFFF,t_70#pic_center)
3.4 将文件保存到text.c中并将其添加到Source Group1中
![在这里插入图片描述](https://img.php1.cn/3cd4a/1eebe/cd5/d67981797265d9c7.webp?x-oss-process&#61;image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k5ODk4OQ&#61;&#61;,size_16,color_FFFFFF,t_70#pic_center)
3.5 编译text.c文件
![在这里插入图片描述](https://img.php1.cn/3cd4a/1eebe/cd5/dc7ef30f57b727c7.jpeg?x-oss-process&#61;image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3k5ODk4OQ&#61;&#61;,size_16,color_FFFFFF,t_70#pic_center)
总结&#xff1a;从刚开始的安装MDK到之后使用MDK建立工程&#xff0c;并完成一个stm32程序的编译会遇到各种问题&#xff0c;自己要善于寻找解决的办法&#xff0c;&#39;LED’闪烁试验只是让自己初步熟悉了MDK的开发环境和对stm32有了一个初步的了解&#xff0c;还需自己后续勤加钻研。