您尚未登录。

楼主 # 2022-07-02 20:53:44

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 649
积分: 782
个人网站

Linux开发环境下试玩ACM32F403RET7开发板

非常感谢晕哥的优惠活动,很便宜的价格就能拿到开发板。我工作、生活上都用实体的Linux系统Manjaro Linux,只在极少情况下才会开虚拟机跑下Windows. 那么MCU开发也必然要在Linux下进行。Linux环境下的开发工具都是开源的,成熟的工具链是:eclipse + GCC + OpenOCD/pyOCD,而且系统的官方软件仓库都收录有这些工具,所以只要求输入一条命令就可以将其安装下来,非常便利。
    这里我选的工具链是:eclipse-embedcpp + arm-none-eabi-gcc + pyOCD。之所以选pyOCD而非openOCD是因为它支持keil的pack包,pack包包含flash烧录算法和外设寄存器信息。这样,只要MCU支持keil,pyOCD就都能跑起来,烧录、调试都没问题。
1656759877203.jpg

先在eclipse里新建一个模板工程:
Screenshot_20220702_142036.png
Screenshot_20220702_145134.png

然后进行移植,移植的工作量不大,主要分为:
  * 外设驱动库添加GCC支持(只有__weak宏需要修改)、
  * 中断向量表适配、
  * 静态库的适配、
  * pyOCD的配置。

把外设驱动源码的inc及src文件夹都复制到工程内,修改文件 ACM32Fxx_HAL.h内的宏__weak添加对GCC的支持:
Screenshot_20220702_155055.png
中断向量表适配:
Screenshot_20220702_185841.png
静态库的适配:有些外设的驱动没有源码只静态库,因为其所使用的编译是armcc v6,其实就是clang编译器;而clang是跟gcc兼容的,所以这些库文件可以直接使用。如果用file命令查看从库文件解压出来的.o文件,可以看出其ABI跟arm-none-eabi-gcc的是相同的:
Screenshot_20220702_143137.png
那么我们把这些库文件放到lib文件夹进行统一管理,并按照gcc的惯例将库文件改名为libxxx.a的形式:
Screenshot_20220702_193531.png
然后添加链接器选项:(目前做点灯测试,只用到这两个库)
Screenshot_20220702_161109.png
然后写些测试代码,实现main函数:
Screenshot_20220702_185926.png
就可以编译了:
Screenshot_20220702_200802.png
eclipse编译还是一如既往地快,编译整个工程耗时半秒都不到!linux的IO快应该是一大助力。这就是生产力呀!
另外,吐槽下,外设驱动源码里的警告(unused variable)太多了。我只打开的-Wall选项而已呀就多到把用户代码的警告淹没了。像ST的源码基本怎么开警告选项都不会输出警告的,这就是差距呀。
Screenshot_20220702_201608.png

最后就是调试配置了。首先复制一份keil的pack文件,将其后缀改为zip然后解压出来找得ACM32F4.svd文件保存好以备用:(还可以将svd文件压缩成zip文件)
Screenshot_20220702_202330.png
然后进行pyOCD配置:
Screenshot_20220702_172827.png
Screenshot_20220702_184441.png
将之前得到的svd文件的路径填到“SVD Path”内:
Screenshot_20220702_184524.png
保存好配置后,将开发板上的"Link CN"USB接到电脑上就可以调试了:
Screenshot_20220702_184553.png
之前的SVD文件就是用来在调试时查看外设的寄存器用的:
Screenshot_20220702_185237.png
Screenshot_20220702_185326.png

好了,开发板的上USER LED成功地闪烁起来了。

我已经将本工程上传到gitee了,有兴趣同学可以直接clone: https://gitee.com/ufbycd/acm32f4test

离线

楼主 #3 2022-07-02 22:25:57

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 649
积分: 782
个人网站

Re: Linux开发环境下试玩ACM32F403RET7开发板

ubuntu 说:

牛叉, 第一次看到搞单片机的朋友只用Linux的。

我MCU跟ARM Linux都搞,ARM Linux开发自然要用Linux。这样一来,如果搞MCU又用Windows,则少不了要两边跑,很麻烦的。另外,在Linux上做开发要便利很多,或许本质上是Windows对开源工具链不友好吧。

离线

楼主 #4 2022-07-02 22:39:00

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 649
积分: 782
个人网站

Re: Linux开发环境下试玩ACM32F403RET7开发板

memory 说:

楼主优秀啊, 都像你这样, MDK还能收到版权费吗?

CMSIS-DAP跟pyOCD都是ARM官方在推行的,这里面的生意不能单看MDK的营利。

离线

楼主 #7 2022-07-03 08:10:47

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 649
积分: 782
个人网站

Re: Linux开发环境下试玩ACM32F403RET7开发板

yixiuge 说:

我猜楼主画板肯定也是kicad!

是的,最多也就画4层板,kicad完全够用。偶尔也用立创EAD画些小板子。

离线

楼主 #8 2022-07-03 08:37:23

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 649
积分: 782
个人网站

Re: Linux开发环境下试玩ACM32F403RET7开发板

cube 说:

楼主你好,方便做个视频吗?我一直想搞Linux单片机开发,领导催了我好几次了,我一直不知道从哪里入手,文字教程又看不下去,总是感觉断片了一样,视频直观一些。用了楼主这一套,再也不担心律师函了。

要想在Linux上做开发,首先得熟悉Linux系统,只在虚拟机里捣鼓几下是不够的,要能应付日常使用才算基本熟悉。
熟悉了以后就能很容易打造开发环境了。
另外,本贴是假设大家对eclipse已有所了解,知道如何编译、调试。如果对ecipse尚不了解就可能看得不太明白,可以在网上找些教程多了解了解eclipse。

最近编辑记录 海石生风 (2022-07-03 08:46:25)

离线

楼主 #10 2022-07-05 10:09:20

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 649
积分: 782
个人网站

Re: Linux开发环境下试玩ACM32F403RET7开发板

无lol聊 说:

是不是也可以用stm32cubeide?也是gcc,换下启动汇编,链接文件.

当然可以,stm32cubeide就是eclipse-embedcpp + stm32cubemx

离线

楼主 #15 2022-08-16 22:12:36

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 649
积分: 782
个人网站

Re: Linux开发环境下试玩ACM32F403RET7开发板

@chopin1998@gmail.com
喜不喜欢不过是习惯问题,我熟练使用eclipse好多年了,VS Code都还没出生,对我来说eclipse是开箱即用、VS Code还要各种配置。这种争论跟vim VS emacs差不多。
不过我测试过,eclipse对编译有优化,同一套makefile在eclipse中编译总会比在console中编译要快。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn