以上 2 个记得都添加到环境里面去。
有了以上两个工具,已经可以编译出 Bin 或者 Hex 文件,在其他嵌入式开发软件中我们还可以在线 Debug ,下载。Vscode 里面自然也有相应的 Debug 插件, OpenOCD ,但是根据我的实测, OpenOCD 没有支持芯源的芯片,所以这一点不是太好,如果有大手子能出一篇可以自己如何向 OpenOCD 添加支持芯片的教程就好了。这是一个需要解决的问题。
2.3 安装 Vscode
链接: https://code.visualstudio.com/
Vscode安装没什么好说的,直接安装就好了,一路到底。
安装完成后,界面是英语,记得安装提示的中文。
安装完成后,记得在插件里面安装 C/C++ 。
3. 配置环境变量
Windows 环境下配置环境变量,要去我的电脑,属性,高级属性设置,环境变量,系统变量, Path 里面添加。添加 完成后在 CMD 里面输入。
查询 make 版本
查询交叉编译器版本
查询结果如下
4. 创建项目工程
Vscode 里面创建工程与 keil 里面有异曲同工之妙,创建目录如下。有部分没有用到,大家参考即可。
将CW32F030CxTx StartKit\cw32f030\stdperiph\lib\Libraries 里面所有文件拷贝到 FWLIB 里面。
将CW32F030CxTx StartKit\cw32f030-stdperiph-lib\Examples\gpio\gpio_blink\USER 里面的所有文件拷贝到 Hardwave 里面。
上面都是一些拷贝的工作,接下来是改造工作,我们要去 CW32F030CxTxStartKit\cw32f030-stdperiph-lib\IdeSupport\MDK 里面获得startup_cw32f030.s 将其放入 CORE文件夹,然后我们要对他进行改造,因为芯源公司是基于 ARM 汇编写的,但是我们的Vscode是 GCC 汇编,它不支持 ARM 汇编,所有我们要把startup_cw32f030.s 从头到尾的重写一遍,使其符合 GCC 汇编格式。
所以在这个开发模式下,我们有三个步骤要做,很重要。
1 :自己根据官方的 startup_cw32f030.s 重写 GCC 汇编文件。
2 :自己根据官方 datasheet 写 cw32f030 flash.ld 文件。
3 :自己根据官方文档写 makefile 文件。
部分截图如下。
1.startup_cw32f030.s 文件
2.cw32f030-flash.ld 文件如下
以上 3 个文件在 GCC 模式开发下无比重要,具体这三个文件如何编写,网上都有相关教程,大家可以搜索下。
以上文件移植编写成功后,进行 make 。打开 Vscode 的终端,新建终端。
此时,打开终端, make 之后,提示我们找不到头文件 #include "core_cm0plus.h"
可以去 stm 包里面搜索,搜索到后拷贝到 CORE 文件夹,然后再 makefile 里面添加头文件编译路径。
再次 make ,提示缺少 "core_cmInstr. h",同样去 stm 包里面搜索,拷贝到 CORE 文件夹,然后再 makefile 里面添加头文件编译路径。
再次 make ,提示缺少 core_cmFunc.h,同样去 stm 包里面搜索,拷贝到 CORE 文件夹,
然后再 makefile 里面添加头文件编译路径。
再次 make ,提示缺少 uart . h,同样去芯源包里面搜索,拷贝到 CORE 文件夹,然后在makefile 里面添加头文件编译路径。
再次编译,出现这样的错误说明不符合GCC 规范。
直到最后,编译结果提示编译成功,文件大小为 dec 3972 合计 14K 。
5.烧录程序
群里面有一个 PWlink2 的工具,我周末下单,周一拿到手。
到手的 PWlink2 默认只能有 5 个厂商的可以烧录,其中并没有芯源的,所以我们需要切换配置为支持CW 的。
到这里完成之后打开Power Writer 软件,在厂商签名那一栏,点击“线同步签名到 Power Writer ”。
至此,厂商切换完成。
接下来烧录,打开Power Writer 的 Program Memory, 在添加固件一栏添加你的 HEX 或者BIN 固件,完成之后,如下图。
完成之后,点击执行 全功能自动编程。结果如下。
最终开发板实验现象结果如下。
总结
1 :先来说烧录的事情,这块板子芯片是 M0 架构 我记得 M0/M0+ 架构都是没有串口烧录功能的,也可能是我记错了,请大家指正。我自己用自己开发的串口烧录工具,在 M3,M4烧录的芯片上能正常烧录,但是在这块板子上就始终无法成功,直到我翻看 datasheet 的时候才想起来他是M0+ 架构。
Stlink 烧录,群里有部分群友说能烧录成功,但是我一直烧录失败,从来没有成功过。
Daplink 烧录,一直失败。
Jlink V9 烧录,一直提示无法连接芯片,直到我更换芯片为 stm32F030C8 系列来进行烧录也不成功。
PowerLink2 烧录, CW 的, GD 的烧录大成功 stm 的一直烧录失败,在 M0/M0+.M3.M4架构的芯片上全部烧录失败,提示连接不到芯片,反复确认过线路,都没有问题。不知道这是什么 BUG 。
硬件BUG如图幽灵,可能有的可以,有的不可以,我是用独立软件下载,不是在keil或iar下载。以上是一家之言,仅供参考。
烧录这一块,建议厂家尽快做起来,出一个能离线烧录的工具软件,全平台支持的那种。。
2:关于这块芯片的坑,首先这块芯片虽然对表 stmf030 ,但是芯片的不同之处还是很多的。
2.1 频率不同
CW 的频率更高,这一点就很棒。
2.2 内部地址映射不同
这一点尤为注意,尤其是使用 Vscode IDEA linux 等 GCC 模式下开发的工程师要注意。
CW 的 Flash 地址是从 0x00000000 开始的,跟 Stm 的完全不一样,大家自行调整。使用 JLINK 等烧录器如果按照 STM 的去烧录就会出现烧录失败的情况。
2.3 架构不同
CW 的是 M0+ 架构, STM 是 M0 架构有着微妙的不同,在某些细微的地方,在MAKEFILE 中,我使用 M0 编译过后的 HEX 虽然能够成功,但是烧录后一直没有反应,直到我切换成 M0+ 之后,编译通过的 hex 才运行起来。
3:供货及价格
供货问题,我一般都会在某创,某芯,某秋商城上搜索,因为用量不大,一年可能用不到 1K ,所以不值得去跟厂家签署 供应合同,平台上购买即可,但是平台上基本没有,CW 的其他型号也是出于供不应求的状态。所以希望厂家能够在各大平台上铺货,看到一个个货物库存是 0 ,真的很影响。
此次尝试国产芯片的结论如下:
如果是快速开发,在Keil 下开发是最好的,但是对我这种对软件正版有要求,不得不在 GCC 模式下开发嵌入式的工程师来说,每一个国产芯片都是一个漫长的踩坑之路。
因为官方开发的大部分都是基于 Keil Iar 的, GCC 模式的真的很少或者没有。这就注定了使用GCC 模式开发的工程师,都是真的猛士,因为有部分坑真的你在
网上都找不到,你可能都是第一个碰上的。我在开发这块板子的时候,碰到的问题在百度上真的找不到,这块芯片很少见,同类型的也基本上没有,这就注定我的开发之路要自己慢慢解决 BUG 。
所以如果是在 GCC 模式下开发的工程师,最好是懂的一点汇编的知识,明白 GCC汇编与 ARM 汇编的不同,能够知道 ARM 架构的不同之处,能够编辑简单的编译器,有makefile 相关知识,新手还是不建议在 GCC 模式下开发。