在这里,我将告诉您如何使用针对STM微控制器的“本机” IDE-STM32CubeIDE在CMSIS上创建最小项目。
也许STM32CubeIDE有很多缺点,但我认为它具有几个优点-例如专有和免费,至少,如果您以前没有这样做,则至少应注意该开发环境。
选择了带有ARM Cortex-M0内核的STM32F072微控制器作为固件的对象,这是针对ARM Cortex-M3上更为熟悉的STM32F103(针对内核进行调整)的过程相同的过程。
可以从
st.com下载所有必需的资源,这是您需要的:
安装,启动并选择Workspace文件夹后,您可以开始创建项目。 当前STM32CubeIDE版本1.1.0,因此各种设置的位置应基于此。
创建一个新项目
-File / New / STM32Project 。 经过一番思考,出现了用于选择微控制器的窗口,在我的情况下是LQFP64封装中的STM32F072RB,我选择了所需的行,然后单击下一步。 进一步建议选择项目名称,位置,C / C ++编程语言,可执行文件/静态库,以及选择将使用CubeMX还是留胡子来生成项目。 在这种情况下,不需要多维数据集生成,因此项目类型为
Empty是结束。
在左侧,在“
项目资源管理器”窗口中,出现了项目树,尽管它不是按顺序排列的很
空 。 原则上,如果生成的文件夹结构适合您,则可以从那里的CMSIS库中添加文件并继续工作,但是在这里我将展示如何使项目结构与我的美感协调一致,因此删除除链接程序脚本之外的所有内容,即 扩展名为.ld的文件-它将派上用场。
通过右键单击项目名称,可以在资源管理器中和IDE内部对文件夹和文件进行所有操作,例如:
右键-> new-> Folder 。 如果项目结构在IDE外部已更改,则只需更新项目:
右键->刷新 。
我的项目结构版本如下所示:
- 启动 -链接器脚本将存储在此处,生成的项目中剩下的一个以及从CMSIS中获取的启动文件
- CMSIS \ src和CMSIS \ inc-分别是源,与CMSIS库相关的scr文件夹中具有.c扩展名的文件和inc文件夹中具有.h扩展名的头文件
- Core \ src和Core \ inc-项目本身将位于此处(对于初学者而言),将main.c和main.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文件夹来说是合乎逻辑的,但是如果这样做,则这些文件夹将分别添加到项目树中。 为了避免在视觉上使树混乱,可以在“
源位置”中指定根文件夹
Core ,
CMSIS和
Startup 。
为了编译项目,您需要在
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编程材料,但我不得不铲除大量手册以实现现在看来很明显的事情。