步骤1:下载所需的一切
您需要下载三个部分才能正常工作:
用于ARM的GCC编译器
STM32固件文件
St-link实用程序
Sample Project
编译器是将我们的C代码和所有其他库文件编译成stm32控制器可以理解的机器语言的主要软件。下载此编译器的最新预编译版本。
包含STM32固件的文件夹是保存主处理器运行所需的所有启动文件和核心文件的文件夹。我们将使用HAL已超越的标准外围设备库。我更喜欢StPeriphLibrary,因为使用该处理器的公司都在使用它们,因为它功能强大,更老旧并且受支持。它也更坚固。它不会减少初始化外围设备或打开LED所需的工作,但是会迫使您学习这些处理器的工作方式。这样一来,您将对内部工作有更多的了解,从而可以对任何任务进行编程。
最后一个下载的软件是st-link实用程序。它在github上维护,用于通过板上的stlink IC作为SWD/JTAG编程器/调试器将编译的二进制文件传输到处理器。
我还提供了一个示例项目文件夹稍后再下载。它位于第一个VIDEO1文件夹中。
步骤2:安装软件
下载后我建议您将所有文件都放在一个公用文件夹中,因为它们都出于相同的目的而一起使用。我将所有文件夹放在HOME目录中一个名为“ Embedded”的文件夹中。
我们将从最简单的STM32库开始。您下载的文件夹可以留在这里。只需确保四处挖掘以查看适当文件的存储位置。因此,您可以更改和编辑主MakeFile,使其可以在您的平台上使用。
第二个最简单的是编译器。您也不需要执行任何操作,但是我们将使编译器成为可全局访问的函数,因此您可以从任何文件夹调用编译器,而无需考虑路径。所有步骤都可以在终端机或gui中完成,但是我喜欢使用终端机,因为当您有经验时,它会变得越来越快,更容易,如果您担心的话,建议您多使用终端机。步骤如下:
进入主文件夹“/home/YOURUSERNAME/”或“〜/”,或在终端中输入 cd
通过键入以下内容来打开文件“ .bashrc”: nano .bashrc
向下滚动到文件末尾并添加以下行:
export PATH = $路径:〜/Embedded/gcc-arm-none-eabi-8-2018-q4/bin
通过保存退出: CTRL + X,单击Y,ENTER
运行命令: source .bashrc 刷新终端源
通过键入以下命令检查是否一切正常: arm-none-eabi-gcc --version,它应该显示编译器的最新版本
要安装st-link,请将已下载的存档解压缩到Embedded文件夹中。然后执行以下步骤:
运行: make
进入文件夹“ build/Release”: cd build/Release
键入 ls ,您将看到两个名为“ st-flash”和“ st-util”的可执行文件
将这两个可执行文件移动到父目录中stlink: mv st-flash st-util 。./。./
可以,如果您想使用这两个功能,可以通过以下方式再次全局编辑“ .bashrc”文件添加:
导出PATH = $ PATH:〜/Embedded/stlink/
仅此而已!您拥有所需的一切。现在,抓住您自己喜欢的文本编辑器。我只使用标准的,像SublimeText或Atom这样的更智能的标准。
第3步:建立示例项目
我们现在将创建一个示例项目,您可以使用该示例项目来启动每个项目。就像一个模板,已经处理了所有主要设置。
您可以将其下载到我的MEGA中,该链接位于本教程的第一步,并且在我的所有youtube视频下。里面是空的main.c文件,以及此处理器和Makefile的一些启动文件。 Makefile可以告诉C编译器在哪里找到arm编译器,如何编译以及所有库在哪里。为了获得适合您项目的这些文件,您可以进入STM32库文件夹并检查“ project”或“ examples”文件夹。在内部,您将看到并复制以下文件: main.c , Makefile 和 XXX_conf.h , system_XXX.c。
此外,您还需要 stm32_flash.ld 链接程序文件,该文件可在示例文件夹或以下文件夹中找到:
“/FLASH_Program/TrueSTUDIO/FLASH_Program/”或只需搜索文件即可。
Makefile可以在线找到,也可以从我的文件夹中复制,但是您需要做一些更改。让我们来看看我的make文件以及可以更改的内容。
# Path to stlink folder for uploading code to board
STLINK=~/Embedded/stlink
# Put your source files here (*.c)
SRCS=main.c system_stm32f4xx.c
# Libraries source files
#SRCS += stm32f4xx_rcc.c
#SRCS += stm32f4xx_gpio.c
# Binaries will be generated with this name (.elf, .bin, .hex)
PROJ_NAME=test
# Put your STM32F4 library code directory here, change YOURUSERNAME to yours
STM_COMMON=/home/matej/Embedded/STM32F4-Discovery_FW_V1.1.0
# Compiler settings. Only edit CFLAGS to include other header files.
CC=arm-none-eabi-gcc
OBJCOPY=arm-none-eabi-objcopy
# Compiler flags
CFLAGS = -g -O2 -Wall -Tstm32_flash.ld
CFLAGS += -DUSE_STDPERIPH_DRIVER
CFLAGS += -mlittle-endian -mthumb -mcpu=cortex-m4 -mthumb-interwork
CFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16
CFLAGS += -I.
# Include files from STM libraries
CFLAGS += -I$(STM_COMMON)/Libraries/CMSIS/Include
CFLAGS += -I$(STM_COMMON)/Libraries/CMSIS/ST/STM32F4xx/Include
CFLAGS += -I$(STM_COMMON)/Libraries/STM32F4xx_StdPeriph_Driver/inc
CFLAGS += -I$(STM_COMMON)/Utilities/STM32F4-Discovery
# add startup file to build
SRCS += $(STM_COMMON)/Libraries/CMSIS/ST/STM32F4xx/Source/Templates/TrueSTUDIO/startup_stm32f4xx.s
OBJS = $(SRCS:.c=.o)
vpath %.c $(STM_COMMON)/Libraries/STM32F4xx_StdPeriph_Driver/src
.PHONY: proj
all: proj
proj: $(PROJ_NAME).elf
$(PROJ_NAME).elf: $(SRCS)
$(CC) $(CFLAGS) $^ -o $@
$(OBJCOPY) -O ihex $(PROJ_NAME).elf $(PROJ_NAME).hex
$(OBJCOPY) -O binary $(PROJ_NAME).elf $(PROJ_NAME).bin
clean:
rm -f *.o $(PROJ_NAME).elf $(PROJ_NAME).hex $(PROJ_NAME).bin
# Flash the STM32F4
burn: proj
$(STLINK)/st-flash write $(PROJ_NAME).bin 0x80000000
您可以编辑第一行以将路径更改为stlink实用程序文件夹
您可以使用库和YOURUSERNAME
STM_COMMON=/home/YOURUSERNAME/Embedded/STM32F4-Discovery_FW_V1.1.0
将行更改为文件夹的目的地,也可以检出链接所有库的部分。这可能会根据您使用的平台而有所不同,因此请检查文件树中的更改。包括指向某些文件的路径在内的所有其他内容,都可以更改,例如带有启动文件的下一行。
在Makefile中编辑完所有这些内容之后,您可以检查其是否正常运行在目录内打开一个终端,然后输入: make 。如果它可以毫无问题地编译所有东西,那么您就设置好了。如果没有,请查看编译器错误并编辑Makefile。
此外,当我使用Atom时,我并排放置了两段代码。通常main.c和Makefile在左侧,因为您只需要编辑一次Makefile,在右侧编辑库。您可以在图片上看到我打开了包含每个库的.c和.h文件的文件夹。您可以在视频中看到所有这些内容。
第4步:完成!
现在,您已经配置了Makefile并编译器正常工作时,您可以将该文件夹用于所有项目作为模板,因此请确保保存此文件夹的副本。
还可以测试 st-flash 和《通过插入开发板并在终端中键入 st-info 程序:st-info --probe
您可以看到stlink软件可以识别的平台以及IC系列以及缓存和其他东西。您可以键入:st-info以查看所有可用参数。