看到国产芯+国产RTOS这个组合第一时间被打动,立马就申请了,话不多说,简单介绍后直接上电RGB。AB32VG1 开发板是以中科蓝讯 (Bluetrum) 公司推出的基于 RISC-V 架构的高配置芯片 AB32VG1 为核心所组成的。
● CPU: AB32VG1 (LQFP48 封装,主频 120M ,片上集成 RAM 192K, flash 4Mbit,ADC,PWM,USB,UART,IIC 等资源)
● 搭载蓝牙模块
● 搭载FM模块
● 一路 TF Card 接口
● 一路 USB 接口
● 一路 IIC 接口
● 一路音频接口 (美标 CTIA)
● 六路 ADC 输入引脚端子引出
● 六路 PWM 输出引脚端子引出
● 一个全彩 LED 灯模块,一个电源指示灯,三个烧录指示灯
● 一个 IRDA (红外接收端口)
● 一个 Reset 按键,三个功能按键 (通用版为两个功能按键)
● 板子规格尺寸:6cm * 9cm
● I/O口通过 2.54MM 标准间距引出,同时兼容 Arduino Uno 扩展接口,方便二次开发
16250330206U29uopR.png

开发环境IDE:RT-Thread Studio
下载工具:Downloader_v2.2.0
开发板硬件版本:AB32VG1 2021.05 V2.0
开始RGB点灯套路~~
首先,如果是第一次做RISC-V开发,又或者第一次用AB的芯片,那么要在SDK管理器里面添加一些SDK,如下图:
QQ截图20210814183929.png
RISC-V的内核要添加一下,如果是第一次做这块板子的开发,那么新建的时候基于开发板新建工程,然后在添加更多,SDK管理器会弹出来,
然后选择对应开发板,添加即可。
04.png
QQ截图20210814185130.png
工程建立好以后,会有一个错误,那是因为我们还没有把RISC-Vbin文件加入进来,右击project点击属性,点击MCU下面的RISC-V Toolchains Pat
\RT-ThreadStudio\repo\Extract\ToolChain_Support_Packages\RISC-V\RISC-V-GCC\10.1.0\bin添加到工程中来,重新编译就
没有错误了。
01.png
QQ截图20210814185505.png
好了,空白工程搭建好了,开始写代码,新建一个源文件rgb.c和一个头文件rgb.h。看下原理图,确定RGB三个管脚分别是PE1,PE4,PA1
QQ截图20210814232903.png
在源文件rgb.c中添加代码如下:
  1. <b>#include "rgb.h"
  2. #include <rtthread.h>
  3. #include "board.h"
  4. struct Led_s
  5. {
  6.     uint8_t LED_R;
  7.     uint8_t LED_B;
  8.     uint8_t LED_G;
  9. };      //define RGB struct
  10. struct Led_s Led;
  11. void RGB_Init(void)
  12. {
  13.     //define Pin Number
  14.     Led.LED_R = rt_pin_get("PE.1");
  15.     Led.LED_G = rt_pin_get("PA.1");
  16.     Led.LED_B = rt_pin_get("PE.4");
  17.     //Set Pin Mode
  18.     rt_pin_mode(Led.LED_R, PIN_MODE_OUTPUT);
  19.     rt_pin_mode(Led.LED_G, PIN_MODE_OUTPUT);
  20.     rt_pin_mode(Led.LED_B, PIN_MODE_OUTPUT);
  21. }
  22. //传入参数 on=1:对应亮,on=0:对应灭
  23. //红灯驱动
  24. void RGB_Red(rt_bool_t on)
  25. {
  26.     rt_pin_write(Led.LED_G, PIN_HIGH);
  27.     rt_pin_write(Led.LED_B, PIN_HIGH);
  28.     if (on) {
  29.         rt_pin_write(Led.LED_R, PIN_LOW);
  30.     }else {
  31.         rt_pin_write(Led.LED_R, PIN_HIGH);
  32.     }
  33. }
  34. //蓝灯驱动
  35. void RGB_Blue(rt_bool_t on){
  36.     rt_pin_write(Led.LED_G, PIN_HIGH);
  37.     rt_pin_write(Led.LED_R, PIN_HIGH);
  38.     if (on) {
  39.         rt_pin_write(Led.LED_B, PIN_LOW);
  40.     }else {
  41.         rt_pin_write(Led.LED_B, PIN_HIGH);
  42.     }
  43. }
  44. //绿灯驱动
  45. void RGB_Green(rt_bool_t on)
  46. {
  47.     rt_pin_write(Led.LED_R, PIN_HIGH);
  48.     rt_pin_write(Led.LED_B, PIN_HIGH);
  49.     if (on) {
  50.         rt_pin_write(Led.LED_G, PIN_LOW);
  51.     }else {
  52.         rt_pin_write(Led.LED_G, PIN_HIGH);
  53.     }
  54. }</b>


在源文件rgb.h中添加代码如下:
  1. <strong>#ifndef RGB_H__
  2. #define RGB_H__
  3. #include <rtthread.h>
  4. void RGB_Init(void);
  5. void RGB_Red(rt_bool_t on);
  6. void RGB_Blue(rt_bool_t on);
  7. void RGB_Green(rt_bool_t on);
  8. #endif</strong>
在mian函数里面添加代码如下:
  1. #include <rtthread.h>
  2. #include "board.h"
  3. #include "rgb.h"
  4. static void rgb_thread_entry(void* p)
  5. {
  6. RGB_Init();
  7. while(1)
  8. {
  9. rt_thread_mdelay(1000);
  10. RGB_Blue(1);
  11. rt_thread_mdelay(1000);
  12. RGB_Green(1);
  13. rt_thread_mdelay(1000);
  14. RGB_Red(1);
  15. }
  16. }
  17. static int Thread_RGB(void)
  18. {
  19. rt_thread_t thread = RT_NULL;
  20. thread = rt_thread_create("rgb", rgb_thread_entry, RT_NULL, 512, 10, 10);
  21. if(thread == RT_NULL)
  22. {
  23. rt_kprintf("Thread_GRB Init ERROR");
  24. return RT_ERROR;
  25. }
  26. rt_thread_startup(thread);
  27. }
  28. INIT_APP_EXPORT(Thread_RGB);
  29. int main(void)
  30. {
  31. while (1)
  32. {
  33. rt_thread_mdelay(1000);
  34. }
  35. }

敲完代码编译一下没问题,就可以下一步,下载程序,打开烧写软件,选择dcf文件,打开串口,选择开始,不出意外烧写成功。
02.png
QQ截图20210814220914.png
QQ截图20210814221137.png
按下板上reset按键,RGB流水灯跑起来,如下图:
VID_20210814_221412.gif