将嵌入式编程从Keil移至Linux


9

我目前正在使用Keil开发STM32发现板。我的项目即将完成,我想迁移到基于Linux的构建环境。我一直在使用预配置的刷新工具和用于Windows的STLink驱动程序来刷新电路板,并且让keil导出了bin文件,我设法使用qSTLink2在Linux机器上刷新了该文件。到目前为止,一切都很好。

现在,我一直在坚持构建整个项目的过程。特别:

如何将.uvproj移植到makefile中,同时考虑诸如“ startup_stm32l1xx_md.s”启动文件之类的内容?


我没有在STM32中使用过,特别是在Linux GCC构建环境下,但您可能会发现GCC需要另一个启动文件。您可能最好找到一个已经运行的简单项目,然后将代码添加到该项目中。
PeterJ 2014年

毫无疑问,艰难的方式。
Ignacio Vazquez-Abrams'1

我可以使用通过MDK-ARM生成的当前.o文件Keil,暂时忽略该文件的编译,然后将其静态链接吗?
Lg102 2014年

正如PeterJ已经写的。它将使用具有不同标签和不同语义的其他启动文件。应该没有办法保留Keil startup_stm32l1xx_md.o文件。您没有源startup_stm32l1xx_md.s吗?
哈珀2014年

我可以,但是它似乎是针对MDK-ARM的(或者标题如此)。我用另一个替换了它。不过,我不确定中密度和高密度之间的区别是什么。
Lg102 2014年

Answers:


11

完成了。我认为我会分享我的结果,以便其他人可以使用它。谢谢大家的宝贵时间。


我使用此ARM工具链来构建我的项目,并使用该工具随附的texane / stlink./st-flash将二进制文件刷新到STM32L1中。尽管texane / stlink随GDB一起提供,但我发现没有它,我可以完成构建和刷新过程。

我的Makefile最终看起来像这样。它不是很漂亮或抽象,但是可以完成工作。

all:
    arm-none-eabi-gcc -T stm32l1xx.ld -mthumb -mcpu=cortex-m3 -D STM32L1XX_MD -D USE_STDPERIPH_DRIVER startup_stm32l1xx_md.s system_stm32l1xx.c main.c [ sources ] -lm --specs=nosys.specs -o Project.elf

其中:

  • arm-none-eabi-gcc
    ARM工具链
  • -T stm32l1xx.ld
    链接器文件
  • -mthumb -mcpu=cortex-m3
    告诉GCC这是M3专用的
  • -D STM32L1XX_MD -D USE_STDPERIPH_DRIVER
    为标准外围设备驱动程序定义
  • startup_stm32l1xx_md.s
    面向GCC的启动文档。
  • system_stm32l1xx.c main.c [ sources ]
    我的源文件列表
  • -lm
    对于Math.hL ib M ath)
  • --specs=nosys.specs
    不要使用像这样的系统调用_exit
  • -o Project.elf
    输出名称

1
stm32l1xx.ld文件来自哪里?
愤怒

3

有一个Gnu ARM工具链(arm-none-eabi),据说openOCD可与gdb一起使用(尽管我无法在Win7下实现该功能-openOCD连接到STM32F4disco板还可以,但是gdb在连接到openOCD时遇到问题)。

这里进行一些挖掘,您将找到工具链,openOCD和包含启动源的示例项目的链接。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.