将生成的源代码导入GNU ARM Eclipse插件 该示例使用ST HAL库,这可能比我通常想要的能提供更多的帮助,但我现在只需要按照原来的样子。 这个例子有几个项目风格:IAR EWARM、Keil uVision、Atollic TrueStudio和SW4STM3。 我有一个uVision的免费版本,工程生成的很干净; 此外,由于.text + .data只有大约20 KB(<32 KB),我可以使用它进行调试! 唯一的问题是uVision的代码浏览功能很不友好(与Eclipse CDT相比)。 我比较喜欢Eclipse CDT和GNU工具链,所以我决定在另一个文件夹中创建一个新的gnuarm Eclipse C项目,只导入生成的文件。 GNU ARM Eclipse插件不支持STM32L4,因此选择Cortex-M项目模板,如下图所示:
在下一个窗口中,C项目生成器向导将询问芯片/项目的具体设置,如下所示:
ROM和RAM大小被固定在芯片里,但系统时钟频率可以进行配置(甚至可以在CubeMX中以图形的方式),如下所示:
在项目文件夹对话框中,我选择默认值,包括“newlib”C运行库。 CMSIS名称应该与所选芯片系列匹配,如下所示:
在最后的窗口中,Eclipse CDT检测之前安装的GNU arm工具链(arm-none-eabi-gcc):
然后GNU ARM Eclipse插件在选择的默认文件夹中生成代码,但是这些文件(下面突出显示)与CubeMX生成的源文件冲突,必须删除。
ldscripts / mem.ld的片内闪存地址的开始地址也有错误,所以我将其修改为正确的值(所有STM32Lxxx产品线都一样),如下所示: - MEMORY
- {
- FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1024K
- RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 96K
- }
复制代码
到目前为止,Eclipse项目缺少针对在CubeMX中选择的引脚的文件。 要在我的Eclipse项目上覆盖CubeMX生成的项目,从<CubeMX gen>/ Inc/文件夹复制头文件到include /文件夹。 当在Eclipse项目浏览器中拖放时,显示一个链接文件的选项,而不是复制,你可以在这里看到:
由于我可能会修改文件,我选择“Copy”,但如果我稍后更改开发板的配置,“Link”是一个很不错的选择。 总的来说,以下是从<CubeMX gen>复制到Eclipse项目文件夹的文件: ● Inc/* --> include/ ● Src/* --> src/ ● Drivers/STM32L4xx_HAL_Driver/Inc/* --> system/include/stm32l4xx/ ● Drivers/STM32L4xx_HAL_Driver/Src/* --> system/src/stm32l4xx/ ● Drivers/CMSIS/Device/ST/STM32L4xx/Include/* --> system/include/cmsis/。 即使其中有相同命名的文件,我选择使用ST已经测试的CMSIS文件。 ● Drivers/CMSIS/Device/ST/STM32L4xx/Source/Templates/system_stm32l4xx.c --> system/src/cmsis/ ● Drivers/CMSIS/Device/ST/STM32L4xx/Source/Templates/gcc/startup_stm32l4xx.s --> system/src/cmsis/startup_stm32l4xx.S. 更改扩展名是必需的,因为Eclipse CDT支持的汇编文件扩展名为“.S”。 ● Middlewares/ST/STM32_USB_Device_Library/Core/Inc/* --> include ● Middlewares/ST/STM32_USB_Device_Library/Core/Src/* --> src ● Middlewares/ST/STM32_USB_Device_Library/Class/AUDIO/Inc/* --> include ● Middlewares/ST/STM32_USB_Device_Library/Class/AUDIO/Src/* --> src
USB中间件文件是必需的,因为我想使用ST的USB中间件。 最初,我试图将文件夹Middlewares / ST / STM32_USB_Device_Library /复制到项目的根目录,但是GNU ARM Eclipse“Hello world”模板不会为我复制的STM32_USB_Device_Library文件夹生成构建规则。 最后我使用的是Makefile文件,通过将源代码单独复制到现有的include /和src /文件夹。 在项目属性 - > C / C ++ Build - > Settings,项目需要定义芯片定义以生成源代码,如下面所示。 在gcc预处理器提供了STM32L476xx(用于Debug和Release配置),但是没有为C ++预处理器提供(因为我在这个项目中不使用C ++)。
通过这些更改,项目构建完成(但有一些警告)。 |