本帖最后由 盛夏i 于 2024-6-29 00:08 编辑
本帖最后由 盛夏i 于 2024-5-13 17:56 编辑
【祖传点灯】安信可Ai-M61-32S + Clion环境配置 + 点自己的灯
前言
在五一假期的时候就收到了M61开发板,在尝试了vscode、ubuntu和Clion各种搭建环境之后,也算是把该踩不该踩的坑全踩了一遍。。。但是,对比了三种环境,还是觉得Clion使用起来比较舒服,因此这篇文章主要记录一下在Windows系统下搭建Clion环境以及部分坑。(搭建环境时候遇到的报错都没有记录,只能想起来什么写什么了)。
在这里列出搭建环境时的参考帖子:
http://bbs.aithinker.com/forum.php?mod=viewthread&tid=282&_dsign=7fea3002
https://bbs.ai-thinker.com/forum.php?mod=viewthread&tid=329&highlight=Clion
https://bbs.ai-thinker.com/forum.php?mod=viewthread&tid=44045&highlight=Clion
一、搭建开发环境
1.安装git
git工具是必要的,拉取代码和管理代码的功能,小安派的源码全都是放在git远程仓库上,想要下载源码,必须使用git工具。
下载链接:https://github.com/git-for-windows/git/releases/download/v2.41.0.windows.3/Git-2.41.0.3-64-bit.exe
2.克隆源码
在自己想要放置工程的文件夹空白位置处,单击鼠标右键,选择Open Git bash here(正确安装git,注意别选错了),弹出安装好的git工具。检查一下显示的路径正确后,输入指令:git clone https://gitee.com/Ai-Thinker-Open/AiPi-Open-Kits.git -b master
,等待克隆结束即可。克隆下来的文件夹目录应该是这样的:
如果发现文件夹目录不一样,检查输入的指令后面的 -b master
。
3.拉取M61的SDK子模块
在拉取 SDK 之前,需要修改一下子模块的来源,不然可能会因为网络问题拉取失败。进入 AiPi-Open-Kits
中,用文本打开 .gitmodules
文件url参数中的 github.com
改成 gitee.com
:
继续在git工具中依次输入:
cd AiPi-Open-Kits/
git submodule init
git submodule update
4.克隆适用Windows的编译工具链
继续在刚刚的git工具中输入:
git clone https://gitee.com/bouffalolab/toolchain_gcc_t-head_windows.git -b master
二、配置Clion开发环境
Clion的安装建议自行去百度。如果之前配置过vscode的开发环境会发现需要添加三条系统环境变量,而Clion则不需要,这也是我选择Clion的原因之一(安装的东西太多,环境变量乱糟糟的)。
1.新建bat文件
第一步需要在 AiPi-Open-Kits\aithinker_Ai-M6X_SDK
文件夹下新建一个文本文档,内容为:
@echo off
set PATH=%~dp0toolchain_gcc_t-head_windows\bin;%PATH%
set BL_SDK_BASE=%~dp0\aithinker_Ai-M6X_SDK
set PATH=%BL_SDK_BASE%\tools\make;%PATH%
set PATH=%BL_SDK_BASE%\tools\ninja;%PATH%
set PATH=%BL_SDK_BASE%\tools\cmake\bin;%PATH%
set PATH=%BL_SDK_BASE%\tools\openocd;%PATH%
echo add SDK and toolchain to PATH successfully.
这是参考其他帖子的,但是在实际运行中发现还是存在找不到路径的报错,所以我将其中部分改为绝对路径,参考如下:
@echo off
set PATH=E:\vscode\esp_workplace\AiPi-Open-Kits\aithinker_Ai-M6X_SDK\toolchain_gcc_t-head_windows\bin;%PATH%
set BL_SDK_BASE=E:\vscode\esp_workplace\AiPi-Open-Kits\aithinker_Ai-M6X_SDK
剩下的不需要改。
2.Clion工具链
打开Clion后,在 设置->构建..->工具链
中,可以新添加一个MinGW工具链,配置可以参考其他帖子中的这张图片:
3.导入工程
选择导入 AiPi-Open-Kits
目录下的 project_basic
项目,以后新建工程也可以直接复制这个文件夹,写自己的代码。打开时可能会提示cmake或者Makefile,选择cmake即可。
打开 文件->设置
,还是之前的位置下面,配置cmake,工具链选择自己创建的:
4.修改CMakeLists.txt
# ############################ 保持默认 #######################
cmake_minimum_required(VERSION 3.15)
set(CHIP bl616)
set(BOARD bl616dk)
set(CROSS_COMPILE riscv64-unknown-elf-)
set(CONFIG_USB_HS n)
set(CONFIG_ROMAPI y)
set(CONFIG_DEBUG y)
set(CONFIG_TLSF y)
set(BAUDRATE 2000000)
set(COMX COM5)
include(proj.conf)
find_package(bouffalo_sdk REQUIRED HINTS $ENV{BL_SDK_BASE})
# #############################################################
# 搜集所有的C文件( Collect source files)
file(GLOB_RECURSE sources "${CMAKE_CURRENT_SOURCE_DIR}/src/*.c")
# 添加头文件的引用路径(Add .h include directories)
sdk_add_include_directories(inc)
# 把C文件添加到工程里(Add .c file to the project)
target_sources(app PRIVATE ${sources})
# 设置main.c 的文件(Set the document source for main. c)
# 注意:不能和file(GLOB_RECURSE sources "${CMAKE_CURRENT_SOURCE_DIR}/components/*.c") 冲突(Note: Cannot conflict with “file(GLOB_RECURSE sources "${CMAKE_CURRENT_SOURCE_DIR}/components/*.c")”)
sdk_set_main_file(main.c)
# 设置工程名称,这个配置决定了编译出来的文件名。(Set the project name, which determines the compiled file name)
get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
project(${PROJECT_NAME})
add_custom_target(flash
COMMAND $ENV{BL_SDK_BASE}/tools/bflb_tools/bouffalo_flash_cube/BLFlashCommand.exe
--interface=uart
--baudrate=${BAUDRATE}
--port=${COMX}
--chipname=${CHIP}
--cpu_id=${CPU_ID}
--config=${CMAKE_SOURCE_DIR}/flash_prog_cfg.ini
DEPENDS ${PROJECT_NAME}.elf combine
)
注意第12行的 set(COMX COM5)
,需要设置为自己电脑的串口号,可以在设备管理器中查看。
修改之后重新加载一下cmake,看看是否报错。
5.配置构建命令
这个配置主要是提供另一种烧录的方法(推荐)
配置选项参考:
其中,程序实参:
--interface=uart
--baudrate=2000000
--port=COM6
--chipname=bl616
--cpu_id=
--config=flash_prog_cfg.ini
注意串口号修改为自己的。
6.烧录
全部都配置好之后,点击绿色的三角号运行即可烧录。
一般来说,需要先按住IO2,再按一下EN,最后松开IO2进入烧录模式才可以进行烧录。但是在实际操作中发现,可以直接点击运行后,等到输出栏提示 Please Press Reset Key!
后,按一下EN,也可以成功烧录。
烧录成功后,会输出 [All Success]
。再按一下EN,就可以看到RGB的亮起。
三、我的点灯程序
#include "bflb_gpio.h"
#include "board.h"
struct bflb_device_s *gpio;
int main(void)
{
board_init();
gpio = bflb_device_get_by_name("gpio");
printf("gpio output\r\n");
bflb_gpio_init(gpio, GPIO_PIN_12, GPIO_OUTPUT | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_0);
bflb_gpio_init(gpio, GPIO_PIN_14, GPIO_OUTPUT | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_0);
bflb_gpio_init(gpio, GPIO_PIN_15, GPIO_OUTPUT | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_0);
uint8_t rgb[3] = {
GPIO_PIN_12,
GPIO_PIN_14,
GPIO_PIN_15
};
uint8_t rgb_state = 0;
uint8_t rgb_tmp = 0;
while (1)
{
rgb_state = rgb_state > 6 ? 0 : rgb_state + 1;
rgb_tmp = rgb_state;
for(uint8_t i = 0; i < 3; i++)
{
if(rgb_tmp & 0b001)
{
bflb_gpio_set(gpio, rgb[i]);
}
else
{
bflb_gpio_reset(gpio, rgb[i]);
}
rgb_tmp = rgb_tmp >> 1;
}
printf("RGB_PIN=%d\r\n", rgb[rgb_state]);
bflb_mtimer_delay_ms(1000);
}
}
写的不好见谅!