LV.23 D2 开发环境搭建及平台介绍 学习笔记

一、Keil MDK-ARM简介及安装

        Keil MDK,也称MDK-ARM,Realview MDK (Microcontroller Development Kit)等。目前Keil MDK 由三家国内代理商提供技术支持和相关服务。  

        MDK-ARM软件为基于Cortex-M、Cortex-R4、ARM7、ARM9处理器设备提供了一个完整的开发环境。 MDK-ARM专为微控制器应用而设计,不仅易学易用,而且功能强大,能够满足大多数苛刻的嵌入式应用。

        MDK-ARM有四个可用版本,分别是MDK-Lite、MDK-Basic、MDK-Standard、  MDK-Professional。所有版本均提供一个完善的C / C++开发环境,其中MDK-Professional还包含大量的中间库。

Keil MDK-ARM功能特点

        完美支持Cortex-M、Cortex-R4、ARM7和ARM9系列器件。

        行业领先的ARM C/C++编译工具链

        确定的Keil RTX ,小封装实时操作系统(带源码)

        μVision5 IDE集成开发环境,调试器和仿真环境

        TCP/IP网络套件提供多种的协议和各种应用

        为带图形用户接口的嵌入式系统提供了完善的GUI库支持

        ULINKpro可实时分析运行中的应用程序,且能记录Cortex-M指令的每一次执行

        大量的项目例程帮助你快速熟悉MDK-ARM强大的内置特征

        符合CMSIS (Cortex微控制器软件接口标准)

Keil MDK-ARM获取

https://www.keil.com/demo/eval/arm.htm#/DOWNLOAD

Keil MDK-ARM安装

        安装MDK-523.exe  这keil5软件的安装包,不要有中文路径  

        安装Keil.STM32F0XX_DFP.1.4.0.pack  这是STM32F0设备安装包  

        运行KEIL_Lic(1).exe 破解keil (以管理员权限运行keil破解)

        注:keil安装过程可参考  DAY1-ARM体系结构概述\实验手册\WIFI-COTEXM0实验手册 第三章 开发环境搭建

 安装 ST_LINK 烧写工具

        ST_LINK 是 STM32 芯片的仿真器,这里介绍烧写工具的安装,通过这个软件操作ST_LINK 将.hex 文件烧写到芯片上。此软件用于为 M0 烧写 bootloader 文件。我们在 keil中编译好的代码可以使用它们本身进行下载。

        软件路径:DAY2-STM32开发环境搭建\安装软件包\ST-Link驱动及工具\STM32 ST-LINK Utility_v3.1.0  

        注:ST_lINK安装过程可参考  DAY1-ARM体系结构概述\实验手册\WIFI-COTEXM0实验手册 3.6节

 

二、STM32CubeMX简介及安装

STM32CubeMX简介

        直观的选择STM32微控制器  

        微控制器图形化配置

                自动处理引脚冲突

                动态设置确定的时钟树

                可以动态确定参数设置的外围和中间件模式和初始化

                功耗预测  

        C代码工程生成器覆盖了STM32微控制器初始化编译软件,如IAR,KEIL,GCC可以独立使用,作为Eclipse插件使用

TM32CubeMX获取

        官网地址: http://www.st.com/en/development-tools/stm32cubemx.html

 STM32CubeMX安装

 

        安装JAVA运行环境,JavaSetup8u151.exe  

        解压stm32cubemx.zip,安装SetupSTM32CubeMX-4.22.0.exe,最好不要有中文路径

        解压stm32cube_fw_f0_v180.zip到STM32CubeMX的安装路径中  

        注:安装过程可参考  DAY1-ARM体系结构概述\实验手册\WIFI-COTEXM0实验手册 第三章 开发环境搭建 

 STM32CubeMX——创建工程

 

点击New Project创建工程 

 

把工程名称和路径选择好

 

然后点击ok ,然后开始生成对应的工程源代码,导出一个Keil5的工程。

 击Open Project后,就会调用Keil5来打开这个工程。

我们用CubeMX和Keil5联合对STM32进行开发,CubeMX主要是前期的配置过程。

三、STM32储存器映射 

3.1 Cortex-M0存储器映射

        注:被控单元的FLASH,RAM和AHB到APB的桥(即片上外设),这些功能部件共同排列在一个 4GB 的地址空间内。我们在编程的时候,可以通过他们的地址找到他们,然后来操作他们

存储器本身没有地址,给存储器分配地址的过程叫存储器映射 

3.2 STM32F0存储器映射

STM32F05x 存储器映像和外设寄存器编址

 在中文参考手册的2.2中可以找到

3.3 寄存器的访问方式

以GPIOA寄存器组为例、如何读写ODR寄存器?

        以知GPIOA的起始地址为0x48000000

        各寄存器的偏移地址如下:

        MODER;             /*Address offset: 0x00 */

        OTYPER;             /*Address offset: 0x04 */

        OSPEEDR;          /*Address offset: 0x08 */

        PUPDR;              /*Address offset: 0x0C */

        IDR;                   /*Address offset: 0x10 */

        ODR;                 /*Address offset: 0x14 */

        BSRR;               /*Address offset: 0x18 */

        LCKR;               /*Address offset: 0x1C */

如何访问寄存器——第一种方式

对地址进行宏定义

#define     GPIOA_BASE        ( (unsigned int ) 0x48000000 )

#define     GPIOA_ODR         ( GPIOA_BASE  +  0x14 )

读操作

val  = *(unsigned int *) GPIOA_ODR  ;

写操作

*(unsigned int *)  GPIOA_ODR = val  ;  

改进

#define     GPIOA_ODR    ( *(unsigned int *) ( GPIOA_BASE  +  0x14 ))

val  = GPIOA_ODR  ;    //读

GPIOA_ODR = val  ;     //写

如何访问外设寄存器——第二种方式

         用结构体封装寄存器

        用上面的方法去定义地址,还是稍显繁琐、根据我们每一类外设对应的寄存器组地址都是连续增长的特点,我们引入 C 语言中的结构体语法对寄存器进行封装、 

typedef struct {uint32_t        MODER;             /*Address offset: 0x00 */uint32_t        OTYPER;     /*Address offset: 0x04 */uint32_t        OSPEEDR;     /*Address offset: 0x08 */uint32_t        PUPDR;         /*Address offset: 0x0C */uint32_t        IDR;         /*Address offset: 0x10 */uint32_t        ODR;         /*Address offset: 0x14 */uint32_t        BSRR;         /*Address offset: 0x18 */uint32_t        LCKR;         /*Address offset: 0x1C */} GPIO_TypeDef;#define     GPIOA_BASE        ( (unsigned int ) 0x48000000 )#define     GPIOA     ((GPIO_TypeDef *) GPIOA_BASE) 

注:我们访问GPIOA的控制寄存器组时、直接使用宏定义好 GPIO_TypeDef 类型的指针,而且指针指向 GPIOA端口的首地址,这样我们直接用宏GPIOA访问改外设的任意一个寄存器

GPIOA->MODER     =  0x20 ;

GPIOA->OSPEEDR  =  0x16 ;

四、STM32启动文件分析 

STM32F0启动模式

 

        注:Cortex-M0 的程序映像通常是从地址 0x00000000 开始的、系统复位后,处理器首先读取向量表中的前两个字(8 个字节),第一个字存入 MSP,第二个字为复位向量,它表示程序执行的起始地址(复位处理)

 

        根据启动模式的不同,用户闪存、系统闪存和SRAM都 可以映射到0x0的低端地址;      

        我们的板子boot0直接接地,因此启动区域为flash启动

C语言程序内存排布

 

注:        

        栈的作用是用于局部变量,函数调用,函数形参等的开销        

        堆主要用来动态内存的分配 

启动文件startup_stm32f051.s分析 (下方课件中)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/686189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

选择排序和快速排序(1)

目录 选择排序 基本思想 选择排序的实现 图片实现 代码实现 快速排序 基本思想 快速排序的实现 图片实现 代码实现 选择排序 基本思想 每一次从待排序的数据元素中选出最小(最大)的元素,存放在序列的起始位置,直到全部…

网络原理-TCP/IP(7)

目录 网络层 路由选择 数据链路层 认识以太网 以太网帧格式 认识MAC地址 对比理解MAC地址和IP地址 认识MTU ARP协议 ARP协议的作用 ARP协议工作流程 重要应用层协议DNS(Domain Name System) DNS背景 NAT技术 NAT IP转换过程 NAPT NAT技术的优缺点 网络层 路由…

《Go 简易速速上手小册》第4章:接口与抽象(2024 最新版)

文章目录 4.1 接口的定义与实现 - Go 语言的多面手4.1.1 基础知识讲解4.1.2 重点案例:动物乐队功能描述实现代码 4.1.3 拓展案例 1:通用支付系统拓展案例 1:通用支付系统功能描述实现代码 4.1.4 拓展案例 2:动物园管理器拓展案例 …

旅游出门千万别忘带这些!花的不多,享受翻倍!随身wifi看这篇,高性价比高口碑随身wifi推荐

春节长假,大家都去哪儿玩了呢?我反正带着我的小背包,走遍了祖国的大好河山! 得益于之前几次长假出行的经验,这次出行体验十分完美。除了详细完备的出行攻略,还有就是一些出行好物,虽然不起眼&am…

【python】python入门(变量名)

Hi~ o(* ̄▽ ̄*)ブ今天一起来看看python入门之变量名吧~~ 变量名的规定: 举个例子: “违法”的变量名们 my love/my !love错误:中间不能是空格或者其他符号1my_love错误:不能数字开头"my_l…

shell编程:求稀疏数组中元素的和(下标不连续)

#!/bin/basharr([2]3 [5]2 [6]2 [9]1)for i in "${!arr[]}" dosum$((sumarr[i])) doneecho $sumBash 脚本中,* 和 符号在数组上下文中有不同的用途。当使用它们来遍历数组时,必须了解它们之间的区别。 * (无前置感叹号 !): 在索引…

用HTML、CSS和JS打造绚丽的雪花飘落效果

目录 一、程序代码 二、代码原理 三、运行效果 一、程序代码 <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetGBK"><style>* {margin: 0;padding: 0;}#box {width: 100vw;heig…

Swift Combine 使用 ObservableObject 与 SwiftUI 模型作为发布源 从入门到精通二十

Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二Swift Combine 管道 从入门到精通三Swift Combine 发布者publisher的生命周期 从入门到精通四Swift Combine 操作符operations和Subjects发布者的生命周期 从入门到精通五Swift Com…

C语言系列(所需基础:大学C语言及格)-1-编译器/简单的求和代码/数据类型/变量的分类/变量的作用域和生命周期

文章目录 一、编译器&#xff08;使用在线编译器&#xff09;二、简单的求和代码三、数据类型四、变量的分类五、变量的作用域和生命周期 一、编译器&#xff08;使用在线编译器&#xff09; 为了方便&#xff0c;我使用的是在线的C语言编译器进行程序的运行。 链接&#xff1…

HTTP协议-响应报文详解(Respond)

目录 前言&#xff1a; 1.Respond报文 1.1报文格式 1.2格式图解 2.状态行&#xff08;首行&#xff09; 2.1状态码/状态码解释 &#xff08;1&#xff09;200 OK &#xff08;2&#xff09;404 Not Found &#xff08;3&#xff09;403 Forbidden &#xff08;4&#…

书生浦语大模型实战营-课程笔记(4)

微调分为两种&#xff0c;增量预训练和指令跟随。 指令跟随微调&#xff1a; 1.只对答案计算Loss 2.训练时数据为一问一答的形式&#xff08;input和output&#xff09; 增量预训练&#xff1a; 只需要output的数据进行训练 xtuner:微调框架 操作部分的笔记参考git上的文档…

模块、包、库的区别

这三者都是通过import和from…import…语句实现的。 模块&#xff08;module&#xff09; Python 模块(Module)&#xff0c;是一个 Python 文件&#xff0c;以 .py 结尾&#xff0c;包含了 Python 对象定义和Python语句。 简单来说任何一个以.py的文件都可以视为是一个模块(…

人工智能学习与实训笔记(六):神经网络之智能推荐系统

人工智能专栏文章汇总&#xff1a;人工智能学习专栏文章汇总-CSDN博客 本篇目录 七、智能推荐系统处理 7.1 常用的推荐系统算法 7.2 如何实现推荐 7.3 基于飞桨实现的电影推荐模型 7.3.1 电影数据类型 7.3.2 数据处理 7.3.4 数据读取器 7.3.4 网络构建 7.3.4.1用户特…

家庭动态网络怎么在公网访问主机数据?--DDNS配置(动态域名解析配置)

前言 Dynamic DNS是一个DNS服务。当您的设备IP地址被互联网服务提供商动态变更时,它提供选项来自动变更一个或多个DNS记录的IP地址。 此服务在技术术语上也被称作DDNS或是Dyn DNS 如果您没有一个静态IP,那么每次您重新连接到互联网是IP都会改变。为了避免每次IP变化时手动更…

使用C++,实现高精度加减乘除法运算!

我的个人主页 {\large \mathsf{{\color{Red} 我的个人主页} } } 我的个人主页 我的专栏&#xff1a; \mathcal{{\color{Green} 我的专栏&#xff1a;} } 我的专栏&#xff1a; 《精选文章》《算法》《每日一道编程题》《高精度算法》 文章目录 前言高精度计算初始模版string 转…

【Web】CTFSHOW java刷题记录(全)

目录 web279 web280 web281 web282 web283 web284 web285 web286 web287 web288 ​web289 web290 web291 web292 web293 web294 web295 web296 web297 web298 web299 web300 web279 题目提示 url里告诉我们是S2-001 直接进行一个exp的搜 S2-001漏洞分析…

【测试】测试用例篇

目 录 一. 设计测试用例的万能公式(六个)二.设计测试用例的具体方法1.等价类2.边界值3.因果图&#xff08;判定表&#xff09;4.场景设计法5.正交法6.错误猜测法 一. 设计测试用例的万能公式(六个) 设计测试用例的万能公式 测试用例的意义是帮助测试人员了解&#xff1a;测什…

linux 网络服务小实验

实验图和要求&#xff1a; 1&#xff09;网关服务器&#xff1a;ens36&#xff1a;12.0.0.254/24&#xff0c;ens33&#xff1a;192.168.44.254/24&#xff1b;Server1&#xff1a;192.168.44.20/24&#xff1b;PC1和Server2&#xff1a;自动获取IP&#xff1b;交换机无需配置。…

GEE:最小距离(minimumDistance)回归教程(样本点、特征添加、训练、精度、参数优化)

作者:CSDN @ _养乐多_ 对于分类问题,这个输出通常是一个类别标签 ,而对于回归问题,输出通常是一个连续的数值。回归可以应用于多种场景,包括预测土壤PH值、土壤有机碳、土壤水分、碳密度、生物量、气温、海冰厚度、不透水面积百分比、植被覆盖度等。 本文将介绍在Google…

频繁跳槽 可能问题出在你的性格上

谈到跳槽&#xff0c;小伙伴们会想到什么呢&#xff1f;换工作&#xff1f;涨薪&#xff1f;你有没有想过&#xff0c;目前的工作不合适&#xff0c;除了公司的原因&#xff0c;也有可能是自己性格的原因呢&#xff1f; 频繁跳槽有哪些优势和劣势呢&#xff1f;针对这些疑问&…