野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 629|回复: 1

[经验\资料] 【鲁班猫创意大赛2期】 LubanCat ZW 编译调试stm32设备

[复制链接]
发表于 2023-8-21 21:12:54 | 显示全部楼层 |阅读模式
本帖最后由 忙碌的死龙 于 2023-8-22 17:24 编辑

LubanCat很多人都买了,也有一些人想把这个小板子当做一个便携式小电脑来使用。
既然是当做便携式小电脑,那做嵌入式最常见的stm32单片机开发自然就是一个必备功能了。
具体的编译和调试情况可以看视频。

野火论坛202308221723532023..png
https://www.bilibili.com/video/B ... 49999e7d90327ffbf7a

LubanCat ZW 是否具备开发stm32单片机的能力呢?要开发和调试stm32单片机,需要具备以下能力:
1、支持stm32的构建系统
2、能运行arm-none-eabi-gcc工具链
3、能运行Openocd或者JlinkGDBServer
4、能远程编辑和调试的代码编辑器(说的就是VSCode)

5、编辑器和GDBServer的中间人(调试插件,负责一键拉起调试和传输数据)

这几样东西,我们一个个来解决

一、构建系统选择
最常见的莫过于stm32cube工具自动生成的makefile项目,这种项目大家接触得最多,使用起来也简单。
但是makefile构建系统很慢,尤其是在鲁班猫这种性能不强的设备上,这是个死穴。
目前越来越多的项目使用了cmake,而stm32-cmake这个github上,star和fork数量都是挺多的。
本次教程就使用这个项目作为试验方案吧。
https://github.com/ObKo/stm32-cmake
先把项目拉到鲁班猫上
  1. git clone https://github.com/ObKo/stm32-cmake.git
复制代码
然后大概看了一下首页的教程,如果要使用这个工程,需要再另行下载STM32Cube 库,不同的芯片系列对应不同的功能。

由于我手上的板子是stm32f411ce迷你核心板,我需要把STM32CubeF4 库从github上拉下来。
  1. git clone https://github.com/STMicroelectronics/STM32CubeF4.git
复制代码
然后,需要在.bashrc 里添加一句环境变量配置。

  1. echo "export STM32_CUBE_F4_PATH="/home/cat/STM32CubeF4"">> .bashrc
复制代码
如果不设置这个环境变量,cmake生成ninja配置的时候是会报错,找不到stm32cube库配置的。


还需要把ninja安装上。ninja是Linux上的一个小型构建系统,CMake配合ninja才能最快(如果有ccache就更好)。
  1. sudo apt install ninja-build
复制代码
由于系统默认安装的CMake版本可能过低,使用最新的版本安装

  1. curl <span style="background-color: inherit; font-family: Menlo, Monaco, Consolas, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; font-size: inherit; color: rgb(18, 18, 18);">-fsSL </span>https://github.com/Kitware/CMake/releases/download/v3.27.3/cmake-3.27.3-linux-aarch64.sh <span style="background-color: inherit; font-family: Menlo, Monaco, Consolas, &quot;Andale Mono&quot;, &quot;lucida console&quot;, &quot;Courier New&quot;, monospace; font-size: inherit; color: rgb(18, 18, 18);">-o install_cmake.sh</span>
复制代码
安装完毕后,第一步就做完了。


二、arm-none-eabi-gcc工具链安装
在官方网址 https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads 上面,可以找到下图这个工具链的下载链接
野火论坛202308212202294325..png
AArch64 Linux hosted  意思是可以在AArch64架构,Linux系统上运行的工具链
AArch32 bare-metal target (arm-none-eabi) 这个就是我们需要找的arm 32位裸机工具链了(当然这个也能编译RTOS,只是和Linux工具链区分开来)

下载好之后,需要把工具链解压缩到固定的目录里,我习惯把工具链放在/home/cat/.bin/arm-none-eabi/目录下,这样打包用户目录的时候可以把所有配置好的工具也一起打包带走(下次不需要重复安装)。
然后需要在.bashrc里添加这个工具链的PATH
  1. echo "export PATH=$HOME/.bin/arm-none-eabi/bin:$PATH" >> .bashrc
复制代码
然后就可以找到工具链了。

野火论坛202308212209598152..png

执行arm-none-eabi-gcc 命令测试的时候,会发现提示缺少libncurses.so.5库文件,需要安装这个库。
  1. sudo apt install libncurses5
复制代码
安装了这个库,arm-none-eabi-gcc正常运行了,执行arm-none-eabi-gdb的时候,会提示缺少libpython3.8.so.1.0库,需要执行以下命令进行安装,由于这个版本的工具链使用了Python3.8,必须安装它
需要先添加源
  1. sudo apt install software-properties-common
  2. sudo add-apt-repository ppa:deadsnakes/ppa
  3. sudo apt update
复制代码
然后再安装Python3.8
  1. sudo apt install python3.8
复制代码
安装完毕以后,arm-none-eabi-gdb就可以顺利执行了。


接下来就是安装GDBServer了,由于AArch64的Openocd不大好找,我手上又有Jlink,决定使用Jlink。

三、安装Jlink驱动和相关软件。
在SEGGER官网可以找到Jlink的arm64平台驱动,JLink_Linux_arm64.deb,在电脑上把文件下载下来,然后上传到鲁班猫板子上,使用以下命令安装
  1. sudo dpkg -i JLink_Linux_V792a_arm64.deb
复制代码
安装完毕就可以插入JLlink测试了,使用这个命令可以测试一下  JLinkGDBServer -if swd -device stm32f411CE

野火论坛202308212240105346..png


能顺利连接上开发板,这一步也完成了

四、VSCode ssh remote 插件安装和登陆
这一步就很简单了,我记得鲁班猫也是默认开启ssh的,那只需要VSCode上安装好remote ssh插件,然后通过
野火论坛202308212248522872..png

输入密码后,会在鲁班猫上安装code-server,等待安装完毕就可以连上鲁班猫了。

五、安装cortex-debug插件并配置
在VSCode插件安装界面,搜索cortex-debug并安装,由于我们需要把Jlink插到鲁班猫上进行调试,还需要把cortex-debug插件安装到鲁班猫上。
在cortex-debug插件详情页面可以点击按钮安装,如下图
野火论坛202308212302326364..png
接下来用VSCode打开第一步下载好的stm32-cmake工程目录,然后在.vscode目录下新建一个文件launch.json,文件内容如下
野火论坛202308212316025522..png

由于在调试文件里指定了前置指令,需要在在.vscode目录下新建一个文件tasks.json,文件内容如下
野火论坛202308212315085556..png

到这一步,先不要着急点调试,还有最后的步骤需要完成。

六、完善项目配置并生成ninja构建文件
6.1 修改examples/blinky/CMakeLists.txt文件,在第二行后添加以下内容,强行指定编译器路径
  1. set (CMAKE_C_COMPILER "/home/cat/.bin/arm-none-eabi/bin/arm-none-eabi-gcc")
  2. set (CMAKE_CXX_COMPILER "/home/cat/.bin/arm-none-eabi/bin/arm-none-eabi-g++")
  3. set (CMAKE_ASM_COMPILER "/home/cat/.bin/arm-none-eabi/bin/arm-none-eabi-gcc")
复制代码
6.2 修改examples/blinky/blinky.c文件,把点灯用的GPIO修改成自己手上开发板的IO和分组,GPIO时钟也需要调整,原文件是用systick点灯,现在改成HAL_Delay方式点灯,内容如下
  1. #if defined STM32L0
  2.     #include <stm32l0xx_hal.h>

  3.     // STM32L0538-Discovery green led - PB4
  4.     #define LED_PORT                GPIOB
  5.     #define LED_PIN                 GPIO_PIN_4
  6.     #define LED_PORT_CLK_ENABLE     __HAL_RCC_GPIOB_CLK_ENABLE
  7. #elif defined STM32F1
  8.     #include <stm32f1xx_hal.h>

  9.     // STM32VL-Discovery green led - PC9
  10.     #define LED_PORT                GPIOC
  11.     #define LED_PIN                 GPIO_PIN_9
  12.     #define LED_PORT_CLK_ENABLE     __HAL_RCC_GPIOC_CLK_ENABLE
  13. #elif defined STM32F4
  14.     #include <stm32f4xx_hal.h>

  15.     // STM32F4-Discovery green led - PD12
  16.     #define LED_PORT                GPIOC
  17.     #define LED_PIN                 GPIO_PIN_13
  18.     #define LED_PORT_CLK_ENABLE     __HAL_RCC_GPIOC_CLK_ENABLE
  19. #endif

  20. void SysTick_Handler(void)
  21. {
  22.     HAL_IncTick();

  23.     // // 1 Hz blinking
  24.     // if ((HAL_GetTick() % 500) == 0)
  25.     // {
  26.     //     HAL_GPIO_TogglePin(LED_PORT, LED_PIN);
  27.     // }
  28. }

  29. void initGPIO()
  30. {
  31.     GPIO_InitTypeDef GPIO_Config;

  32.     GPIO_Config.Mode = GPIO_MODE_OUTPUT_PP;
  33.     GPIO_Config.Pull = GPIO_NOPULL;
  34.     GPIO_Config.Speed = GPIO_SPEED_FREQ_HIGH;

  35.     GPIO_Config.Pin = LED_PIN;

  36.     LED_PORT_CLK_ENABLE();
  37.     HAL_GPIO_Init(LED_PORT, &GPIO_Config);
  38. }

  39. int main(void)
  40. {
  41.     HAL_Init();
  42.     initGPIO();
  43.     // 1kHz ticks
  44.     HAL_SYSTICK_Config(SystemCoreClock / 1000);

  45.     while(1){
  46.                     /* USER CODE END WHILE */
  47.         HAL_GPIO_TogglePin (GPIOC, GPIO_PIN_13);
  48.         HAL_Delay (1000);   /* Insert delay 100 ms */
  49.     };

  50.     return 0;
  51. }
复制代码
6.3 命令行输入以下内容,生成ninja构建文件
  1. cd examples/blinky/ && mkdir build && cd build
复制代码
这段命令是要在examples/blinky/目录里新建一个build目录,并切换到build目录里执行cmake指令生成ninja构建文件。如果要新增c文件,或者增加HAL功能模块依赖的,需要修改CMakeLists.txt文件,并删除build目录,重新生成构建文件。

野火论坛202308212322354348..png
一切正常的话,就可以看到类似提示,顺利生成ninja构建文件了。

此时就可以直接点击VSCode的Debug小按钮,开启一键编译和调试了。
野火论坛202308212325207038..png

个人使用起来,感觉跟X86上直接用VSCode编译和调试,流畅度差不多。编译构建的速度也非常快。其实使用stm32cube生成的Makefile工程,基本上也差不多,
只是把launch.json里的cwd字段修改成${workspaceFolder}/build/,然后executable字段的elf文件也修改成对应elf文件即可。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-29 03:03 , Processed in 0.049752 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表