STM32 + CMSIS + STM32CubeIDE

在这里,我将告诉您如何使用针对STM微控制器的“本机” IDE-STM32CubeIDE在CMSIS上创建最小项目。

也许STM32CubeIDE有很多缺点,但我认为它具有几个优点-例如专有和免费,至少,如果您以前没有这样做,则至少应注意该开发环境。



选择了带有ARM Cortex-M0内核的STM32F072微控制器作为固件的对象,这是针对ARM Cortex-M3上更为熟悉的STM32F103(针对内核进行调整)的过程相同的过程。

可以从st.com下载所有必需的资源,这是您需要的:

  • IDE本身 ,我使用Windows版本,但也提供Mac和Linux版本

  • 适用于ARM Cortex-M0的CMSIS库位于STM32CubeFx归档文件中,按内核版本细分。 除CMSIS外,该存档本身还包含许多其他资源,从使用外设的示例到USB驱动程序,实际上,如果您使用STM32Cube创建项目,则将使用此存档。

  • 数据表和参考手册不会受到伤害


安装,启动并选择Workspace文件夹后,您可以开始创建项目。 当前STM32CubeIDE版本1.1.0,因此各种设置的位置应基于此。

创建一个新项目-File / New / STM32Project 。 经过一番思考,出现了用于选择微控制器的窗口,在我的情况下是LQFP64封装中的STM32F072RB,我选择了所需的行,然后单击下一步。 进一步建议选择项目名称,位置,C / C ++编程语言,可执行文件/静态库,以及选择将使用CubeMX还是留胡子来生成项目。 在这种情况下,不需要多维数据集生成,因此项目类型为Empty是结束。




在左侧,在“ 项目资源管理器”窗口中,出现了项目树,尽管它不是按顺序排列的很 。 原则上,如果生成的文件夹结构适合您,则可以从那里的CMSIS库中添加文件并继续工作,但是在这里我将展示如何使项目结构与我的美感协调一致,因此删除除链接程序脚本之外的所有内容,即 扩展名为.ld的文件-它将派上用场。



通过右键单击项目名称,可以在资源管理器中和IDE内部对文件夹和文件进行所有操作,例如: 右键-> new-> Folder 。 如果项目结构在IDE外部已更改,则只需更新项目: 右键->刷新

我的项目结构版本如下所示:

  • 启动 -链接器脚本将存储在此处,生成的项目中剩下的一个以及从CMSIS中获取的启动文件
  • CMSIS \ srcCMSIS \ inc-分别是源,与CMSIS库相关的scr文件夹中具有.c扩展名的文件和inc文件夹中具有.h扩展名的头文件
  • Core \ srcCore \ inc-项目本身将位于此处(对于初学者而言),将main.cmain.h放在此处


现在,您需要将CMSIS库文件传输到项目中。 该库由核心文件和外围文件组成。 内核文件以core_cmsis_开头,它们是所有使用此内核的微控制器所共有的。 外围文件在名称中包含微控制器stm32的名称,并且特定于特定制造商(在这种情况下为STM公司)。

在解压缩形式中,归档文件包含文件夹STM32Cube_FW_F0_V1.11.0 ,所有路径都相对于此文件夹。 总计,您需要复制:

CMSIS \ inc中

  • 驱动程序\ CMSIS \包含\ cmsis_compiler.h
  • 驱动程序\ CMSIS \包含\ cmsis_gcc.h
  • 驱动程序\ CMSIS \包含\ cmsis_version.h
  • 驱动程序\ CMSIS \ Include \ core_cm0.h
  • 驱动程序\ CMSIS \设备\ ST \ STM32F0xx \ Include \ stmf0xx.h
  • 驱动程序\ CMSIS \设备\ ST \ STM32F0xx \ Include \ stm32f072xb.h
  • 驱动程序\ CMSIS \设备\ ST \ STM32F0xx \ Include \ system_stm32f0xx.h

CMSIS \ src中

  • 驱动程序\ CMSIS \设备\ ST \ STM32F0xx \源\模板\ system_stm32f0xx.c

在启动中:

  • 驱动程序\ CMSIS \设备\ ST \ STM32F0xx \源\模板\ gcc \ startup_stm32f072xb.s

这就是项目的完整形式。


由于已经对项目文件夹进行了一些操作,因此您需要在设置中显示它。

项目名称的右键->属性-> C / C ++ Build->设置->工具设置-> MCU GCC链接器->常规 -在这里,您需要使用“ 浏览...”按钮指定链接器脚本的新位置。


您还必须指定项目文件的路径

属性-> C / C ++常规->包含
属性-> C / C ++常规->源位置

在“ 包括 inc文件夹的路径”中,在“ 源位置”中 ,对src文件夹来说是合乎逻辑的,但是如果这样做,则这些文件夹将分别添加到项目树中。 为了避免在视觉上使树混乱,可以在“ 源位置”中指定根文件夹CoreCMSISStartup



为了编译项目,您需要在stm32f0xx.h文件中取消注释带有微控制器名称的行,当然还要main.c中添加主要功能



其实一切。 无错编译,并立即消失在RAM的一个半字节的内存中,并立即记住堆栈和堆,在创建项目的过程中未提及它们。 堆栈和堆的大小在链接描述文件中指示,扩展名为.ld的文件可以根据项目的要求进行更改。 这些值以标签_Min_Heap_Size / _Min_Stack_Size的形式位于文件的开头,大小为十六进制。



例如,我将给出一个传统的LED闪烁的小项目

LED将在STM32F072B-DISCO调试板上闪烁,时钟由内部HSI48发生器以48 MHz的频率进行计时,并且SysTick定时器用作延迟源,产生1 ms的中断,通过该中断可以计算出确切的延迟时间。 LED连接到端口C的引脚6,配置为推挽输出。

我希望这些信息对某人有用,因为 一次,尽管有很多STM32编程材料,但我不得不铲除大量手册以实现现在看来很明显的事情。

Source: https://habr.com/ru/post/zh-CN481478/


All Articles