MacOS之STM32CubeMX和System Workbench系列问题解决

2024-04-18 09:38

本文主要是介绍MacOS之STM32CubeMX和System Workbench系列问题解决,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

自从主力机器使用MBP以后,家里的唯一的一台Windows机器就是NAS了,一直远程使用NAS在Win下面玩STM MCU。但是低功耗的J3160跑开发还是慢啊,最近终于下决心把开发环境迁移到MacOS并使用完全开源IDE,决定使用STM32CubeMX和System Workbench的组合。折腾了大约一天,遇到了好几个坑,在MacOS和Win10之间来回折腾最终解决了。在此记录一下并分享给大家。

软件版本:
STM32CubeMX V4.25.0  

System Workbench V2.4

硬件:麒麟座Mini版

MacOS下遇到的问题:

1.1 Eclipse下载的时候报错:
Info : vid/pid are not identical: 0x0483/0x374B 0x0483/0x3748

1.2 Eclipse下载的时候报错:

Error: init mode failed (unable to connect to the target)
*******************
** OpenOCD init failed **

1.3 Eclipse下载的时候报错:

Error: timed out while waiting for target halted
TARGET: STM32F103RETx.cpu - Not halted
in procedure 'program' 
in procedure 'reset' called at file "embedded:startup.tcl", line 490
in procedure 'ocd_bouncer'
** Unable to reset target **
shutdown command invoked

 

Win下遇到的问题:

2.1 Stlink USB communication error

2.2 No Target Connected

 

2.3 Error:Flash Download Failed-"Cortex-M3"

2.4 Cannot load flash programming algorithm

      因为对STM32CubeMX不熟悉, 然后参考了某网站的教程,该教程里面没有提到SYS设置,而STM32CubeMX默认SYS设置里面的Debug选项默认是No Debug, 然后我就开始了烧写,然后就出现了问题1.1(Info : vid/pid are not identical: 0x0483/0x374B 0x0483/0x3748)和问题1.2 (** OpenOCD init failed **)的错误。未配置SYS就进行烧写导致PA13和PA14引脚被错误设置,所以无法下载程序,错误设置后即便修正了SYS设置(Debug选择Serial Wire)也无法正常下载。搜索了很多网上相关的网页,而且尝试升级了STlink V2的固件 (http://www.st.com/en/development-tools/stsw-link007.html ),都没解决问题1.2 。

    而问题1.1的解决比较简单,就是不使用自动生成的cfg配置文件,自定义cfg配置文件并修改其中的 source [find interface/stlink.cfg] 为source [find interface/stlink-v2.cfg] 即可。这两个文件在/Applications/Ac6/SystemWorkbench.app/Contents/Eclipse/plugins/fr.ac6.mcu.debug_2.1.4.201801121207/resources/openocd/st_scripts/interface/下,有兴趣可以看一下,其中一个pid是0x374B,另外一个pid是0x3748,所以使用stlink-v2.cfg这个正确的文件即可,还有一个文件是stlink-v2-1.cfg,里面的pid也不匹配。

     问题1.2折腾无果后,然后决定在Win下面尝试一下,因为原先Win下面用Keil是可以的。然后Keil下载麒麟座自带的跑马灯程序的时候,遇到了问题2.1 (Stlink USB communication error),网上有两个方法解决:升级Keil,或者给STlink-v2固件降级(好吧 我两样都做了),低版本固件地址(V2.J20.S4 链接:https://pan.baidu.com/s/1dHlgYwL 密码:6vwr),解决了问题2.1。再次尝试用Keil下载,遇到了问题2.2(No Target Connected)。

    其实问题2.2的原因和问题1.2一样,都是因为PA13和PA14引脚被错误设置导致的。于是搜了很久,参考了西城无故事的博客(https://blog.csdn.net/liaodong2010/article/details/52734384 )和周勇的博客( http://zhyong319.blog.163.com/blog/static/6857205201276105311857/),他们的解决方式是下载前手动reset大约0.5s然后有一定概率能正常烧写,但是我在周勇的博客评论中看到一个更简单的方法,那就是把Boot0和Boot1拉高,随意写一个能跑的程序然后就能正常烧写了。

      解决了这两个问题以后,再次尝试Keil烧写,遇到了错误2.3和错误2.4,主要原因是因为升级了Keil,板子类型没有选对,在Flash->Configure Falsh Tools配置窗口中,切换到“Utilities"页,按“Setting"按钮进入“Flash download setup"配置窗口,在“Flash download setup"配置窗口点击“Add”按钮,在“Add Flash Programming Algorlthm"窗口中选择STM32F10x Med-density 128k (麒麟座Mini版的处理器是STM32F103CBT6 128k Flash),然后2.3和2.4就都解决了。

 

      然后回到MacOS,再次烧写,遇到1.3错误,解决办法是把配置文件中的 reset_config 这一行改为reset_config none 即可。最后一个问题是,如果在项目名称上点右键,如果直接选择Target-Program chip,我这里无法把最新程序下载到MCU上。不过直接在菜单栏上点击Run是可以下载的。后来发现需要先右键-Build project,然后右键再选择Target-Program chip才可以。所以还是直接菜单栏点击Run最方便。

     最后,我把STlink V2的固件升级到最新,全部都能正常工作了。

      总结一下:

 

MacOS下遇到的问题解决方法:

1.1 Eclipse下载的时候报错:

Info : vid/pid are not identical: 0x0483/0x374B 0x0483/0x3748

解决方法:

使用自定义配置文件进行编译,并进行如下修改:

source [find interface/stlink.cfg] 更改为 source [find interface/stlink-v2.cfg]

自定义配置文件方法,直接右键点击 项目名 Run.cfg 文件并改个文件名,然后右键点击项目树里面的项目名称,选择“Propeties”,然后在Run/Debug Settings-选择项目名-Edit-Debugger-User Defined-Browse 那里选择你自己改名的配置文件:

 

1.2 Eclipse下载的时候报错:

Error: init mode failed (unable to connect to the target)
*******************
** OpenOCD init failed **

解决方法:这里是由于PA13和PA14被错误配置导致的。首先修复STM32CubeMX中的SYS设置,在SYS-Debug中选择Serial Wire。然后拉高Boot0和Boot1烧写一个正常固件,然后拉低他们,就能正常烧写了。

 

 

1.3 Eclipse下载的时候报错:

Error: timed out while waiting for target halted
TARGET: STM32F103RETx.cpu - Not halted
in procedure 'program' 
in procedure 'reset' called at file "embedded:startup.tcl", line 490
in procedure 'ocd_bouncer'
** Unable to reset target **
shutdown command invoked

 

解决方法:

修改 * Run.cfg文件,把 reset_config srst_only srst_nogate connect_assert_srst 这一行改为 reset_config none 

配置文件自定义方法参考1.1 解决方法。

Win下遇到的问题解决方法:

2.1 Stlink USB communication error 

解决方法:更新Keil,或者给STLink V2固件降级。V2.J20.S4 链接:https://pan.baidu.com/s/1dHlgYwL 密码:6vwr

2.2 No Target Connected

解决方法:这里是由于PA13和PA14被错误配置导致的。拉高Boot0和Boot1烧写一个正常固件,然后拉低他们,就能正常烧写了。

2.3 Error:Flash Download Failed-"Cortex-M3"
解决方法:这里是由于芯片类型没有选择正确导致的。在Flash->Configure Falsh Tools配置窗口中,切换到“Utilities"页,按“Setting"按钮进入“Flash download setup"配置窗口,在“Flash download setup"配置窗口点击“Add”按钮,在“Add Flash Programming Algorlthm"窗口中选择正确的芯片型号和Flash大小即可。

2.4 Cannot load flash programming algorithm
解决方法:这里是由于芯片类型没有选择正确导致的。解决方法同上。

 

 

这篇关于MacOS之STM32CubeMX和System Workbench系列问题解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/914420

相关文章

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

mac中资源库在哪? macOS资源库文件夹详解

《mac中资源库在哪?macOS资源库文件夹详解》经常使用Mac电脑的用户会发现,找不到Mac电脑的资源库,我们怎么打开资源库并使用呢?下面我们就来看看macOS资源库文件夹详解... 在 MACOS 系统中,「资源库」文件夹是用来存放操作系统和 App 设置的核心位置。虽然平时我们很少直接跟它打交道,但了

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

Mysql DATETIME 毫秒坑的解决

《MysqlDATETIME毫秒坑的解决》本文主要介绍了MysqlDATETIME毫秒坑的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 今天写代码突发一个诡异的 bug,代码逻辑大概如下。1. 新增退款单记录boolean save = s

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

解决Cron定时任务中Pytest脚本无法发送邮件的问题

《解决Cron定时任务中Pytest脚本无法发送邮件的问题》文章探讨解决在Cron定时任务中运行Pytest脚本时邮件发送失败的问题,先优化环境变量,再检查Pytest邮件配置,接着配置文件确保SMT... 目录引言1. 环境变量优化:确保Cron任务可以正确执行解决方案:1.1. 创建一个脚本1.2. 修