看到国产芯+国产RTOS这个组合我第一时间被打动,立马找了朋友搞了一块开发板,话不多说,简单介绍后直接上电RGB流水灯。
以中科蓝讯 (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 扩展接口,方便二次开发
✦开发环境IDE:RT-Thread Studio
✦下载工具:Downloader_v2.2.0
✦开发板硬件版本:AB32VG1 2021.05 V2.0
✦如果是第一次做RISC-V开发,又或者第一次用AB的芯片,那么要在SDK管理器里面添加一些SDK,如图RISC-V的内核要添加一下。
✦如果是第一次做这块板子的开发,那么新建的时候基于开发板新建工程,然后在添加更多,SDK管理器会弹出来,然后选择对应开发板,添加即可。
✦工程建立好以后,会有一个错误,那是因为我们还没有把RISC-Vbin文件加入进来,右击project点击属性,点击MCU下面的RISC-V Toolchains Pat把\RT-ThreadStudio\repo\Extract\ToolChain_Support_Packages\RISC-V\RISC-V-GCC\10.1.0\bin添加到工程中来,重新编译就没有错误了。
在源文件rgb.c中添加代码如下:
#include "rgb.h"
#include <rtthread.h>
#include "board.h"
struct Led_s
{
uint8_t LED_R;
uint8_t LED_B;
uint8_t LED_G;
}; //define RGB struct
struct Led_s Led;
void RGB_Init(void)
{
//define Pin Number
Led.LED_R = rt_pin_get("PE.1");
Led.LED_G = rt_pin_get("PA.1");
Led.LED_B = rt_pin_get("PE.4");
//Set Pin Mode
rt_pin_mode(Led.LED_R, PIN_MODE_OUTPUT);
rt_pin_mode(Led.LED_G, PIN_MODE_OUTPUT);
rt_pin_mode(Led.LED_B, PIN_MODE_OUTPUT);
}
//传入参数 on=1:对应亮,on=0:对应灭
//红灯驱动
void RGB_Red(rt_bool_t on)
{
rt_pin_write(Led.LED_G, PIN_HIGH);
rt_pin_write(Led.LED_B, PIN_HIGH);
if (on) {
rt_pin_write(Led.LED_R, PIN_LOW);
}else {
rt_pin_write(Led.LED_R, PIN_HIGH);
}
}
//蓝灯驱动
void RGB_Blue(rt_bool_t on){
rt_pin_write(Led.LED_G, PIN_HIGH);
rt_pin_write(Led.LED_R, PIN_HIGH);
if (on) {
rt_pin_write(Led.LED_B, PIN_LOW);
}else {
rt_pin_write(Led.LED_B, PIN_HIGH);
}
}
//绿灯驱动
void RGB_Green(rt_bool_t on)
{
rt_pin_write(Led.LED_R, PIN_HIGH);
rt_pin_write(Led.LED_B, PIN_HIGH);
if (on) {
rt_pin_write(Led.LED_G, PIN_LOW);
}else {
rt_pin_write(Led.LED_G, PIN_HIGH);
}
}
在源文件rgb.h中添加代码如下:
#ifndef RGB_H__
#define RGB_H__
#include <rtthread.h>
void RGB_Init(void);
void RGB_Red(rt_bool_t on);
void RGB_Blue(rt_bool_t on);
void RGB_Green(rt_bool_t on);
#endif
在mian函数里面添加代码如下:
static void rgb_thread_entry(void* p)
{
RGB_Init();
while(1)
{
rt_thread_mdelay(1000);
RGB_Blue(1);
rt_thread_mdelay(1000);
RGB_Green(1);
rt_thread_mdelay(1000);
RGB_Red(1);
}
}
static int Thread_RGB(void)
{
rt_thread_t thread = RT_NULL;
thread = rt_thread_create("rgb", rgb_thread_entry, RT_NULL, 512, 10, 10);
if(thread == RT_NULL)
{
rt_kprintf("Thread_GRB Init ERROR");
return RT_ERROR;
}
rt_thread_startup(thread);
}
INIT_APP_EXPORT(Thread_RGB);
int main(void)
{
while (1)
{
rt_thread_mdelay(1000);
}
}
✦好了,空白工程搭建好了,开始写代码,新建一个源文件rgb.c和一个头文件rgb.h。看下原理图,确定RGB三个管脚分别是PE1,PE4,PA1。
✦敲完代码编译一下没问题,就可以下一步,下载程序,打开烧写软件,选择dcf文件,打开串口,选择开始,不出意外烧写成功。
✦按下板上reset按键,RGB流水灯跑起来,如图。
AD封装系列
铝电解系列封装(带3D)
USB Type-A座子系列(带3D)
TF(micro SD)卡座封装大全(带3D)
2.4G PCB天线(量产用)
RJ45座子(带3D)
DC3-2.54板端座子(带3D)
USB3.0板端座子(带3D)
LED发光二极管(带3D)
贴片插件电阻排阻(带3D)
插件压敏电阻(带3D)
继电器(带3D)
按键开关,拨码开关,拨动开关(带3D)
PH2.0座子插件贴片(带3D)
915MHz天线,GPS天线,GSM天线,433MHz天线,13.56Hz天线,LTE天线
FPC座子0.5mm间距1.0mm间距1.25间距(带3D)
贴片及插件二极管-整流桥(带3D)
插件电解电容,贴片电容,钽电容,独石电容(带3D)
VH3.96mm插件座子(带3D)
XH2.54mm座子插件贴片(带3D)
贴片插件晶振(带3D)
micro USB座子,Type C座子,USB-A公头(带3D)
三极管,MOS管,部分LDO(TO,SOT系列)(带3D)
贴片电感(带3D)
插件电感,变压器(带3D)
芯片IC封装-QFP,TQFP,LQFP(带3D)
DC电源接口、音频接口(带3D)
数码管,点阵,屏(带3D)
VGA视频座子,RJ11座子(带3D)
SD卡卡座(带3D)
SIM卡卡座(带3D)
KF2EDGK系列2.54接线端子(带3D)
不用开发板学习STM32系列
一般流水灯实验(文末获取代码及工程文件)
7段数码管0~9定时显示(文末获取代码及工程文件)
必看必读系列
【收藏】32个EMC标准电路!!
【收藏】你应该知道的拓扑结构-开关电源,都在这里!!
【收藏】开关电源你必须知道的专业名字(中英对照)!!
【收藏】优选4层板到12层板叠层经典设计方!!
【过瘾】电机原理动态图,停不下来!!
【过瘾】各种烙铁头正确使用姿势,你get到了吗?
【较真】细说LDO旁路电容如何选!!
【较真】0欧姆电阻的妙用!!
【必看】10分钟学会看MOSFET手册!!
电子元器件基础普及系列
电阻知识点总结!
电容分类知识点总结!
二极管知识点总结!
电感分类知识点总结!
变压器知识大盘点!
必须知道的天线知识及天线图谱
美国线规AWG与公制对照表,拿走不谢~
经典图文,带你一文搞懂MOS管!
超级电容!为什么那么超级!
点个在看你最好看