文字大小:

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. 点击主界面上的  [新建项目] , 或者使用菜单  [文件] -> [新建] 打开新建向导, 见图.

点击新建项目
  1. 左侧选择 C/C++ 类型的项目。
  2. 右侧选择 STM32 微处理器应用
  3. 选择默认工作路径, 新项目将在此位置建立
  4. 填写项目名称
  5. 点击 创建,进入下一步。
创建新项目

选择芯片型号

选择芯片型号
  1. 在弹出的对话框下方选择使用 标准库还是 HAL库进行开发
  2. 上面输入框中输入关键字,找到目标芯片型号。
  3. 点击 建立按钮。

查看建立的项目

完成后查看新建立的项目

查看项目结构

项目建立成功后,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命令窗口

手动使用 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 内存占用问题排查

评论

写评论

点击刷新