当前位置: 首页 > news >正文

stm32在linux环境下的开发与调试

环境安装

注:文末提供一键脚本

下载安装stm32cubeclt

下载地址为:https://www.st.com/en/development-tools/stm32cubeclt.html

选择 linux版本下载安装

在这里插入图片描述

安装好后默认在家目录st下

> $ ls ~/st/stm32cubeclt_1.16.0                                                                           
CMake                jre    STLink-gdb-server           STLinkUpgrade.sh          STM32CubeProgrammer  STMicroelectronics_CMSIS_SVD       uninstall_clt.sh
GNU-tools-for-STM32  Ninja  stlink-server.uninstall.sh  STM32CubeCLT_metadata.sh  STM32target-mcu      st-stlink-udev-rules.uninstall.sh

下载安装stm32cubemx

下载地址为https://www.st.com/en/development-tools/stm32cubemx.html

同样下载安装linux版本,安装好后默认在~/STM32CubeMX

开发调试

1. 工程初始化

使用cubemx随意生成一个cmake的测试工程,进入到工程目录

cd balance-car  #balance-car为我测试工程文件夹
export PATH=$PATH:$HOME/st/stm32cubeclt_1.16.0/GNU-tools-for-STM32/bin
mkdir build && cd build
cmake ..

2. 工程编译

继续在build目录执行make命令

make

出现以下内容表示编译成功

Memory region         Used Size  Region Size  %age UsedRAM:        2928 B        20 KB     14.30%FLASH:       53928 B        64 KB     82.29%
[100%] Built target balance-car

编译好后的二进制名为balance-car.elf

3.工程下载

执行以下命令下载程序

 ~/st/stm32cubeclt_1.16.0/STM32CubeProgrammer/bin/STM32_Programmer_CLI --connect port=swd --download ./balance-car.elf -hardRst -rst --start

下载成功提示输出:

Erasing memory corresponding to segment 0:
Erasing internal memory sectors [0 52]
Download in Progress:
[==================================================] 100%File download complete
Time elapsed during download operation: 00:00:03.233Hard reset is performedMCU ResetSoftware reset is performedRUNNING Program ...Address:      : 0x8000000
Application is running, Please Hold on...
Start operation achieved successfully

4.工程调试

启动gdbserver

打开一个新的命令窗口进入以下目录

cd ~/st/stm32cubeclt_1.16.0/STLink-gdb-server/bin/

修改此目录下config.txt 中-cp字段,注意需要将home后yala字段修改为自己对应家目录名称

###############################################################
#  -cp <path>         : Path to STM32CubeProgrammer
#                       Modify to correct path
#                       for STM32_Programmer_CLI executable
###############################################################
-cp /home/yala/st/stm32cubeclt_1.16.0/STM32CubeProgrammer/bin

此修改只进行一次,修改完成后启动gdb

./ST-LINK_gdbserver -c config.txt

启动成功输出如下

STMicroelectronics ST-LINK GDB server. Version 7.8.0
Copyright (c) 2024, STMicroelectronics. All rights reserved.Starting server with the following options:Persistent Mode            : EnabledLogFile Name               : debug.logLogging Level              : 31Listen Port Number         : 61234Status Refresh Delay       : 15sVerbose Mode               : DisabledSWD Debug                  : EnabledCOM frequency = 4000 kHz
Target connection mode: Default
Reading ROM table for AP 0 @0xe00fffd0
Hardware watchpoint supported by the target
ST-LINK Firmware version : V2J45S7
Device ID: 0x410
PC: 0x800b31c
ST-LINK device status: HALT_MODE
ST-LINK detects target voltage = 3.00 V
ST-LINK device status: HALT_MODE
ST-LINK device initialization OK
Stm32Device, pollAndNotify running...
SwvSrv state change: 0 -> 1
Waiting for connection on port 61235...
Waiting for debugger connection...
Waiting for connection on port 61234...
开始调试

回到build目录,启动gdb

~/st/stm32cubeclt_1.16.0/GNU-tools-for-STM32/bin/arm-none-eabi-gdb balance-car.elf

在gdb中连接到gdbserver

(gdb) target remote localhost:61234
Remote debugging using localhost:61234
Reset_Handler () at /home/junchao/work/balance-car/startup_stm32f103xb.s:64
64          bl  SystemInit

到这里就可以正常开始下断点调试了

EXT:方法2

从第三步开始,可以使用stlink开源工具实现程序下载、调试

从https://github.com/stlink-org/stlink/releases下载最新deb安装包,安装

sudo dpkg -i ./stlink_1.8.0-1_amd64.deb
  1. 启动gdbserver

    st-util
    

    成功输出为

    st-util 1.8.0
    2024-11-15T15:40:21 INFO common.c: NRST is not connected --> using software reset via AIRCR
    2024-11-15T15:40:21 INFO common.c: STM32F1xx_MD: 20 KiB SRAM, 64 KiB flash in at least 1 KiB pages.
    2024-11-15T15:40:21 INFO gdb-server.c: Listening at *:4242...
    
  2. 下载调试

    回到build目录,执行改变

    ~/st/stm32cubeclt_1.16.0/GNU-tools-for-STM32/bin/arm-none-eabi-gdb balance-car.elf
    

    在gdb中连接到gdbserver

    (gdb) target remote localhost:4242
    Remote debugging using localhost:4242
    main () at /home/junchao/work/balance-car/Core/Src/main.c:74
    74        uint32_t loop_cnt = 0;
    

    现在即可开始调试。若重新编译二进制后可以使用load命令下载更新程序

    (gdb) load balance-car.elf
    Loading section .isr_vector, size 0x10c lma 0x8000000
    Loading section .text, size 0xbe54 lma 0x8000110
    Loading section .rodata, size 0x1108 lma 0x800bf68
    Loading section .ARM, size 0x8 lma 0x800d070
    Loading section .init_array, size 0x4 lma 0x800d078
    Loading section .fini_array, size 0x4 lma 0x800d07c
    Loading section .data, size 0x228 lma 0x800d080
    Start address 0x0800b31c, load size 53920
    Transfer rate: 11 KB/sec, 5392 bytes/write.
    

一键脚本

编写了一个脚本用于一键操作

将脚本放到工程根目录(勿放到build目录),cubemx生成的工程文件夹名称不能修改,脚本依赖它运行

使用示例

./st-tool build  #编译项目
./st-tool dbg  # 启动调试
./st-tool dbg load # gdb启动后先进行程序下载操作再进行调试
./st-tool flash # 下载程序

请注意修改 脚本中$HOME/st/stm32cubeclt_1.16.0路径

#!/bin/bashexport PATH=$PATH:$HOME/st/stm32cubeclt_1.16.0/GNU-tools-for-STM32/bin/  # 自动检测项目名称
PROJECT_NAME=$(basename $(pwd))# 工具链配置
TOOLCHAIN_PREFIX="arm-none-eabi-"
GCC="${TOOLCHAIN_PREFIX}gcc"
OBJCOPY="${TOOLCHAIN_PREFIX}objcopy"
GDB="${TOOLCHAIN_PREFIX}gdb"# ST-Link配置
STLINK_FLASH="st-flash"
STLINK_UTIL="st-util"# 编译函数
compile() {if [ ! -d "build" ]; thenecho "Creating build directory..."mkdir buildficd buildif [ ! -f "Makefile" ]; thenecho "Running CMake..."cmake ..fiecho "Compiling project..."makeif [ $? -eq 0 ]; thenecho "Compilation successful."elseecho "Compilation failed."exit 1ficd ..
}# 烧录函数
flash() {if [ ! -f "build/${PROJECT_NAME}.elf" ]; thenecho "ELF file not found. Please compile the project first."exit 1fiecho "Creating binary file..."$OBJCOPY -O binary "build/${PROJECT_NAME}.elf" "build/${PROJECT_NAME}.bin"echo "Flashing binary to device..."$STLINK_FLASH write "build/${PROJECT_NAME}.bin" 0x8000000
}# GDB调试函数
debug() {if [ ! -f "build/${PROJECT_NAME}.elf" ]; thenecho "ELF file not found. Please compile the project first."exit 1fiecho "Starting ST-Link GDB server..."$STLINK_UTIL &STUTIL_PID=$!local load_command=""if [ "$1" = "load" ]; thenecho "exec load"load_command="-ex load build/${PROJECT_NAME}.elf"fiecho "Starting GDB debug session..."# $GDB -ex "target remote localhost:4242" "build/${PROJECT_NAME}.elf"$GDB -ex "set confirm off" \-ex "target remote localhost:4242" \$load_command \-ex "monitor reset halt" \-ex "monitor reset init" \"build/${PROJECT_NAME}.elf"# 清理ST-Link GDB server# kill $STUTIL_PID
}# 帮助信息
show_help() {echo "Usage: $0 [option]"echo "Options:"echo "  build    Compile the project"echo "  flash      Flash the binary to the device"echo "  dbg      Start a GDB debug session"echo "  help       Show this help message"
}# 主函数
main() {case "$1" inbuild)compile;;flash)flash;;dbg)if [ "$2" = "load" ]; thendebug loadelsedebugfi;;help)show_help;;*)echo "Invalid option. Use '$0 help' for usage information."exit 1;;esac
}# 执行主函数
main "$@"

相关文章:

stm32在linux环境下的开发与调试

环境安装 注&#xff1a;文末提供一键脚本 下载安装stm32cubeclt 下载地址为&#xff1a;https://www.st.com/en/development-tools/stm32cubeclt.html 选择 linux版本下载安装 安装好后默认在家目录st下 > $ ls ~/st/stm32cubeclt_1.16.0 …...

flinkOnYarn并配置prometheus+grafana监控告警

flinkOnYarn并配置prometheusgrafana监控告警 一、相关服务版本&#xff1a; flink版本&#xff1a;1.17.2 pushgateway版本&#xff1a;1.10.0 prometheus版本&#xff1a;3.0.0 grafana-v11.3.0参考了网上的多个文档以及学习某硅谷的视频&#xff0c;总结了一下文档&#x…...

麒麟系统下docker搭建jenkins

首先我们需要创建宿主机挂载路径&#xff0c;我这里放在本地的/data/henkins/home,然后赋予权限&#xff0c;命令如下&#xff1a; mkdir -p /data/jenkins/home chown -R 1000:1000 /data/jenkins/home chmod -R 777 /data/jenkins/homedocker run -d --restart …...

论文阅读 - Causally Regularized Learning with Agnostic Data Selection

代码链接&#xff1a; GitHub - HMTTT/CRLR: CRLR尝试实现 https://arxiv.org/pdf/1708.06656v2 目录 摘要 INTRODUCTION 2 RELATED WORK 3 CAUSALLY REGULARIZED LOGISTIC REGRESSION 3.1 Problem Formulation 3.2 Confounder Balancing 3.3 Causally Regularized Lo…...

计算机网络之会话层

一、会话层的核心功能 会话层作为OSI模型的第五层&#xff0c;不仅承担着建立、管理和终止通信会话的基本任务&#xff0c;还隐含着许多复杂且关键的功能&#xff0c;这些功能共同确保了网络通信的高效、有序和安全。 1. 会话建立与连接管理&#xff1a; 身份验证与授权&…...

blind-watermark - 水印绑定

文章目录 一、关于 blind-watermark安装 二、bash 中使用三、Python 调用1、基本使用2、attacks on Watermarked Image3、embed images4、embed array of bits 四、并发五、相关 Project 一、关于 blind-watermark Blind watermark 基于 DWT-DCT-SVD. github : https://githu…...

reduce-scatter:适合分布式计算;Reduce、LayerNorm和Broadcast算子的执行顺序对计算结果的影响,以及它们对资源消耗的影响

目录 Gather Scatter Reduce reduce-scatter:适合分布式计算 Reduce、LayerNorm和Broadcast算子的执行顺序对计算结果的影响,以及它们对资源消耗的影响 计算结果理论正确性 资源消耗方面 Gather 这个也很好理解,就是把多个进程的数据拼凑在一起。 Scatter 不同于Br…...

DAY64||dijkstra(堆优化版)精讲 ||Bellman_ford 算法精讲

dijkstra&#xff08;堆优化版&#xff09;精讲 题目如上题47. 参加科学大会&#xff08;第六期模拟笔试&#xff09; 邻接表 本题使用邻接表解决问题。 邻接表的优点&#xff1a; 对于稀疏图的存储&#xff0c;只需要存储边&#xff0c;空间利用率高遍历节点链接情况相对容…...

使用Git工具在GitHub的仓库中上传文件夹(超详细)

如何使用Git工具在GitHub的仓库中上传文件夹&#xff1f; 如果觉得博主写的还可以&#xff0c;点赞收藏关注噢~ 第一步&#xff1a;拥有一个本地的仓库 可以fork别人的仓库或者自己新创建 fork别人的仓库 或者自己创建一个仓库 按照要求填写完成后&#xff0c;点击按钮创建…...

Python酷库之旅-第三方库Pandas(218)

目录 一、用法精讲 1021、pandas.DatetimeIndex.inferred_freq属性 1021-1、语法 1021-2、参数 1021-3、功能 1021-4、返回值 1021-5、说明 1021-6、用法 1021-6-1、数据准备 1021-6-2、代码示例 1021-6-3、结果输出 1022、pandas.DatetimeIndex.indexer_at_time方…...

斗鱼大数据面试题及参考答案

MySQL 索引及引擎区别 一、MySQL 索引 索引是一种数据结构,用于快速查找数据库中的数据。它就像是一本书的目录,通过索引可以快速定位到需要的数据行,而不用全表扫描。 普通索引 普通索引是最基本的索引类型,它没有任何限制,可以在一个或多个列上创建。例如,在一个用户表…...

后仿真中的GLS测试用例的选取规则

一 仿真目的 门级仿真的主要目的,从根本上来说,是确保在物理实现阶段所应用的SDC(Standard Delay Constraint,标准延迟约束文件)中的各项约束条件准确无误地反映了设计的初衷和要求。这一环节在芯片设计的整体流程中占据着至关重要的地位,因为它直接关系到最终芯片的物理…...

对接阿里云实人认证

对接阿里云实人认证-身份二要素核验接口整理 目录 应用场景 接口文档 接口信息 请求参数 响应参数 调试 阿里云openApi平台调试 查看调用结果 查看SDK示例 下载SDK 遇到问题 本地调试 总结 应用场景 项目有一个提现的场景&#xff0c;需要用户真实的身份信息。 …...

UI库架构设计

UI库架构设计 分层 rc-xxx&#xff0c;提供基础组件&#xff0c;unstyled component (headless) &#xff0c;只具备功能交互&#xff0c;不具备UI表现样式体系基础组件复合组件&#xff0c;Search&#xff1a;Input Select &#xff0c;IconButton&#xff1a;Icon Button业…...

电子应用产品设计方案-9:全自动智能马桶系统设计方案

一、系统概述 本全自动智能马桶系统旨在提供舒适、卫生、便捷和智能化的如厕体验。通过融合多种传感器技术、电子控制单元和机械执行机构&#xff0c;实现马桶的自动冲洗、座圈加热、臀部清洗、烘干等功能&#xff0c;并具备智能感应、用户个性化设置和健康监测等特色功能。 二…...

My_SQL day3

知识点&#xff1a;约束 1.dafault 默认约束 2.not null 非空约束 3.unique key 唯一约束 4.primary key 主键约束 5.anto_increment 自增长约束 6.foreign key 外键约束 知识点&#xff1a;表关系 1.一对一 2.一对多 3.多对多 知识点&#xff1a;约束 1.default 默认约束 …...

【代码随想录day31】【C++复健】56. 合并区间;738.单调递增的数字

56. 合并区间 遇到了三个问题&#xff0c;一一说来&#xff1a; 1 比较应该按左区间排序&#xff0c;我却写了右区间。由于本题是合并区间&#xff0c;判断是否连续显然是用下一个的左区间与前一个的右区间比较&#xff0c;属于没想清楚了。 2 在写for循环时写成了如下的代码…...

jmeter常用配置元件介绍总结之逻辑控制器

系列文章目录 安装jmeter jmeter常用配置元件介绍总结之逻辑控制器 逻辑控制器1.IF控制器2.事务控制器3.循环控制器4.While控制器5.ForEach控制器6.Include控制器7.Runtime控制器8.临界部分控制器9.交替控制器10.仅一次控制器11.简单控制器12.随机控制器13.随机顺序控制器14.吞…...

解决Windows远程桌面 “为安全考虑,已锁定该用户账户,原因是登录尝试或密码更改尝试过多。请稍后片刻再重试,或与系统管理员或技术支持联系“问题

当我们远程连接服务器连接不上并提示“为安全考虑&#xff0c;已锁定该用户账户&#xff0c;原因是登录尝试或密码更改尝试过多。请稍候片刻再重试&#xff0c;或与系统管理员或技术支持联系”时&#xff0c;根本原因是当前计算机远程连接时输入了过多的错误密码&#xff0c;触…...

中文书籍对《人月神话》的引用(161-210本):微软的秘密

中文书籍对《人月神话》的引用&#xff08;第001到160本&#xff09;>> 《人月神话》于1975年出版&#xff0c;1995年出二十周年版。自出版以来&#xff0c;该书被大量的书籍和文章引用&#xff0c;直到现在热潮不退。 2023年&#xff0c;清华大学出版社推出《人月神话》…...

Path of Building终极指南:三步解锁流放之路最强角色构建

Path of Building终极指南&#xff1a;三步解锁流放之路最强角色构建 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding 想要在《流放之路》中打造完美角色却总是迷失在复杂…...

EMQX Dashboard 5.1新手指南:从安装到安全配置的完整流程

EMQX Dashboard 5.1新手指南&#xff1a;从安装到安全配置的完整流程 在物联网和实时消息传递领域&#xff0c;EMQX作为一款高性能的MQTT消息服务器&#xff0c;已经成为众多企业构建可靠物联网平台的首选。而EMQX Dashboard作为其内置的Web管理控制台&#xff0c;在5.1版本中迎…...

FOC算法中SIMULINK常用模块解析:从坐标变换到SVPWM(实践指南)

1. FOC算法与SIMULINK模块概述 第一次接触FOC&#xff08;磁场定向控制&#xff09;算法时&#xff0c;我被那些复杂的坐标变换搞得晕头转向。直到在SIMULINK里亲手搭建了完整的控制环路&#xff0c;才真正理解每个模块的作用。FOC算法的核心思想&#xff0c;简单来说就是把三相…...

RVC与VITS技术对比:检索式vs端到端语音转换的适用场景分析

RVC与VITS技术对比&#xff1a;检索式vs端到端语音转换的适用场景分析 1. 引言 你有没有想过&#xff0c;为什么有些AI翻唱听起来特别像原唱&#xff0c;而有些则感觉“味儿”不太对&#xff1f;或者&#xff0c;为什么有些语音转换工具训练起来飞快&#xff0c;但效果时好时…...

思博伦TestCenter打流丢包?别急着甩锅设备,先看看这个20字节的‘隐形签名’

思博伦TestCenter打流丢包&#xff1f;别急着甩锅设备&#xff0c;先看看这个20字节的‘隐形签名’ 当你在深夜的机房里盯着思博伦TestCenter的测试报告&#xff0c;发现RFC2544吞吐量测试结果突然归零&#xff0c;而端口统计与流统计的数值差异大得离谱时&#xff0c;那种抓狂…...

2步实现格式自由:Save Image as Type让网页图片转换体验升级10倍

2步实现格式自由&#xff1a;Save Image as Type让网页图片转换体验升级10倍 【免费下载链接】Save-Image-as-Type Save Image as Type is an chrome extension which add Save as PNG / JPG / WebP to the context menu of image. 项目地址: https://gitcode.com/gh_mirrors…...

3步搞定AtlasOS系统技术故障:Xbox控制器驱动完全解决方案

3步搞定AtlasOS系统技术故障&#xff1a;Xbox控制器驱动完全解决方案 【免费下载链接】Atlas &#x1f680; An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trending/at…...

如何在ComfyUI中玩转WanVideo:从零到一的视频生成魔法

如何在ComfyUI中玩转WanVideo&#xff1a;从零到一的视频生成魔法 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 你是否曾经想过&#xff0c;如果能像搭积木一样轻松创作视频该有多好&#xff…...

vLLM-v0.17.1与卷积神经网络(CNN)结合:多模态理解新思路

vLLM-v0.17.1与卷积神经网络&#xff08;CNN&#xff09;结合&#xff1a;多模态理解新思路 1. 多模态AI的行业痛点与解决方案 计算机视觉和自然语言处理长期作为AI两大独立分支发展&#xff0c;但在实际业务场景中&#xff0c;图像与文本的协同理解需求日益凸显。传统方案通…...

C++ 异常安全的最佳策略

C 异常安全的最佳策略 在C开发中&#xff0c;异常安全是确保程序在抛出异常时仍能保持正确性和资源管理的关键。异常处理不当可能导致内存泄漏、数据不一致或资源未释放等问题。本文将探讨C异常安全的最佳策略&#xff0c;帮助开发者编写更健壮的代码。 资源管理&#xff1a;…...