搭建STM32开发环境

下载驱动工具

  • 安装openocd

用于发现和连接stlink
sudo apt-get install openocd

  • 安装stlink

下载地址:https://github.com/stlink-org/stlink/tags
下载源码 stlink-1.8.0.zip 包

1
2
3
4
5
6
unzip stlink-1.8.0.zip
cd stlink-1.8.0
# 编译
make
# 编译安装
make install

在build/Release/bin 生成工具程序
./st-flash –version

  • 安装gcc-arm-none-eabi(交叉编译链)
    1
    sudo apt-get install gcc-arm-none-eabi
    若编译链版本有要求,可以自行下载对应版本

配置环境变量

stm32 网址指导说明,详细介绍了如何下载基础工程和编译环境。如果需要先跑通测试工程,可以参考以下链接
指导说明

1、创建目录

1
2
3
4
5
6
mkdir STM32-base
cd STM32-base
mkdir libraries
mkdir projects
mkdir templates
mkdir tools

确保安装了 “git”和“make”若无则执行

1
2
3
sudo apt-get install git
sudo apt-get install make

2、下载交叉编译链
编译环境下载
最新版本

解压后,放入STM32-base/tools

1
2
3
4
cd ~/Downloads
tar xjf gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2
mv gcc-arm-none-eabi-10.3-2021.10-x86_64-linux/* STM32-base/tools

3、下载基础工程和编译脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
# 下载编译make文件
cd ~/projects/STM32-base
git clone https://github.com/STM32-base/STM32-base.git
git clone https://github.com/STM32-base/STM32-base-STM32Cube.git

# 下载模板工程
cd ../templates/
git clone https://github.com/STM32-base/STM32-base-F0-template.git
git clone https://github.com/STM32-base/STM32-base-F1-template.git
# 创建软连接
cd STM32-base-F1-template
ln -s ../../STM32-base
ln -s ../../STM32-base-STM32Cube

4、编译
在模板工程目录下执行,输出文件会在 bin/目录找到 “stm32_bin_image.bin”、”stm32_executable.elf”

1
make

烧录与调试

确保自己安装好了openocd 和 stlink 工具,并且硬件已经连接好。
1、进入demo工程

1
2
3
cd STM32-base-F1-template
make flash

2、单独烧录

  • st-flash 命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $ st-flash write ./bin/stm32_bin_image.bin 0x08000000
    以下日志表示成功
    st-flash 1.8.0
    2024-07-08T14:53:24 INFO common.c: STM32F1xx_MD: 20 KiB SRAM, 64 KiB flash in at least 1 KiB pages.
    file ./bin/stm32_bin_image.bin md5 checksum: 5e908f9c1f5ce5aa7b606ea58a28bf, stlink checksum: 0x0002a810
    2024-07-08T14:53:24 INFO common_flash.c: Attempting to write 3308 (0xcec) bytes to stm32 address: 134217728 (0x8000000)
    -> Flash page at 0x8000c00 erased (size: 0x400)
    2024-07-08T14:53:24 INFO flash_loader.c: Starting Flash write for VL/F0/F3/F1_XL
    2024-07-08T14:53:24 INFO flash_loader.c: Successfully loaded flash loader in sram
    2024-07-08T14:53:24 INFO flash_loader.c: Clear DFSR
    2024-07-08T14:53:24 INFO flash_loader.c: Clear CFSR
    2024-07-08T14:53:24 INFO flash_loader.c: Clear HFSR
    4/4 pages written
    2024-07-08T14:53:24 INFO common_flash.c: Starting verification of write complete
    2024-07-08T14:53:24 INFO common_flash.c: Flash written and verified! jolly good!
    2024-07-08T14:53:24 INFO common.c: Go to Thumb mode

  • st-info 命令

st-info --probe
日志正确显示

1
2
3
4
5
6
7
Found 1 stlink programmers
version: V2J37S7
serial: 0F000900012D353436455744
flash: 65536 (pagesize: 1024)
sram: 20480
chipid: 0x410
dev-type: STM32F1xx_MD

错误显示: 解决方式见下文

1
2
3
4
5
6
7
8
9
Failed to enter SWD mode
Found 1 stlink programmers
version: V2J37S7
serial: 0F000900012D353436455744
flash: 0 (pagesize: 0)
sram: 0
chipid: 0x000
dev-type: unknown

问题

1、缺少动态库

1
2
3
# st-flash write ./bin/stm32_bin_image.bin 0x08000000
st-flash: error while loading shared libraries: libstlink.so.1: cannot open shared object file: No such file or directory

解决方式:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
或者 sudo ldconfig

2、烧录失败,进入swd模式失败

1
2
3
4
5
6
st-flash write ./bin/stm32_bin_image.bin 0x08000000
st-flash 1.8.0
Failed to enter SWD mode
Failed to connect to target
Failed to parse flash type or unrecognized flash type

可能原因:

  • 外部硬件未连接好
  • 模式未设置正确
  • 固件未擦除
    解决方式
    1
    2
    3
    # 按住reset键不动,然后执行,显示成功后松开
    st-flash --connect-under-reset erase

    3、bin文件大小过大,无法烧录
    解决方式:换成标准库开发或者裁剪HAL库工程大小