【祖传点灯】安信可Ai-M61-32S 点灯流程重难点梳理

[复制链接]
查看1406 | 回复17 | 2024-5-6 00:30:39 | 显示全部楼层 |阅读模式

本帖最后由 Noly 于 2024-5-6 00:45 编辑

本帖最后由 Noly 于 2024-5-6 00:39 编辑

本帖最后由 Noly 于 2024-5-5 13:20 编辑

非常幸运能够得到这块开发板,因为五一假期有出行计划,所有在假期回来后的第一时间去快递点取了开发板。 两层静电袋加上泡沫的保护,板子的包装整体还是非常稳妥的。

板子照片

开发环境搭建

硬件设备是一台Dell V11Pro i5-4200U的平板电脑上,系统UbuntuServer22.04,这台设备是我个人的开发服务器。所有操作都是由Win主机VSCode SSHRemote到这台服务器上进行的。

  • 首先是在Home目录下新建一个安信可的专用目录
mkdir ~/aithinker
  • 然后使用Git Clone开发板对应的SDK的Gitee仓库,因为在国内Gitee会有比较明显的速度优势,如果本机没有Git,请提前安装
sudo apt install git
git clone https://gitee.com/Ai-Thinker-Open/AiPi-Open-Kits.git -b master

这里会遇到一个小问题需要注意,这个Kits的仓库默认拉取分支是AiPi-aiThinkerCloud分支,要么如上所示在clone的时候加-b master来指定master分支,要么在拉取仓库以后,再手动切换到master分支。相关Git操作可以查阅资料进行学习。

  • Clone主仓库结束以后,进行子模块的拉取
cd AiPi-Open-Kits
git submodule init
git submodule update
  • 主仓库子模块拉取完毕以后,再对aithinker_Ai-M6X_SDK目录下的子模块也进行拉取下载
cd aithinker_Ai-M6X_SDK
git submodule init
git submodule update
  • 如果上述拉取过程很慢,那就需要修改各自目录下的.gitmodules文件,把文件内的submodule的仓库地址从github都改成gitee,这些子仓库在gitee都会有对应的仓库,可以加速
  • 所有都拉取完毕以后,进行环境变量的配置,也就是系统Path的配置
cd aithinker_Ai-M6X_SDK
. install.sh
. export.sh

其中export.sh就是将aithinker_Ai-M6X_SDK/toolchain/bin添加进path,然后将tools文件夹内的编译工具,cmake, make, bflb_tools等工具配置相应的权限。当然也可以选择直接在~/.bashrc或者~/.profile类似的文件内直接修改添加riscv64-unknown-elf编译工具

点灯教程

首先,开发板在收到以后直接上电是没有LED灯是亮的,这种情侣我也是第一次遇到,很少见,尤其是右侧两个小的LED灯会让人误以为是电源指示灯,所以上电不亮让我一度以为这是一块有问题的板子。直到我随便找了一个Demo编译烧录以后亮了灯以后才确认板子是没问题的,只是没有默认的电源指示灯而已。

模板工程选择aithinker_Ai-M6X_SDK目录下examples里的helloworld项目,用这个作为基础开始进行点灯操作。用一般开发板的经验,先初始化GPIO,然后拉高电平就能点亮各个灯了。

cd ~/aithinker/AiPi-Open-Kits/aithinker_Ai-M6X_SDK/examples/helloworld
make
make flash COMX=/dev/ttyUSB0

开始之前先编译烧录一次,确保整个流程是畅通的。

很遗憾,我遇到了缺少lwip/dns.h头文件的错误,可以把这个头文件找回来,也可以先注释掉相关代码,直接在board.c文件里,注释第11行和第212行

11 // #include "lwip/dns.h" // 注释该行
212 // ip_addr_t dns_addr;  // 注释该行

注释掉以后,编译就能成功,然后烧录。烧录要能成功那就按一次Reset复位键,也就是左侧的按键,有时候则需要按住右侧烧录按键然后短按一次左侧Reset,进入烧录模式,然后再进行make flash。总之采用按烧录键再按复位按键的方法都是有效的,有时候按复位键也可以,估计是程序直接挂死以后才可以。

make flash COMX=/dev/ttyUSB0

如果烧录的时候遇到接口权限不足的警告,运行下面语句将本用户加入到dialout用户组,我并没有遇到,因为我开发其他板子的时候已经处理过,如果遇到的话记得这个原因。

sudo usermod -a -G dialout $USER

点灯分析

板子上的RGB_LED是三色LED不是带级联口的IO可编程的RGB灯,所以有三个IO口分别控制红绿蓝三色分别为12,14,15。板子上还有2个小的LED灯是一颗黄色和一颗白色的LED,IO口分别为27,29

#define RGB_LED_RED_PIN   12
#define RGB_LED_GREEN_PIN 14
#define RGB_LED_BLUE_PIN  15
#define LED0_PIN          27
#define LED1_PIN          29

确定IO口以后就要学习如何初始化IO口。AiPi-Open-Kits/aithinker_Ai-M6X_SDK/examples/peripherals/gpio/gpio_input_output目录下有关于IO口输入输出的相关示例代码。简单学习以后,可以写出如下代码。

struct bflb_device_s *gpio;

gpio = bflb_device_get_by_name("gpio");

bflb_gpio_init(gpio, RGB_LED_RED_PIN, GPIO_OUTPUT | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_0);
bflb_gpio_init(gpio, RGB_LED_GREEN_PIN, GPIO_OUTPUT | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_0);
bflb_gpio_init(gpio, RGB_LED_BLUE_PIN, GPIO_OUTPUT | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_0);
bflb_gpio_init(gpio, LED0_PIN, GPIO_OUTPUT | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_0);
bflb_gpio_init(gpio, LED1_PIN, GPIO_OUTPUT | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_0);

初始化代码以后,然后看示例可以得出,如何操控IO口的输出电平。

bflb_gpio_set(gpio, LED0_PIN);
bflb_gpio_reset(gpio, LED0_PIN);

我们使用bflb_gpio_set和bflb_gpio_reset来操作IO口。

最后我们在main.c文件中,加入循环亮灭所有LED的代码,完成点灯实验。

bflb_gpio_set(gpio, RGB_LED_RED_PIN);
bflb_mtimer_delay_ms(200);
bflb_gpio_reset(gpio, RGB_LED_RED_PIN);
bflb_mtimer_delay_ms(200);
bflb_gpio_set(gpio, RGB_LED_GREEN_PIN);
bflb_mtimer_delay_ms(200);
bflb_gpio_reset(gpio, RGB_LED_GREEN_PIN);
bflb_mtimer_delay_ms(200);
bflb_gpio_set(gpio, RGB_LED_BLUE_PIN);
bflb_mtimer_delay_ms(200);
bflb_gpio_reset(gpio, RGB_LED_BLUE_PIN);
bflb_mtimer_delay_ms(200);
bflb_gpio_set(gpio, LED0_PIN);
bflb_mtimer_delay_ms(200);
bflb_gpio_reset(gpio, LED0_PIN);
bflb_mtimer_delay_ms(200);
bflb_gpio_set(gpio, LED1_PIN);
bflb_mtimer_delay_ms(200);
bflb_gpio_reset(gpio, LED1_PIN);
bflb_mtimer_delay_ms(200);

编译烧录,查看开发板亮灯情况。

make
make flash COMX=/dev/ttyUSB0

亮灯图片

点灯完成,感谢安信可,后续我会用这个板子做更多有趣的东西,因为比起ESP32,IDF太繁琐,我喜欢简单直白的编译体验。

回复

使用道具 举报

WT_0213 | 2024-5-6 08:35:56 | 显示全部楼层
很不错
回复

使用道具 举报

爱笑 | 2024-5-6 08:42:27 | 显示全部楼层
不错不错!
用心做好保姆工作
回复

使用道具 举报

bzhou830 | 2024-5-6 09:02:44 | 显示全部楼层
不错不错
选择去发光,而不是被照亮
回复

使用道具 举报

Noly | 2024-5-6 10:43:13 | 显示全部楼层

感谢
回复 支持 反对

使用道具 举报

Noly | 2024-5-6 10:45:09 | 显示全部楼层

谢谢,哈哈
回复 支持 反对

使用道具 举报

Noly | 2024-5-6 10:46:11 | 显示全部楼层

感谢,感谢,🙏
回复 支持 反对

使用道具 举报

lazy | 2024-5-6 13:58:43 | 显示全部楼层
过来学习
回复

使用道具 举报

干簧管 | 2024-5-6 14:41:59 | 显示全部楼层
厉害
回复

使用道具 举报

lynnmike | 2024-5-6 15:15:36 | 显示全部楼层
厉害,虽然代码没怎么看懂
回复 支持 反对

使用道具 举报

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

本版积分规则