XStudio for stm32 (带标准库和HAL库)
版本发布2025-03-15 07:57:21之前支持了 XStudio 开发 STM32单片机项目(基于标准库), 结合收集的建议, 对 STM32 的 HAL 库也进行了支持.
目前 HAL 库支持 STM32F1、STM32F2、STM32F3、STM32F4 四个系列的开发.
另外对使用方法和一些问题进行改善和说明。
同时, 支持STM32 Standard Peripheral Library(标准库) 和 Hardware Absrtaction Layer( HAL库) 开发的版本它来了.
由于作者本人特烦那种 创建项目 或者 编译 的时候去联网下载东西的做法,所以此版已集成最新的标准库和HAL库,无需安装、无需配置环境、使用过程中无需再下载额外组件,解压即用,支持WIN7 (含)以上 64 位操作系统 , 由于预置了较多的库(官方内容未做任何裁剪),所以体积较大。
使用步骤说明:
下载
1. 解压下载的 7z 压缩文件, 注意,尽量不要解压到中文路径下,路径的任一级都不要带有中文,原因会在后面详细说明,
2. 解压完成后运行 XStudio.exe ,见图:
首次使用
3. 首次运行选择外观颜色,选一个相对顺眼的,点击[完成设置].
新建项目
使用向导建立项目
4. 点击主界面上的 [新建项目] , 或者使用菜单 [文件] -> [新建] 打开新建向导, 见图.
- 左侧选择 C/C++ 类型的项目。
- 右侧选择 STM32 微处理器应用
- 选择默认工作路径, 新项目将在此位置建立
- 填写项目名称
- 点击 创建,进入下一步。
选择芯片型号
- 在弹出的对话框下方选择使用 标准库还是 HAL库进行开发
- 上面输入框中输入关键字,找到目标芯片型号。
- 点击 建立按钮。
查看建立的项目
完成后查看新建立的项目
项目建立成功后,IDE会将项目架构组织好。
左键点击项目视图中的文件夹和源文件,打开源文件。
右键点击源文件,可对文件进行重命名、删除、添加等操作。
用不上的视图如大纲、分析、内存、对象和日志视图,可以关闭 (开发其他类型的项目会用到, 但MCU 开发暂时用不到),MCU打印log用RTT View 或者串口查看器更合适,后续可能会在IDE中增加相应的视图。
对于使用 标准库的项目,如果中用到外设功能,到 pch.h 中打开对应的宏即可,Keil 中对应的操作 则是需要操作Manage Run-Time Environment。
对于使用 HAL库的项目,则基本的外设功能都是开放的,可以直接使用。
个性化
如果界面字体不符合使用习惯,可以到菜单的 [工具] -> [选项] 中进行更改, 见图.
修改为小字体
构建项目
点击菜单的 [项目] -> [组建项目] 或者使用快捷键 F7 进行编译、连接, 如果觉得速度慢,可以改用make的方式构建,点击菜单的[项目] -> [属性] 进行修改,如图:
使用 make 多线程构建可以极大的加快编译速度,没有进行修改的文件下一次不会被重新编译(但实践中发现有时头文件修改后,被影响的源文件可能不会被编译到,需要手动清理再编译)。
查看产出文件
构建完成后,点击菜单的 [项目] -> [打开输出目录] 定位到输出目录,查看产出文件, 见图:
IDE会自动通过打开系统资源管理器,定位到输出目录。
调试
将设备通过调试硬件连接到计算机,并在菜单 【项目】->【属性】中选择调试硬件设备,见图:
DAP-link 选择cmsis-dap , Jlink 选择 jlink 或者 jlink-swd ,视具体硬件而定,如果 Jlink 不能成功,可能需要把JLink设备转换为WinUSB设备,请看后面的解决办法。
使用菜单 [项目] -> [调试] 或者快捷键 F5 启动调试, 程序会在 main 方法入口停下,见图,如果不成功,请看输出视图,结合后文的解决办法处理。
调试期间,鼠标悬浮于编辑器的文本上,可查询对应的运行时的数据,
线程-堆栈 视图中可以看到正在运行的线程以及堆栈情况,点击对应的栈帧,可以调到对应的源代码位置。
自动视图中可以查看当前方法的参数、局部变量
监视视图中可以添加监视的对象,如变量、寄存器等,监视寄存器时,需要在前面加 $ 符号,如 r1 ,则添加监视对象为 $r1
断点视图中查看已设置的断点。
内存视图中可查看输入的地址的内存数据,也可以dump到计算机。
见图:
在执行调试过程中,两次中断之间值发生变化的变量,在自动或者监视视图中会以红色标识。
熟悉 gdb 的同学,还可以通过右键点击菜单栏或者工具栏的空白处,打开 gdb 命令窗口,手动输入命令,见图:
手动使用 gdb 命令操作与IDE调试并无冲突,可以在调试的任意时间穿插使用,互不影响。
反汇编调试
点击菜单 [调试] -> [反汇编窗口] 打开反汇编调试。
打开反汇编调试窗口,可以实现指令级的调试。
在调试的过程中,需要对状态进行操作,如果操作不可用 (例如中断、运行按钮为灰色),先选择线程,再执行操作,见图:
点击 停止按钮,可立即停止调试运行.
运行程序
点击 [调试] 菜单下的 [运行],可刷入程序并在非调试状态下直接运行。
编辑源代码
点击对应文件,可在文本编辑器中进行编辑,具有自动完成、跳转定义等辅助操作。
编码设置
IDE 默认编码为UTF8,源文件载入时会自动识别源代码,通过编辑菜单下的 [编码设置] 或者 [转编码为...] 可改变源文件编码,见图.
优化和选项
在菜单 [项目] -> [属性] 中更改编译相关选项:
如同大多数使用 gcc 和 clang 的IDE, 项目属性页中有详尽的编译和链接选项,可根据需求自行配置。
扩展工具
代码格式化 (AStyle扩展)
在菜单 [工具 ] 下,可选择对当前代码进行格式化,也可以在项目视图中,右键点击源代码,在弹出的菜单中使用 [格式化] 功能,格式化相关参数 在 [工具] -> [选项] 中进行调整 , 见图:
静态代码检查 (cppcheck 扩展)
在菜单 [工具 ] 下,可选择对当前代码或者整个项目进行静态检查,也可以在项目视图中,右键点击源代码,在弹出的菜单中使用 [检查] 功能,格式化相关参数 在 [工具] -> [选项] 中进行调整。
其他注意事项和说明:
注意: 尽量避免在中文路径下使用.
经测试, arm 的编译工具对Windows 下的参数列表中的中文路径支持有问题, 可能会导致无法识别 中文路径以及 参数列表文件中的 中文字符.
相关选项:
[项目] -> [属性] -> [项目属性] 标签中 使用make构建项目 为 [未设置] 时,则:
[工具] -> [选项] -> [项目] 标签中 编译时使用参数列表文件 选项 开启 后, 若路径中存在中文字符,将导致最后的链接失败。
[工具] -> [选项] -> [项目] 标签中 使用Unix样式路径 选项 开启 后, 若路径中存在中文字符, 将导致不能编译。
[项目] -> [属性] -> [项目属性] 标签中 使用make构建项目 为 [生成Makefile并构建(-make)] 时, 无论是否存在中文路径均正常.
为了保险起见, 还是建议不要使 XStudio软件本身 或者 项目 的路径存在中文字符, 若一定要在中文路径下使用, 则参考以上内容解决问题.
当 使用makefile构建项目 时, 项目根目录下会生成 Makefile , build.cmd, clean.cmd 3个文件, 不使用IDE的情况下, 运行 build.cmd 可以实现构建项目, 运行 clean.cmd 可以实现清理项目( 清理编译产出物及中间文件).
调试
调试时输出窗口若出现 没有设置调试设备套件 的提示, 则需要打开 [项目] -> [属性] ,在 [调试] 页面中选择 [调试设备套件], 如图:
OpenOCD 支持53 种调试硬件, 经测试常用的像 JLink 、JLink-swd 、DAPLink (cmsis-dap) 几种都可以正常且稳定的进行调试。
注意:该属性页中的微处理器类型需要正确选择,如果是使用 XStudio 创建的项目会自动配置好,不用管,如图:
注意: 此属性页上的 启动命令、 命令行参数及 工作目录对 MCU 的调试无意义。
同时使用多个相同的调试设备未支持(如同时接入两个 JLink),建议只用1个.
无法用 JLink 进行调试
使用 jlink 进行调试时, OpenOCD无法直接识别 JLink, 需要使用工具 Zadig 将 jlink 转换为 WinUSB 设备,操作很简单, 参考这里, OpenOCD 调试要比 Keil 稳定的多,(盗版的 jlink 设备会导致 Keil 一直弹提示框, 而且无缘无故的断开连接和崩溃, 烦不胜烦)
调试时请注意查看输出窗口, 若出现问题, 需要检查电缆是否连接正常,建议重新插拔一下再试。
调试故障
现象: 在调试启动后迟迟无法在 main 函数中断、或者IDE的线程-堆栈窗口中没有运行线程。
进行以下检查:
若 IDE的【线程-堆栈】窗口中有活动线程,选择线程并使其中断,查看中断位置是否正常。
- 检查产出大小是否超出了 Flash 大小。
解决办法: 在项目属性 C/C++ 选项中设置 优化 为 优化体积(可能影响调试体验),或者在链接选项中 启用 不链接未引用对象 ,以及 剔除所有符号(将导致不能源码调试) 。
- 检查 flash.ld 文件中的 RAM 大小和 FLASH 大小是否准确对应硬件参数。
- 检查堆栈是否超出了允许的大小(栈溢出会跑到 HardFault_Handler )
- 检查项目属性中的 C/C++选项和 连接选项,是否生成了调试信息、开启优化情况、以及是否剔除了符号。
调试启动时,输出窗口输出 'Can not find free FPB Comparator' 类似字样,需要检查代码中的断点是不是下的太多,删除一些断点再试
运行状态控制
若操作按钮为灰色(不可用状态), 应先在 [线程-堆栈] 视图中选择活动线程 然后再进行运行、中断等操作,如图:
中断时收到异常中断的提示, 如图:
该提示说明程序收到 SIGINT 中断信号,一般为人为操作引起 (中断程序运行), 可忽略.
更改堆栈大小
在项目根目录下的 Drivers 中 修改 flash.ld 文件中的 _Min_Heap_Size 和 _Min_Stack_Size 的值,如图:
项目结构(基于标准库)
如图:
Source 目录: 用户代码源文件
Include 目录: 用户包含文件
- pch.h 预编译头文件, 解除其中各项宏的注释, 可以直接使用对应的调用 (更改此文件后建议清理项目再编译), 如要使用USART,则解除#define USE_USART 的注释 (往往几个外设或功能之间是互相依赖的, 需要根据编译输出信息开放其他功能) 。
Drivers 目录: 系统驱动相关文件
- sysmem.c 和 syscalls.c 为系统调用函数库 如 _open _close _fstat _lseek _exit 等的实现 (不建议手动修改)。
- flash.ld 为链接脚本,负责定义链接器如何组织目标文件中各项元素 (除堆栈大小外, 不建议手动修改)。
- stm32f10x_it.c 系统中断调用 如 SysTick_Handler、HardFault_Handler、BusFault_Handler 等(可以根据需求编辑)。
- stm32f10x_it.h 为stm32f10x_it.c 中实现的声明 (可以根据需求编辑)。
- startup_stm32f10x_md.s 系统启动脚本, 负责引导硬件运行和加载程序 (不建议手动修改)。
- stm32f10x_conf.h 外设功能的引用 (一般不用动)。
- drv_system_stm32f10x.c 该文件直接 include 标准库中对应的文件,为系统相关调用(一般不用动)。
Device 目录: 外设功能实现 ,此目录下的所有文件直接 include 系统库中的对应文件 (一般不用动)。
上一篇:xlang 4.0 更新信息下一篇:tomcat 内存占用问题排查

