本文基于 MACOS + STM32CUBEIDE + STM32CUBEMX 下攥写,立志打造MAC操作系统嵌入式开发环境。
调试接口设置说明
需要先使用 CubeMX 进行配置调试接口才可以使用CubeIDE的下载功能
解决报错:
- Serial wire 即 SWD 调试下载模式
- JTAG4/5 即 JTAG 边缘检测调试下载模式
- Trace Asynchronous Sw 据说是自动配置调试可以
参考资料: https://blog.csdn.net/qq_38288618/article/details/98640223
ST-Link 更新报错
st-link is not in the DFU mode
安装stlink utility:
官网下载:https://www.st.com/content/st_com/zh.html
在ST-LINK utility中连接芯片,提示仿真器版本过低,点击更新,报错提示:“ST LINK is not in the DFU mode plesse restart it”
操作步骤
1、拔掉stlink
2、插上stlink(需要确保stlink没有连上MCU)
3、不要搞别的,直接点击ST-LINK->Firmware update->device connect
STM32F103C8T6 核心版配置样例
配置RCC使用外部时钟源
配置错误会导致程序无法正常运行,GPIO高低电平异常。
- HSE(High Speed Clock) < 晶振(板载8M)
- LSE(Low Speed Clock) < 内部时钟
PS: 若未使用RTC时钟,则不要陪着RTC设置,否则会致使运行异常。
参考资料: https://blog.csdn.net/m0_73659470/article/details/127790855
完整项目创建案例
已亲自踩坑,查阅资料无数,以下是正确示范参考
- STM32CubeMX 生成代码模版 -> 工具链/IDE(Toolchain/IDE):
makefile
- Vscode + Embedded IDE创建工程 生成空模版项目:路径选择1处生成路径
- 添加项目资源: 即对应的文件及文件夹,可以将整个目录加入再排出或者对照 makefile 文件增加
- 手动添加
startup_stm32XXXXX.s
文件进项目资源,推荐直接将其复制到 CMSIS 层 - 芯片支持包:当使用GCC编译器不用配置。如果是ARMCC编译器,可以从ARM官网中下载pack支持包,加载到项目;同时也可以在线加载芯片支持包。
构建配置 -> 选择链接脚本路径(.s 文件) -> 选择CPU架构 -> 按如下进行配置编译器选项
参考 makefile 进行设置,大致同 MDK-Arm; 或者参考项目模版进行配置
1.CPU类型根据芯片选择对应内核
2.链接脚本路径选择刚刚拷贝的STM32L475VETx_FLASH.ld
3.目录参考Makefile的C_INCLUDES = \
4.预定义参考Makefile的C_DEFS = \- 编译器: GNU Arm Embedded GCC
- 附加编译选项: C/C++/汇编均为
-ffunction-sections -fdata-sections
- 附加链接器选项:
--specs=nosys.specs --specs=nano.specs -Wl,--gc-sections
- 附加链接库选项:
-lm
- 完整配置模版见本节末
- 预处理宏定义:参考 makefile 进行配置即可,注意删掉参数 -D (定义宏)
- 项目属性:添加项目所有引用的 .h 文件所在目录;注: EIDE 中不能使用
;
进行一行分割多个路径,测试MAC下报错。 烧录配置:
开源项目
st-link
https://github.com/stlink-org/stlink/开源项目
PyOCD
推荐- 推荐使用:
pip3 install pyOCD
终端运行安装即可 - 测试使用: STM32F103C8T6、ST-Link+SWD 可以使用,支持一键下载调试
- 烧录配置: 目标芯片若没有则选相近
报错处理:
C flash program page failure (address 0x08000000; result code 0x1) [__main__]
- 先使用烧写工具先擦出一次再用该程序烧写
- 可以使用
st-flash
进行烧写或者擦写一次之后再使用pyocd 正解如下
- 配置pyocd调试器: 配置参考附录
- 1、先配置其他选项,点击后,需要再pyocd配置文件中,添加对应的pack路径
- 2、再配置对应的芯片信号,只有添加了pack路径后,芯片型号才能正确选择
- 推荐使用:
- Stm32Programer 安装使用即可
OpenOCD 能力有限,折腾许久无果,希望有大佬的话可以带带我~
- 贴个官网: https://openocd.org/
调试配置:
Cortex-Debug + PyOCD 搞定
GCC输出printf
重定向
挖坑待填
构建配置 json
参数设置
直接打开配置,复制粘贴保存,刷新项目即可。
{
"version": 4,
"beforeBuildTasks": [],
"afterBuildTasks": [],
"global": {
"$float-abi-type": "softfp",
"output-debug-info": "enable",
"misc-control": "-ffunction-sections -fdata-sections"
},
"c/cpp-compiler": {
"language-c": "c11",
"language-cpp": "c++14",
"optimization": "level-debug",
"warnings": "all-warnings",
"C_FLAGS": "-ffunction-sections -fdata-sections",
"CXX_FLAGS": "-ffunction-sections -fdata-sections"
},
"asm-compiler": {
"ASM_FLAGS": "-ffunction-sections -fdata-sections"
},
"linker": {
"LD_FLAGS": "--specs=nosys.specs --specs=nano.specs -Wl,--gc-sections",
"output-format": "elf",
"LIB_FLAGS": "-lm"
}
}
下载配置 Pyocd
找不到芯片型号就在于没有指定Pack路径;芯片型号正确之后,下载不需要先进行手动擦出。
pack:
- pack/Keil.STM32F1xx_DFP.2.3.0.pack
PS: 编译正常,程序跑不了,原因就在于4,由于 cubeMX 生成的 startup_stm32XXXXX.s文件路径在项目跟路径,未加入到项目资源中,编译缺少内容;
实用技巧
makefile + GCC 工程与 Keil 互转
转换环境: Vscode + Embedded IDE
主要是在于 startup_stm32XXXXX.s
文件的问题,该文件即 MCU 的分区表信息及编译工具链相应信息;
Keil 所用startup_stm32f10x_hd.S是专门用与keil上的,不能用于gcc,二者有所不同;目前看来的话注释规范不同,语法没有注意:) makefile 导出的 .s 文件的注释规范类似于 C 语言的
- 将 CubeMX 或者 Keil 导出的 MDK-ARM 项目中导入到 EMbedded IDE
- 实用 CubeMX 生成一个对应芯片的 makefile 工程,将其中的 .s 文件和 makefile 文件添加到 1处项目中
- 屏蔽掉项目资源的引用,主要屏蔽冲突的 startup_stm32XXXXX.s 文件,注意不要忘记了手动添加 .s 项目资源文件
另解如下:
- Github搜索:
GCC + 芯片型号
或者makefile + 芯片型号
- 或直接使用 Embedded IDE 进行生成对应 MCU 模版,再进行程序移植。
补充:如何判断是否是编译配置问题?
- 直接尝试进入项目路径在终端中运行:
make
若编译出来文件正确烧写,而 embedded IDE 编译出来的文件烧写运行异常,则可能是编译配置问题; - 比较两边编译hex/bin文件大小,一般异常的文件很小只有几KB。
推荐学习资料
讲的非常好,力推!!!
Comments | NOTHING