热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mdk5软件和stm32包的安装并完成一个简单的stm32程序的编译

mdk5软件和stm32包的安装并完成一个简单的stm32程序的编译实验内容:(1)安装并熟悉mdk软件​(2ÿ
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

在这里插入图片描述

勾选“I agree with all … Agreement",点击next

在这里插入图片描述

选择安装路径:

在这里插入图片描述

填写信息后点击next

在这里插入图片描述

等待安装:

在这里插入图片描述

安装完成,点击finish:

在这里插入图片描述

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安装

在这里插入图片描述

在这里插入图片描述

Keil STM32F1xx__DFP 1.0.4的安装

在这里插入图片描述

在这里插入图片描述

3.1 STM32的简单程序编译:


MLED工程的创建:

选择STM32
在这里插入图片描述

对Run-Time Environment进行设置,设置完成后,点击OK
在这里插入图片描述

工程建立完成
在这里插入图片描述

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;

在这里插入图片描述
在这里插入图片描述

3.4 将文件保存到text.c中并将其添加到Source Group1中

在这里插入图片描述

3.5 编译text.c文件

在这里插入图片描述

总结&#xff1a;从刚开始的安装MDK到之后使用MDK建立工程&#xff0c;并完成一个stm32程序的编译会遇到各种问题&#xff0c;自己要善于寻找解决的办法&#xff0c;&#39;LED’闪烁试验只是让自己初步熟悉了MDK的开发环境和对stm32有了一个初步的了解&#xff0c;还需自己后续勤加钻研。


推荐阅读
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 加密世界下一个主流叙事领域:L2、跨链桥、GameFi等
    本文介绍了加密世界下一个主流叙事的七个潜力领域,包括L2、跨链桥、GameFi等。L2作为以太坊的二层解决方案,在过去一年取得了巨大成功,跨链桥和互操作性是多链Web3中最重要的因素。去中心化的数据存储领域也具有巨大潜力,未来云存储市场有望达到1500亿美元。DAO和社交代币将成为购买和控制现实世界资产的重要方式,而GameFi作为数字资产在高收入游戏中的应用有望推动数字资产走向主流。衍生品市场也在不断发展壮大。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 嵌入式处理器的架构与内核发展历程
    本文主要介绍了嵌入式处理器的架构与内核发展历程,包括不同架构的指令集的变化,以及内核的流水线和结构。通过对ARM架构的分析,可以更好地理解嵌入式处理器的架构与内核的关系。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文介绍了一道经典的状态压缩题目——关灯问题2,并提供了解决该问题的算法思路。通过使用二进制表示灯的状态,并枚举所有可能的状态,可以求解出最少按按钮的次数,从而将所有灯关掉。本文还对状压和位运算进行了解释,并指出了该方法的适用性和局限性。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
author-avatar
docetaxel
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有