[LKS32 硬件]

【LKS32MC081评测】 +搭建基于Eclipse+arm-gcc+pyocd的开发环境

[复制链接]
1270|26
手机看帖
扫描二维码
随时随地手机跟帖
coslight|  楼主 | 2022-6-11 13:23 | 显示全部楼层 |阅读模式
CD, ar, ip, ps, pse
#申请原创#
搭建基于Eclipse+arm-gcc+pyocd+cmsis-dap的开发环境
没拿到开发板的时候,就看到群里面一直在讨论关于程序烧录的问题,等拿到的开发板后发现,这个程序的烧录和仿真确实不容易搞,看到网友的测试加上自己的摸索,终于可以完成烧录和仿真了。
由于公司的要求,不可以在公司使用keil这样的收费软件,所以只好研究在gcc环境下搭建一套平台来完成程序的开发和调试。
1、  概述
准备在windows平台下,基于eclipse+gcc-arm-none-eabi+pyocd+cmsis-dap完成一套开发环境的建立。
关于eclipse、gcc-arm编译器,pyocd等软件的下载和安装请各位大神自行百度搜索,这里就描述如何采用这套系统进行基本环境的建立。
eclipse软件:gnumcueclipse-4.4.2-2018-09-win32.win32.x86
gcc-arm软件:gcc-arm-none-eabi-10.3-2021.10-win32
2、  编译环境的建立
1)工程建立:
打开eclise软件,选择File->New->Project(选择C Project) ,然后可以看到如下图所示的工程选择和工程名输入画面。我们这里输入工程名t3,这个名字实际可以随意。
注意:这里提示一点,eclipse工程的存储路径不要含有中文,否则将来仿真的时候会出现无法找到源文件的情况。
1.jpg
点击“Next”后,进入到如下配置画面,具体的信息选择,可以参考画面上的配置信息
2.jpg
配置完成后,继续点击“Next”,会看到一个工程路径配置的画面,如果我们是第一次新建工程,按照我们的需要将vendor CMSIS name修改一下,这个名字将来决定了                 几个文件的名字,我这里修改为lks32mc08x 。
3.jpg
输入完成后,继续点击“Next”。这一步没啥说的。
4.jpg
继续点击“Next”,我们将看到下面要求我们输入GNU ARM Cross Toolchain的画面,前面我们已经准备好了交叉编译器,这里面我们需要选择到编译器的路径,最好不要带中文字符。
5.jpg
输入文成后,直接点击“Finishi”,这样工程建立完成,基本工程目录结构如下图所示。
6.jpg
工程下的文件夹我们简单介绍一下,
Includes:这个文件夹我们不需要维护,编译后,所有相关的工程内头文件路径都会出现在这个文件夹下面。
src:这个文件夹下基本上都是我们自己的工程文件,需要我们在开发过程中根据需要添加。
system:这个文件夹非常重要,下面的移植过程都会在这里面完成,是用来支持这个芯片的基础文件,里面会包含CMSIS的相关文件,芯片设备库驱动文件等。
include:这个文件夹基本没用,不用维护。
ldscripts:这个文件下面包含了与芯片和工程有关的链接脚本文件,原则上如果芯片的基本参数输入没问题的话,基本不需要修改。
2)芯片驱动移植
这个移植过程基本上是对system目录下相关文件夹内容的增添改。system文件夹下面包含include和src两个子文件夹,具体的展开如下图所示。
7.jpg
System/include文件夹下相关文件得移植工作,这个文件夹下面我就关注cmsis和lks32mc08x两个文件夹,其它的不需要特殊维护。
l  cmsis文件夹的移植
如果前面vendor CMSIS name输入正确的话,这里面应该会看到lks32mc08x.h和system_lks32mc08x.h这样两个头文件,我们需要将凌鸥官方提供的lks32mc08x.h和basic.h的内容整合到这个文件里面,具体的文件内容可以参见后面的附件中源码。
l  Lks32mc08x文件夹得移植
这个文件夹下面包含了官方提供得设备驱动文件,如果没啥特殊情况,把官方提供得外设库中得头文件复制过来,直接粘贴到这个文件夹下面就可以了。
8.jpg
System/src文件夹下相关文件得移植工作,这个文件夹下面我就关注cmsis和lks32mc08x两个文件夹,其它的不需要特殊维护
l  cmsis文件夹
这里面包含两个文件,system_lks32mc08x.c文件内容主要包含System_init函数,用来配置系统时钟,我们需要调整,具体参见附件中源码。
l  lks32mc08x文件夹
这里面存放的是外设库文件,可将官方提供设备驱动复制到这里。这里有一点不明白,官方提供的外设库中,有个叫lks32mc08x_nvr的,只给了一个编译后的文件,没有源文件,不知道什么意思,这个文件在gcc下面应给没办法好好支持了。希望官方可以提供一个源文件出来。
9.jpg
3)编译和错误处理
在移植完成后,我们可以尝试编译一下了,有错误在所难免,我们需要根据实际情况调整一下就好了。
错误1:提示没有basic.h文件,应为文件内容让我移动到了lks32mc08x.h文件中,所以删除basic.h的引用,增加lks32mc08x.h的引用就可以了。
错误2:提示缺少类似hardware_init.h头文件的情况,从官方例子中复制一个过来就好了,需要适当修改。
3、  仿真环境的建立
前面已经提到了,会采用pyocd+cmsis-dap来完成仿真环境搭建,采用pyocd有个好处,就是官方提供的keil5下面的pack包我们可以直接借用,不用考虑flash编程算法这样的令人挠头的问题。
配置过程这里面不详述了,给出配置的结果和说明,如下图所示:
10.jpg
这里面我强调几个地方:
       第一个:pyocd的选择,这里面可以直接找到你的python安装路径下面的pyocd-gdbserver.exe文件路径导入就可以。
       第二个:Board后面的仿真器必须被系统自动识别出来,如果没有直接显示出来可以点击“Refrsh”按钮后,在下拉菜单中找到,选中你实际连接的仿真器。
       第三个:Override target必须选中,并且填入我们实际仿真的芯片lks32mc081c8t8 。
       第四个:Bus speed建议选择为1MHz以下,应为官方手册中已经强调了,最高为1MHz,所以如果没有挑战精神的人,就不要往上选了。
       第五个:Flash mode必须选择为Sector erase,应为我测试了chip erase失败了。
第六个:Other options,这个必须要填如图中的命令,对于pack路径根据实际情况自己存放。如果没有自虐倾向的人,建议放到根目录下,比较容易输入。
       一切准备就绪可以开始仿真了。
4、实际测试
       我将官方例子中的通过Uart0发送信息的程序移植过来,1秒向串口打印一串字符。
11.jpg
5、经验总结
       我手头的仿真器都是基于3.3V系统的,刚开始的时候为线路板施加5V点,无论如何也无法完成芯片识别,根据网友的实践经验,把系统电压调成3.3V,仿真器一切正常,可以识别也可以烧录和仿真了。感谢各位高人的脑洞打开。
6、软件源码
移植后的源码: t2.rar (234.9 KB)

使用特权

评论回复
alvpeg| | 2022-6-20 15:36 | 显示全部楼层
Eclipse可以开发吗?

使用特权

评论回复
coslight|  楼主 | 2022-6-21 08:10 | 显示全部楼层
alvpeg 发表于 2022-6-20 15:36
Eclipse可以开发吗?

目前看可以,如果官方的FOC库可以针对GCC给出一个版本的话

使用特权

评论回复
coslight|  楼主 | 2022-6-21 08:11 | 显示全部楼层
coslight 发表于 2022-6-21 08:10
目前看可以,如果官方的FOC库可以针对GCC给出一个版本的话

如果提供源代码那就一点问题也没有了

使用特权

评论回复
guijial511| | 2022-6-21 08:11 | 显示全部楼层
谢谢分享,个人喜欢eclipse。

使用特权

评论回复
ufbycd| | 2022-6-24 19:16 | 显示全部楼层
Executable path那里应该填pyocd.exe 而不是pyocd-gdbserver.exe

使用特权

评论回复
coslight|  楼主 | 2022-6-25 19:51 | 显示全部楼层
ufbycd 发表于 2022-6-24 19:16
Executable path那里应该填pyocd.exe 而不是pyocd-gdbserver.exe

都是可以的

使用特权

评论回复
ufbycd| | 2022-6-25 20:58 | 显示全部楼层

windows下两个都可以?我在Linux下试了用pyocd-gdbserver是不行的,会报错误:

error: unrecognized arguments: gdbserver --no-wait -j /home/chenss/projects/NAD-BC068/source/software/motor --uid 0001A0000000 --connect=halt --erase=sector

也就是插件本身会通过在pyocd上添加gdbserver子命令来调用gdbserver

使用特权

评论回复
ufbycd| | 2022-6-26 10:00 | 显示全部楼层
另外,将pack文件的后缀修改为zip并解压出来,找到和MCU对应的SVD文件填到“SVD Path”就可以在调试时看到外设的寄存器了。

Screenshot_20220626_094817.png Screenshot_20220626_095325.png Screenshot_20220626_095420.png

使用特权

评论回复
coslight|  楼主 | 2022-6-26 10:10 | 显示全部楼层
ufbycd 发表于 2022-6-26 10:00
另外,将pack文件的后缀修改为zip并解压出来,找到和MCU对应的SVD文件填到“SVD Path”就可以在调试时看到外 ...

这个方法相当好了,我找了好长时间都没找到怎么设置,谢了

使用特权

评论回复
coslight|  楼主 | 2022-6-27 09:43 | 显示全部楼层
ufbycd 发表于 2022-6-26 10:00
另外,将pack文件的后缀修改为zip并解压出来,找到和MCU对应的SVD文件填到“SVD Path”就可以在调试时看到外 ...

我把文件解压处理来,也填到了svd文件的引用位置,怎么没有出来外设信息呢

使用特权

评论回复
ufbycd| | 2022-6-27 11:48 | 显示全部楼层
coslight 发表于 2022-6-27 09:43
我把文件解压处理来,也填到了svd文件的引用位置,怎么没有出来外设信息呢 ...

看看终端“Eclipse Embedded CDT CMSIS Pack console”的输出是否在解析SVD文件:
Screenshot_20220627_114544.png

使用特权

评论回复
coslight|  楼主 | 2022-6-27 14:23 | 显示全部楼层
ufbycd 发表于 2022-6-27 11:48
看看终端“Eclipse Embedded CDT CMSIS Pack console”的输出是否在解析SVD文件:

找到了问题的原因,我仿真GD32的处理器,但是它的svd文件第一行有空格,估计是eclipse的解析工具不能识别,删掉空格后,我终于看到了所有外设信息,非常好。

使用特权

评论回复
weict125| | 2022-7-1 18:41 | 显示全部楼层
楼主很厉害

使用特权

评论回复
weict125| | 2022-7-1 19:07 | 显示全部楼层
楼主,没看到你的ldscripts文件夹?能否发一个,感谢

使用特权

评论回复
coslight|  楼主 | 2022-7-4 08:15 | 显示全部楼层
weict125 发表于 2022-7-1 19:07
楼主,没看到你的ldscripts文件夹?能否发一个,感谢

ldscripts.rar (5.53 KB)

使用特权

评论回复
weict125| | 2022-7-4 20:52 | 显示全部楼层

感谢感谢

使用特权

评论回复
weifeng90| | 2022-7-4 21:07 | 显示全部楼层
又学会一招,谢谢分享经验。

使用特权

评论回复
weifeng90 发表于 2022-7-4 21:07
又学会一招,谢谢分享经验。

论坛本就是技术交流平台,欢迎交流

使用特权

评论回复
backlugin| | 2022-7-9 12:35 | 显示全部楼层
Eclipse太难用了。不习惯的  

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

927

帖子

5

粉丝