ARM:Advanced RISC Machines 先进的精简指令集器件。
ARM是最当下最流行的处理器,尤其在嵌入式领域。
KEIL被ARM收购,MDK5是ARM官方的开发工具。
作为一款面向微控制器和微处理器的软件开发工具,需要支持各种各样的芯片。
所以为了更方便管理,MDK里对于不同厂商的ARM芯片所需要的软件组件或设备支持包,使用软件packs的形式。
有一个Pack Installer的工具,对各个ARM芯片、开发板和公共通用的packs有一个完整的列表。
各个芯片和开发板需要的设备相关的packs,叫做DFP(Device Family Pack),里面包含的厂商各自芯片自定义的一些接口和实现。
如果没有下载相应芯片的DFP,就没法使用MDK进行相关芯片的开发。
安装相应芯片software packs的方法:
第一种:
下载DFP的连接:
MDK5 Software Packshttps://www.keil.com/dd2/pack/
在这里面找到相应的芯片型号对应下载。
下载列表里也包含的公用pack,比如CMSIS。
CMSIS pack当前最新的版本是5.7,git hub:GitHub - ARM-software/CMSIS_5: CMSIS Version 5 Development Repositoryhttps://github.com/ARM-software/CMSIS_5
下载完自己芯片对应DFP之后,比如:Keil.STM32L4xx_DFP.2.5.0.pack,双击这个文件安装。
这时再打开Pack Installer(在工具栏上最后几个图标之一),选择相应的芯片,就会在右侧Device Specific栏里显示“Up to date”或“Update”表示已经安装了,需要更新或不需要更新。
第二种:
打开Pack Installer之后,在列表里选择相应芯片后,直接安装。
比如上面选择了STM32L4R9AIIx,左侧连接打开后就是芯片说明的网页,右边出现了可以安装的相关pack。
第一行就是device family pack,因为我已经安装所以显示update。
下面是Generic packs,可以选择需要的packs进行安装。点击后,注意下面状态栏会显示进度条。
关于CMSIS的说明:
Overviewhttps://arm-software.github.io/CMSIS_5/Core/html/index.html
关于CMSIS-Driver的说明:
Overviewhttps://arm-software.github.io/CMSIS_5/Driver/html/index.html
我的理解CMSIS是芯片级的硬件接口封装,一些寄存器、中断名字的定义为统一方便使用的,还有比如 定义了SystemInit()函数统一作为设备的时钟设置函数,还有提供了一个频率变量方便设定1ms的systick timer。
而CMSIS-Driver是对片上外设的接口封装,方便开发者使用这些接口来操作片上外设。比如定义了UART操作的结构体和调用接口,使用规范等。
------------------------------------------------
综上而言,当我们要选一款芯片,在上面开发软件的话,与在PC上使用某个IDE,比如Visual Studio,直接从main函数开始编写代码,是不一样的。
MCU或MPU这类单片机,从上电开始,相关的操作都需要我们来掌控,比如设置堆栈、设置晶振、操作片上外设等(比如驱动I2C、UART)。
而为了方便开发人员,这些操作被封装了起来,这就是上面说的software packs。
创建了一个空项目后,可以通过Manage Run-Time Environment(和上面Pack Installer工具栏图标在一起)来选择这些pack中的源代码文件添加到当前项目中。
比如可以选择添加此芯片的startup.s文件,里面定义了中断向量表,并设置堆栈大小,调用SystemInit函数,然后跳转到main函数执行。
还可已选择添加HAL层的I2C的操作文件等。
通过Packs的管理,让我们更方便的创建项目,减少了一些重复繁琐的工作,让我们专注于业务应用相关的代码的编写。
使用上面方法添加的文件,会在项目根目录下生成一个RTE文件夹来存放。
如果有需要修改内容,直接在文件中修改即可。
像我选择了一个STM32L4的芯片,创建个项目,添加个最简单的main.c文件,里面定义一个int main( ) 函数,先什么都不做,直接编译。
会提示有问题:
linking....\Objects\TestKeil.sct(7): error: L6236E: No section matches selector - no section to be FIRST/LAST.Not enough information to list image symbols.Not enough information to list load addresses in the image map.
所以需要添加的就是芯片所对应的startup.s文件和其依赖的CMSIS-CORE组件,在Manage Run-Time Environment里选择即可。
我们勾选了某个选项包,如果依赖于其他选项,会在下方输出栏提示,按照提示勾选所依赖的其他选项包即可。
如果没有packs,那就要自己从官网或FAE那里拿到开发SDK,从里面找到需要的文件,自己copy过来,需要修改的话再修改下使用,没有现在这么方便智能。即使需要更新,在线实时更新到最新版本即可。
----------------------------------------------------------------------
如果需要选择使用某个外设的驱动,比如在CMSIS Driver里勾选I2C,还要在STM32Cube HAL里面勾选I2C,会添加pack中的相关文件,但是只读的。
也可以直接点击绿三角,启动STM32CubeMX,用CubeMX来配置工程,并使用Generate Code来生成一个全新的project。