RCSN嵌入式

文章数:46 被阅读:160721

账号入驻

我靠:体验先楫arduino开发环境竟然出了意外…

最新更新时间:2024-07-13
    阅读数:

这周先楫发布了hpmicro arduino支持包0.1.0-传送门《 HPMicro Arduino支持包v0.1.0发布,适配功能揭晓! 》,适配了hpm5301evklite和hpm5300evk两块板子,同时也支持常用的GPIO,PWM,UART,ADC,I2C,SPI,USB基础外设。

刚好抽屉吃灰的hpm5301evklite可以拿出来清清灰,顺带还找了一个w2812点阵屏和SD卡模块,还有一个墨水屏,在第一时间体验了该支持包。

这不, 本文就以三个库对接进行使用说明,以难度程度进行阐述,分别是arduino自带的libraries的SD卡库(基础库)、以及第三方模块写好的墨水屏epd1in54库(进阶库)、库管理中热门的点阵屏FASTLED库(高级库)。来说明如何快速使用arduino对其高性能MCU进行开发评估。


对接的arduino库git链接会放在留言区。


一、开发准备


arduino IDE安装的比如开发板管理器和自带库默认安装的路径在user路径下的AppData目录,vscode调试需要用到这些源码路径,比如:


先楫对接的arduino适配源码就在packages下,比如:

二、hpmduino开发


(一)基础库使用

在IDE的示例中,arduino提供了不少基础库,基本对接常用的外设都可用,比如SPI的驱动类可以用去网口、SD卡这些应用,基本需要小改下一些配置头文件都可以直接使用。


这里使用SD的CardInfo进行阐述,打开上述的SD-->CardInfo示例,进行编译,输出窗口会提示error报错:


根据这个报错路径我们可以知道在SD库中的报错文件在Sd2PinMap头文件中,这里就是所说的配置文件,提示库中找不到对应的Board支持,这时候就需要自己添加对应的Board使能。


根据上述的使能照葫芦画瓢,进行hpm5300的宏定义批处理判断,加入SPI的引脚宏,加上以下代码:


在ino文件中,把chipSelect值赋值为hpmicro定义的片选信号引脚,这些引脚可在源码库中的board的readme可找到:


改为片选信号引脚之后,编译无报错


编译烧录该例子到开发板,可见正常识别SD卡信息,操作一个SD卡就是这么简单。


(二)进阶库使用

这里的进阶库是指arduino本身没有的库,而IDE的库管理中也没有做支持的一些第三方库,比如一些淘宝模块提供的arduino库,这些一定程度上,使用在新平台也会出现一些编译或者运行错误问题,需要有一定的搜索能力但可以不需要调试即可解决的库。比如本文所说的淘宝微雪的墨水屏epd1in54型号。


这里需要在网上找到类似的其他平台验证成功的资源,从而找到对应的arduino实现源码,若是不依赖任何硬件平台只依赖外设类,基本都能编译成功并且运行OK。

比如网上有大佬提供的这个墨水屏库:

https://github.com/Bodmer/EPD_Libraries/tree/master/epd1in54

该库进行下载,运行ino,编译烧录到开发板,显示正常,这种完完全全可以不依赖硬件平台即可实现。


(三)高级库使用

这部分的库,在一些库管理中,arduino进行维护的库,但是也没适配到所有平台,导致这种库在全新的平台的时候使用会很困难,编译不单会报错,而且运行也会报错。这部分需要有C/C++开发基础,并且拥有一定的调试能力,在适配的过程中,库的层层调用,分析和调试能力显得比较重要。本文也大概提供一些开发的流程以及调试,方便后续的开发者适配不同的第三方库。以FASTLED为例:


1、vscode组织工程

vscode支持工作区中加入多个文件夹(如何加入可以网上搜索),这样可以方便不同目录文件的整合。


根据上述的hpmicro arduino和libraries库路径加入到vscode工作区中,在自己的应用目录下可新建个project文件夹放arduino工程。比如本文使用的FASTLED库的例子为--ColorPalette,那么目录结构为:


2、arduino IDE编译

arduino IDE进行编译,并把编译生成的elf等可执行文件进行导出到ino工程目录下。可执行以下操作:

项目->导出已编译的二进制文件


那么在ino工程中就出现了个build文件夹,里面就包含了调试所用的elf文件


3、vscode调试

vscode在插件商店中安装好Cortex-Debug插件,右键点击以下的扩展设置


分别填入所需要的jlink gdb server(如果有) 和openocd、gdb路径。比如


可在arduino下的hpmicro适配文件中的tools的编译链工具路径填入,举例:

"cortex-debug.gdbPath.windows": "your user path\\AppData\\Local\\Arduino15\\packages\\hpmicroduino\\tools\\hpm_env\\1.6.0\\win\\toolchains\\rv32imac\\bin\\riscv32-unknown-elf-gdb.exe", "cortex-debug.JLinkGDBServerPath.windows": "your user path\\SEGGER\\JLink_V796q\\JLinkGDBServerCL.exe", "cortex-debug.openocdPath.windows": "your user path\\AppData\\Local\\Arduino15\\packages\\hpmicroduino\\tools\\tools\\openocd\\openocd.exe",


把hpmicro arduino下的openocd_cfg拷贝到自己的应用工程目录下


在自己的工程projcets下新建一个.vscode文件夹,在该文件夹新建一个launch.json,复制以下:

包含了jlink,cmsis_dap,ft2232的调试

这里只做hpm5301evklite,其余的板子可进行照葫芦画瓢即可。

这里的可执行文件路径需要自行根据情况更改


{    "version": "0.2.0",    "configurations": [       {        "cwd": "${workspaceFolder}",        "executable": "${workspaceFolder}/ColorPalette/build/hpmicroduino.hpmicro.HPM5301EVKLITE/ColorPalette.ino.elf",        "name": "Debug with JLink",        "request": "launch",        "type": "cortex-debug",        // "device": "HPM5361xCBx",        "device": "HPM5301xEGx",        // "device": "HPM6750xVMx",        // "device": "HPM6880xBDx",        // "device": "HPM6280xPAx",        "runToEntryPoint": "main",        "showDevDebugOutput": "none",        "interface": "jtag",        "servertype": "jlink",      },      {        "cwd": "${workspaceRoot}",        "executable": "${workspaceFolder}/ColorPalette/build/hpmicroduino.hpmicro.HPM5301EVKLITE/ColorPalette.ino.elf",        "showDevDebugTimestamps": "raw",        "name": "HPM_dapDebug",        "request": "launch",        "type": "cortex-debug",        "servertype": "openocd",        "configFiles": [            "${workspaceFolder}/openocd_cfg/probes/ft2232.cfg",            "${workspaceFolder}/openocd_cfg/soc/hpm5301.cfg",            "${workspaceFolder}/openocd_cfg/boards/hpm5301evklite.cfg",        ],      },      {        "cwd": "${workspaceRoot}",        "executable": "${workspaceFolder}/ColorPalette/build/hpmicroduino.hpmicro.HPM5301EVKLITE/ColorPalette.ino.elf",        "showDevDebugTimestamps": "raw",        "name": "HPM_FT223_Debug",        "request": "launch",        "type": "cortex-debug",        "servertype": "openocd",        "configFiles": [            "${workspaceFolder}/openocd_cfg/probes/ft2232.cfg",            "${workspaceFolder}/openocd_cfg/soc/hpm5301.cfg",            "${workspaceFolder}/openocd_cfg/boards/hpm5301evklite.cfg",
], "searchDir": [], "runToEntryPoint": "main()", "showDevDebugOutput": "none", } ] }

这样即可进行arduino调试


4、新平台适配

对于有些热门的库,在新平台使用难免会出现编译报错问题,因为需要对接底层的操作。本文使用的是FASTLED库,对于arm,avr,esp这些已经对接好,从platforms适配中,并没有riscv做参考。


还好FASTLED库也做了提示如何进行新平台适配。


从PORTING.md中可以看到,需要对接以下实现,分别是pin, spi, clock。本文只是实现了IO操作。


可以在platforms中新建一个hpm的文件夹,里面的文件命名跟其他单片机类似。


首先从clockless对接,clock提供了一个延时时钟tick来进行延时IO操作以便实现ws2812时序,相比ARM的DWT,HPM作为riscv平台也提供了一个类似的计数器,比如riscv的cycle,mchtmr。本文以mchtmr作为clock,时钟源为24M,所以需要对接的F_CPU为24M.


在定义的clockless的文件中,CYCCNT定义获取mchtmr的计数器API


如此一来就可以在writeBIT操作进行延时操作。


其次再对接下PIN操作,这里需要一定的HPM的外设熟悉程度,针对GPIO的输出操作。比如设置某个PIN的高低电平,某个PORT的所有PIN设置等操作。


接下来就是在配置文件中加入hpm适配的相关头文件支持,还有一些细节的适配操作,本文就不再做阐述,感兴趣的可在提供的代码中参考。


打开FASTLED的一个示例ColorPalette,修改下PIN引脚,以及驱动的型号为W2812,使用的点阵是16*16,也就是256个灯,编译无误后可看到hpm5301操作w2812成功。


视频效果如下:

三、总结

1、通过基础库、进阶库、高级库的阐述,可以知道arduino的强大生态,只需要修改库的部分配置文件即可快速跨平台使用。


2、由于先楫适配的arduino相关外设足够完整,对于一些没有适配的第三方库,也可以做到通过小修改即可无缝切换使用。十分方便了用户快速验证评估使用。


四、画外音

那么回到标题,到底出了什么意外呢?当然结论是:意外的好用哈哈。



 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: TI培训

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved