CubeMX新建Keil工程与Keil5界面介绍

  本文用于记录如何使用CubeMX实现Keil5工程的新建,同时针对Keil进行了一定介绍。

(1)Keil主界面栏

  对于Keil5,双击打开后,其界面如下图所示,在没进行设置的情况下,它分为了三栏,第一栏是菜单栏,包含常用的文件管理、页面窗图、工程管理、Debug操作等;第二栏和第三栏都是快捷键栏,第二栏为文件保存、Debug、制表位、注释等按键,第三栏是编译、烧录、编译设置以及工程文件管理等快捷键。

Keil5主界面

Keil5主界面

(2)新建工程

  我们直接点击Project进行工程新建,选择新建工程并完成对于工程目录的选择后,即可进入驱动选择界面,需要根据自己所使用的芯片型号去进行设置,例如我使用的是"STM32H743IIT6",那么我直接进行搜索,并选择“STM32H743IITx”就行。需要注意,在这里所显示的芯片型号并不一定是完全对应的,例如虽然我的芯片型号是“STM32H743IIT6”,但是这里实际上只有“STM32H743IITx”,因此搜索时也不要一次性输入整个型号,否则可能搜索不到。

Keil工程芯片选择

Keil工程芯片选择

(3)工程运行环境管理

  完成选择后,Keil通常会自动弹出运行时环境管理界面,如果没有弹出也不用担心,点击前文说的界面第三栏的倒数第三个图标运行时环境管理界面符号即可。

运行时环境管理界面

运行时环境管理界面

  界面分为了11部分,下面进行依次介绍:

1.Board Support:开发板支持,提供了多种API接口供用户进行ST官方开发板编程时调用,只有使用ST官方开发板或者该部分电路结构相同时才可调用(例如按键API、LED API等)。

2.CMSIS:Cortex微控制器软件接口标准(Cortex Microcontroller Software Interface Standard),提供了芯片的板级驱动,实现用户编写的代码与芯片的通信接口,其通常会提供如下的选项:

1)CORE:其提供了MCU的初始化函数;定义了Cortex-M处理器寄存器的硬件抽象层(HAL),具有SysTick、NVIC、系统控制块寄存器、MPU寄存器、FPU寄存器和内核访问功能的标准化定义;用于生成标准化C所不支持的CPU指令的内部函数等。
2)DSP:提供基本数学函数、快速数学函数、滤波器、电机控制、插值函数等多种常见的信号处理功能函数。
3)RTOS(API):用于实时操作系统的通用API以及基于RTX的参考实现,它提供了一个标准化的编程接口,可移植到许多RTOS,并使软件组件能够跨多个RTOS系统工作。
4)RTOS2(API):扩展了CMSIS-RTOS v1,支持ARMv8-M架构、动态对象创建、多核系统配置以及跨ABI兼容编译器的二进制兼容接口。

3.CMSIS Driver:CMSIS 驱动程序是一个软件API,它是AMR推出的驱动库,它是一种与厂商(如ST)无关的驱动层,可以在不同的微处理器上使用,用于描述中间件堆栈和用户应用程序的外围驱动程序接口。它基于CMSIS所提供的接口,进行进一步封装,形成了一套实现不同功能的API接口(例如CAN总线、IIC总线、LAN8720驱动等)。

4.Compiler:ARM编译器软件扩展,它提供了用于简化开发过程的工具和功能,主要如下:

1)Event Recorder:事件记录器是一个工具,它能够记录程序在运行时发生的事件。这些事件可以包括函数调用、数据访问、异常处理等,通过记录这些事件,开发者可以在调试过程中获得关于程序运行情况的信息。
2)I/O Retargeting:I/O重定向功能允许开发者将C库的标准输入/输出流(如printf和scanf)重定向到用户自己的代码中,或者重定向到MDK调试器。比如说嵌入式开发中常用的将printf重定向到串口,实现更方便的串口输出。

5.Device:这里所提供的驱动是直接由厂商进行提供的,例如我选择的是STM32H7,因此它就是由ST所提供的驱动,主要包括Startup、STM32Cube MX的API、HAL库、LL库、标准库等,可能还会包含GD32的部分驱动,由于这里使用的是STM32,因此不对其做处理。

6.File System:文件系统组件允许您的嵌入式应用程序创建、保存、读取和修改存储设备(如RAM、闪存、存储卡或USB存储设备)中的文件。这是官方所提供的可以直接调用的文件管理系统,如果想要使用SD卡等设备,就需要满足对应的文件管理格式。

7.Graphics:顾名思义,这是官方提供的GUI组件,其提供了现有的组件、窗口管理器、对话框、触摸屏和鼠标支持、VNC支持、多层显示、抗锯齿、字体、使用DEMO等。

8.Graphics Display:其提供了基于前文所说官方开发板的显示驱动。

9.Network:网络组件用于创建IPv4和IPv6网络应用程序的服务、协议套接字和物理通信接口。

10.RTOS:提供了RTOS组件,这里由于我安装了RT-Thread所提供的Keil5组件,因此我的这部分是RT-Thread的驱动。

11.USB:USB组件使您能够创建USB设备和USB主机应用程序,并且是MDK中间件的一部分。USB协议由USB组件处理,因此开发人员可以专注于其应用程序需求。

(4)工程运行环境配置

  由于使用Keil直接进行配置的话,会出现各种文件找不到、链接索引失败等问题,因此这里采用两种方案进行配置,一种是找到Keil的包目录,将安装的固件包直接复制出来,再通过Keil新建工程,直接将这些固件包进行使用;还有一种就是利用ST官方所提供的配置软件,STM32CubeMX进行配置,而后导出工程到Keil,这里采用该方案进行工程环境配置。

  这里不对安装过程进行过多描述,直接到ST官网进行下载即可,是免费软件。

(5)CubeMX页面分析

  CubeMX主界面如下,可以看到其主要分为四栏,也就是Pinout & ConfigurationClock ConfigurationProject ManagerTools,顾名思义,它们分别可以实现引脚配置、时钟树配置、项目管理和其余工具等功能。

CubeMX主界面

CubeMX主界面

  这里不对引脚配置与时钟配置做过多介绍,主要介绍其余两栏对于CubeMX本身的配置与使用。

1)Project Manager的使用

  STM32CubeMX的Project Manager工程管理器包含:Project工程管理、 Code Generator代码生成、 Advanced Settings高级设置三部分内容。这三部分内容决定了工程的一些属性,相关的配置信息比较重要。

(a)Project工程管理

  对于工程管理部分,主要分为工程设置、堆栈设置、MCU与固件包信息三栏。如下图所示,其余信息不做过多介绍,只对应用程序结构以及线程进行介绍。

Project Manager栏介绍_Project

Project Manager栏介绍_Project

  Application Struture包含两个选项:Basic和Advanced。其中,

Basic:是基础的结构,一般不包含中间件(RTOS、文件系统、USB设备等)。

Advanced:相反就是包含中间件,一般针对相对复杂一点的工程。

简单来说就是自动生成的项目的文件目录结构,这两种都比较基础,一般会根据规范进行一定程度的修改。

  Thread-safe Settings也就是线程安全设置,要想了解它,我们就首先需要明确什么是线程、什么是线程安全。

  线程可以理解为程序进行运算调度的最小单位,可以把一个程序理解为一条流水线,线程就是流水线中的工人,每个人执行的任务都不同,以单核单片机同时执行软件IIC1的发送和软件IIC2的接收为例,我们需要使用两个线程,一个执行IIC1、一个执行IIC2,再通过为其分配合理的优先级以及时间片来首先同时的发送和接收。

  了解线程后,线程安全也就好解释了,还是以工人为例,两个工人都需要往盒子里装东西,如果有十个盒子,两个工人一起使用,如果工人1向一个盒子内装入了东西,工人2在不知晓的情况下,也向同一个盒子装入东西,那么就会发送溢出的风险。同理,如果两个线程同时调用一个全局变量,都需要对其进行累加计数,线程1计数后,线程2也使用同一个变量进行计数,就会导致两个线程的计数实际上都是错误的。

  在启动多线程支持后,就可以选择使用哪种安全保护机制,通过选择合适的线程安全保护机制来规避程序运行出错。

(b)Code Generator代码生成

  总体来说配置相对简单,不做过多介绍,内容如图所示。

Project Manager栏介绍_Code Generator

Project Manager栏介绍_Code Generator

(c)Advanced Settings高级设置

  高级设置主要包含驱动选择函数调用两栏,如下图所示:

Project Manager栏介绍_Advanced Setting

Project Manager栏介绍_Advanced Setting

可以通过驱动选择进行外设的库函数配置,可以自由选择使用HAL库还是LL库,需要注意的是目前部分芯片没有LL库驱动。至于函数调用,我们主要关心Not Generate Function CallVisibility两个选项,Not Generate Function Call不生成函数调用,也就是你的代码不会调用对应的初始化函数,例如初始化了GPIO但是勾选了该栏,生成的main内就不会调用MX_GPIO_Init函数;而Visibility (Static)可见性(静态)则意味着将当前外设的初始化代码设定为静态。

2)Tools的使用

  由于片内外设越来越多,同时低功耗的需求也越来越严苛,ST在CubeMX中嵌入了功耗计算工具,也就是这个“Tools”,通过它,可以实现以下参数的计算:

1.平均电流消耗
  功耗值既可以从数据表中获取,也可以从用户指定的总线或核心频率中进行插值
2.电池寿命
3.平均DMIPs
  直接从MCU数据表中获得,Dhrystone MIPS并非字面上每秒百万条指令的意思,它是CPU运行一个叫Dhrystone(整数运算)的测试程序时表现出来的相对性能高低的一个单位。
4.最高环境温度( T A M A X T_{AMAX} TAMAX

  这里不对实际使用做过多描述,有需要请自行摸索,可以参考ST官方手册《UM1718 英文版》或者说《UM1718 中文翻译版》,建议参考英文版,中文版版本较老,且为机翻有较多翻译错误。

(6)使用CubeMX进行外设与时钟配置——基于STM32H743IIT6

1)外设配置

  首先我们需要对页面有初步了解,如下图所示,我们可以将外设配置页面分为少三部分,第一栏为需要配置的外设选择,选中后会在第二栏显示出具体的配置信息,第三栏可以联动第一栏,当进行配置时第三栏会显示哪些端口已经被使用,当然也可以直接点击第三栏中的引脚进行配置。

CubeMX_Pinout & Configuration_整页介绍

CubeMX_Pinout & Configuration_整页介绍

  显然,需要介绍的主要是第一栏,由于外设过多,下面只对部分单片机运行的必要外设进行分析介绍。

  必要外设都纯在于第一栏的“System Core”中,打开后可以看到,其中有着CORTEX_M7、RCC、SYS等不可或缺的外设。

CubeMX_System Core配置

CubeMX_System Core配置

(a)RCC(Reset and Clock Control)

  顾名思义,其用于管理时钟和复位,通过配置它,可以实现时钟源的选择、预分频器配置等功能,部分型号还可以进行内部电源的配置。

CubeMX_RCC配置页面

CubeMX_RCC配置页面

(b)SYS

  SYS主要是进行HAL库的时钟源选择,通常软件会默认为滴答定时器SysTick。

(c)CORTEX_M7

  在这一栏,可以进行对于MCU的内核配置,如图所示,主要配置如下:

  Speculation default mode:该模式允许CPU在执行指令时进行一种优化,即 Speculation。Speculation 是一种执行机制,它允许处理器在不知道某些操作的结果时开始执行后续操作。这可以提高指令执行的效率,因为处理器可以在等待操作结果的同时继续执行其他任务。但是使用不当会导致单片机运行出错,导致某些错误的计算结果。

  Cortex Interface Settings:该模式可以对于指令缓存CPU ICache与数据缓存CPU DCache进行配置。

  Cortex Memory Protection Unit Control Settings:该模式可以选择MPU的模式。

  Cortex Memory Protection Unit Region 0 Settings:通过它可以实现对于MPU的详细配置,例如MPU大小等。

  Cortex Memory Protection Unit Region 1 Settings:从1到后面的所有配置,均只能实现对于MPU Region的使能。

CubeMX_CORTEX_M7配置栏

CubeMX_CORTEX_M7配置栏

2)时钟配置

  CubeMX对于时钟树配置进行了极大的简化,可以通过图形化页面直接对时钟树频率进行配置,如图所示。

CubeMX_时钟树配置

CubeMX_时钟树配置

(7)【实操】使用CubeMX新建MDK工程——基于STM32H743IIT6

  首先需要新建工程,打开CubeMX后直接点击File内的NEW Project或者说使用快捷键Crtl+N即可。

CubeMX_NEW Project

CubeMX_NEW Project

  点击后会弹出选项,我们直接输入所使用的芯片型号进行搜索,而后双击搜索出的型号,便可完成进入芯片图形化配置界面。对于H7等系列单片机,可能会弹窗询问是否需要预配置MPU,“For this Cortex-M7 device, it is highly recommended to preconfigure the Memory Protection Unit to optimize the Speculative Read access of the core. ”,点击确认即可。

CubeMX_芯片选型

CubeMX_芯片选型

  在芯片图形化配置界面,首先需要对于工程进行设计,也就是在Project Manage栏内,设定好工程名字、工程地址、工程目录结构、工具链等相关配置,具体配置可以参考下图,详细相关可以参考Project工程管理章节。

CubeMX_新建工程_初始项目管理配置

CubeMX_新建工程_初始项目管理配置

  接下来,我们需要配置CubeMX的函数生成,可以参照下图进行勾选,也可以参考Code Generator代码生成进行自我配置。

CubeMX_新建工程_Code Generator配置

CubeMX_新建工程_Code Generator配置

  在完成这一步后,由于CubeMX本身会完成一些初始化配置,因此实际上我们已经可以导出工程了,也就是直接点击GENERATE CODE按键,后面想要更新工程时,再次点击按键即可。

CubeMX_导出工程

CubeMX_导出工程

  不过如果想要实现自己的配置,还是需要在引脚配置和时钟配置两栏中去进行进一步的设置,具体配置流程可以参考上一章节,通过以上步骤,即可完成Keil工程的新建,可以通过Keil进行编写,也可以使用CubeMX进行重新配置。

  • 29
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值