目录

一、前言

二、正文

stm32 cubemx的安装

建立工程

配置openOCD进行编译烧录

关于烧录失败的事

三、小结

四、参考文章


一、前言

   近日在网上冲浪时无意间发现了稚晖君在知乎发布的一篇关于如何使用clion+stm32 cubemx进行stm32开发的教程:配置CLion用于STM32开发【优雅の嵌入式开发】 - 知乎 (zhihu.com) 。被Jetbrains系的IDE 的UI风格所吸引,遂萌生放弃keil转身投奔clion的念头。

        在下载软件和环境搭建的过程及后续开发时遇到了一些小问题,在网上搜索后解决。在此分享,旨在对同样遇到问题的同学提供一些帮助。如有错误欢迎在评论区指正。

注:本文章为个人遇到的问题的解决方法,需结合上文提到的稚晖君的文章进行观看。


二、正文

stm32 cubemx的安装

由于稚晖君在当初分享时距今已经过去一段时间ST公司也已经发布了新版本的cubeMX,但是在6.4往后的版本不再支持以SW4STM32为导出IDE,而我们后续需要以这个选项导出工程,故在选择下载时不可以下载最新的cubeMX。

下载好以后按照安装指引安装就可以了

建立工程

建立工程时建议把这一栏勾上,作用是生成的代码会分开单独的源文件和头文件防止,否则会全部放在main.c文件,不便于整理,降低代码可读性。

配置openOCD进行编译烧录

当我们点击GENERATE CODE生成代码后,Clion会自动识别并更新工程,此时工程默认的下载工具是这样的

我们使用的是openOCD,所以需要对编译器进行设置,点击编辑配置

点击左上角的+号,并选择OpenOCD下载并运行

此时我们会发现需要配置这样一个东西

这时候官方所提供的.cfg文件一般是不合适我们用的,所以我们可以在工程目录下新建一个config文件夹然后新建一个配置文件stlink.cfg(我是用的是st_link),然后在里面输入以下代码

# choose st-link/j-link/dap-link etc.
#adapter driver cmsis-dap
#transport select swdsource [find interface/stlink.cfg]
transport select hla_swdsource [find target/stm32f1x.cfg]# download speed = 10MHz
adapter speed 10000

(新建一个文本文档,输入上述内容,然后保存并将拓展名改为.cfg,注意改的是拓展名哦,要显示拓展名之后再更改,否则会变成stlink.cfg.txt,这样是没用的)

这个配置文件其实是指向了OpenOCD所带的stm32f1x.cfg,完成之后回到Clion在面板配置文件中找到刚才新建的配置文件选择之后就可以进行编译和烧录了。

关于烧录失败的事

我们在烧录的时候如果用上面的配置文件有可能会报错

我们先来看看报的错误和警告,我们会发现有一个数字是不对的,我们对比前文所提到的stm32f1x.cfg会发现

文件里芯片的ID是0X2BA01477。

其实出现报错的原因是我们的芯片其实不是正宗的stm32,而是国产仿制版CS32(盗版?),芯片不一样所以核心ID自然不一样。

我的解决的办法是把stm32f1x.cfg复制一份并命名为stm32f1x_fake.cfg,然后把stlink.cfg也复制一份命名为stlink_fake.cfg,两个都分别保存到原路径下,将新建的两个分别修改成以下所示:(可以直接全部复制粘贴)

stm32f1x_fake.cfg

# script for stm32f1x family#
# stm32 devices support both JTAG and SWD transports.
#
source [find target/swj-dp.tcl]
source [find mem_helper.tcl]if { [info exists CHIPNAME] } {set _CHIPNAME $CHIPNAME
} else {set _CHIPNAME stm32f1x
}set _ENDIAN little# Work-area is a space in RAM used for flash programming
# By default use 4kB (as found on some STM32F100s)
if { [info exists WORKAREASIZE] } {set _WORKAREASIZE $WORKAREASIZE
} else {set _WORKAREASIZE 0x1000
}# Allow overriding the Flash bank size
if { [info exists FLASH_SIZE] } {set _FLASH_SIZE $FLASH_SIZE
} else {# autodetect sizeset _FLASH_SIZE 0
}#jtag scan chain
if { [info exists CPUTAPID] } {set _CPUTAPID $CPUTAPID
} else {if { [using_jtag] } {# See STM Document RM0008 Section 26.6.3set _CPUTAPID 0x3ba00477} {# this is the SW-DP tap id not the jtag tap idset _CPUTAPID 0x2ba01477}
}swj_newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpuif {[using_jtag]} {jtag newtap $_CHIPNAME bs -irlen 5
}set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME cortex_m -endian $_ENDIAN -dap $_CHIPNAME.dap$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0# flash size will be probed
set _FLASHNAME $_CHIPNAME.flash
flash bank $_FLASHNAME stm32f1x 0x08000000 $_FLASH_SIZE 0 0 $_TARGETNAME# JTAG speed should be <= F_CPU/6. F_CPU after reset is 8MHz, so use F_JTAG = 1MHz
adapter speed 1000adapter srst delay 100
if {[using_jtag]} {jtag_ntrst_delay 100
}reset_config srst_nogateif {![using_hla]} {# if srst is not fitted use SYSRESETREQ to# perform a soft resetcortex_m reset_config sysresetreq
}$_TARGETNAME configure -event examine-end {# DBGMCU_CR |= DBG_WWDG_STOP | DBG_IWDG_STOP |#              DBG_STANDBY | DBG_STOP | DBG_SLEEPmmw 0xE0042004 0x00000307 0
}$_TARGETNAME configure -event trace-config {# Set TRACE_IOEN; TRACE_MODE is set to async; when using sync# change this value accordingly to configure trace pins# assignmentmmw 0xE0042004 0x00000020 0
}

stlink_fake.cfg:

# choose st-link/j-link/dap-link etc.
#adapter driver cmsis-dap
#transport select swdsource [find interface/stlink.cfg]
transport select hla_swdsource [find target/stm32f1x_fake.cfg]# download speed = 10MHz
adapter speed 10000

再次配置OpenOCD,选择stlink_fake.cfg,这样就可以烧录成功了!把stlink_fake.cfg和stlink.cfg放在一个文件夹下以后配置时就可以灵活选择两个的其中一个了。

三、小结

以上只是我根据个人配置开发环境时遇到的一些问题在网上或者自己摸索出的解决办法,如果有不足欢迎在评论区指正,如果有遇到其他的一些问题也可以在评论区提出,大家一起解决。后续如果在使用时遇到了其他一些值得讨论的问题我也会在这个专栏更新文章,新人第一次写文章还请大家多多包涵!

四、参考文章

配置CLion用于STM32开发【优雅の嵌入式开发】 - 知乎 (zhihu.com)

platformIO上传程序到stm32失败,Warn : UNEXPECTED idcode: 0x2ba01477_yann_qu的博客-CSDN博客

【STM32】关于Clion+STM32cubeMX环境搭建过程中所遇到的一些问题·其一相关推荐

  1. golang 学习心得一(开发环境搭建过程中一些坑)

    最近刚接触golang,除了被go的语法吸引之外,在搭建go开发环境过程才也遇到一些问题,现在写出来和大家分享,希望以后对go有兴趣的初学者能避免我的弯路. Sublime Text 环境搭建,这个有 ...

  2. angular-cli环境搭建过程中常遇到的npm install问题

    #You got to add python to your PATH variable. One thing you can do is Edit your Path variable now an ...

  3. LAMP环境搭建过程中出现的问题——基于VM虚拟CentOS-5.6

    出现问题并给出解决方法:   1. 出错一:configure libpng时出错:   checking for zlibVersion in -lz... no configure: error: ...

  4. Node.js 环境搭建过程中可能遇到的问题解决方案

    1. nvm安装npm失败: 在nvm的安装目录下, 打开settings.txt(需要修改权限,默认普通用户不能修改): root: D:\nvm path: B:\nodejs node_mirr ...

  5. 基于Ubuntu的ORB-SLAM2项目环境搭建过程

    目录 关于ORB-SLAM2 环境搭建 已有环境 创建环境 尝试运行 测试环境搭建是否成功 尝试数据集 成功运行双目数据集 下一步 关于ORB-SLAM2 机器人所研究SLAM的学长介绍,ORB-SL ...

  6. linux上 arm开发环境搭建,详解 LINUX下QT For ARM开发环境搭建过程

    LINUX下QT For ARM开发环境搭建过程是本文介绍的内容,不多说,先来看内容.在PC上,我们需要得到两个版本的Qt,分别是:Qt-4.5.2和QtEmbedded-4.5.2-arm.前者包括 ...

  7. MySQL MGR搭建过程中常遇见的问题及解决办法

    这篇文章主要介绍了MySQL MGR搭建过程中常遇见的问题及解决办法,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下 MGR搭建过程中遇到的一些故障.更多资源请访问www.ffu9.c ...

  8. DM7数据守护搭建过程中及错误处理

    ​DM7数据守护搭建过程中及错误处理 dm数据守护原理 DM 数据守护(Data Watch)的实现原理非常简单:将主库(生产库)产生的 Redo 日志传输到备库,备库接收并重新应用 Redo 日志, ...

  9. JSP动态网站环境搭建应用中的详细步骤(Tomcat和Apache/IIS的整合)

    链接地址:http://www.cnblogs.com/dartagnan/archive/2011/03/25/2003426.html JSP动态网站环境搭建应用中的详细步骤(Tomcat和Apa ...

最新文章

  1. boost::geometry::strategy::distance::haversine用法的测试程序
  2. PASCAL VOC2012数据集内容解读
  3. 机器学习基石第十三讲笔记
  4. 学习Spring,这篇就够了
  5. 工地人员定位管理系统,如何有效做到安全生产双预防?
  6. 国内外接口文档工具哪家强?
  7. 力扣5713. 字符串中不同整数的数目
  8. 【Qt】Qt运行时Cannot retrieve debugging output错误
  9. 合天网安实验室CTF-解密200-找茬游戏
  10. 浪潮服务器dhcp修改ip,IP地址管理—DDI(DNS, DHCP, IPAM)解决方案
  11. 未明学院:3月喜报,未明学员拿下BU、USC、NYC等世界名校offer!
  12. 【跨境电商】5个免费极简主义WordPress主题(二)
  13. data.frame中的NA值怎么替换成0 把na变为0 把na变为想要的数 改变na 是否为na is.na()是否为null is.null() is.null() 删除去掉NA的行
  14. RGB 与 BGR 颜色深度、像素和字节之间的关系
  15. 开发Windows Mobile今日插件 -- 内存电量,桌面便笺,桌面记单词
  16. 用jquery实现隐藏列表表单的显示关闭切换以及Ajax方式修改提交对应的那一行的修改内容。
  17. video监听上次播放时间点下次进入后继续播放
  18. Windows10家庭版本开启Hyper-v虚拟机
  19. win7下查看计算机ID,win7系统快速查看硬件ID的操作方法
  20. Python爬虫实战(三):定时爬取数据存入SqlServer

热门文章

  1. Java AOP自定义注解
  2. Java的四大引用强、软、弱、虚
  3. [日推荐]『明星在哪儿』这可能是你离爱豆最近的一次!
  4. JavaScript实现的简单烟花特效代码1.15
  5. 巴菲特抄底台积电,透露出哪些信号?
  6. 郭天祥写的《我的大学》
  7. 有关JIT你需要知道的
  8. java创建tensorfly对象,Tensorflow对象检测自定义数据集
  9. PHP中preg_match详解
  10. 销售如何维护客情关系 销售维护客户有什么方法