本帖最后由 forrest 于 2021-9-16 00:31 编辑

很高兴收到中科蓝讯AB32VG1 RISC-V开发板,这是我第一次用RISC-V的MCU, RT-Thread 也是第一次用。参考文档“中科蓝讯AB32VG1开发实践指南”对我使用有很大帮助。当然文档还是有一些关键点没有说明清楚或就是说明本身错误的。在本文后面会说明。
1. RT-Thread 下载:https://www.rt-thread.org/page/download.html
2. 下载安装过程略。但安装后还需要安装latest RT-thread source code. 见下图箭头所指。
4.png
接着安装AB32VG1 板的开发包。见下图箭头所指
1631721221(1).png
接着安装risc-v工具链,和downloader,这些可以参考文档“中科蓝讯AB32VG1开发实践指南”。
这些安装好了后,就可以用RT-Thread 新建项目了。
5.jpg
6.jpg
这样code就生成了。
但编译居然不通过!报错:没有uint8_t 声明,我也不知道其他人都说顺利编译成功是怎么回事,反正我分别在文件“drv_common.c”中加了:#include "stdint.h", 在“drv_uart.c”中加了#include "stdio.h", 编译才顺利通过。
至此才开始coding工作。
这里文档里有一个问题: Blue_LED 在文档里写的对应PA.2 ,我试了很久都不对,后来看到原理图才发现对应PA.1,改code就正常工作了。
下面的code能以500ms间隔,循环用7中颜色点亮LED:

void init_LED(uint8_t r_led,uint8_t g_led,uint8_t b_led)
{
    rt_pin_mode(r_led, PIN_MODE_OUTPUT);
    rt_pin_mode(g_led, PIN_MODE_OUTPUT);
    rt_pin_mode(b_led, PIN_MODE_OUTPUT);

    rt_pin_write(r_led, PIN_HIGH);       //r_led off
    rt_pin_write(g_led, PIN_HIGH);       //g_led off
    rt_pin_write(b_led, PIN_HIGH);       //b_led off
}

void LED_toggle(uint8_t r_led,uint8_t g_led,uint8_t b_led,uint16_t delaytime)
{
    rt_pin_write(r_led, PIN_LOW);       //r_led on
    rt_thread_mdelay(delaytime);
    rt_pin_write(r_led, PIN_HIGH);      //r_led off
    rt_thread_mdelay(delaytime);

    rt_pin_write(g_led, PIN_LOW);       //g_led on
    rt_thread_mdelay(delaytime);
    rt_pin_write(g_led, PIN_HIGH);      //g_led off
    rt_thread_mdelay(delaytime);

    rt_pin_write(b_led, PIN_LOW);       //b_led on
    rt_thread_mdelay(delaytime);
    rt_pin_write(b_led, PIN_HIGH);      //b_led off
    rt_thread_mdelay(delaytime);

    rt_pin_write(r_led, PIN_LOW);       //r_led on
    rt_pin_write(g_led, PIN_LOW);       //g_led on
    rt_thread_mdelay(delaytime);
    rt_pin_write(r_led, PIN_HIGH);      //r_led off
    rt_pin_write(g_led, PIN_HIGH);      //g_led off
    rt_thread_mdelay(delaytime);

    rt_pin_write(r_led, PIN_LOW);       //r_led on
    rt_pin_write(b_led, PIN_LOW);       //b_led on
    rt_thread_mdelay(delaytime);
    rt_pin_write(r_led, PIN_HIGH);      //r_led off
    rt_pin_write(b_led, PIN_HIGH);      //b_led off
    rt_thread_mdelay(delaytime);

    rt_pin_write(g_led, PIN_LOW);       //g_led on
    rt_pin_write(b_led, PIN_LOW);       //b_led on
    rt_thread_mdelay(delaytime);
    rt_pin_write(g_led, PIN_HIGH);      //g_led off
    rt_pin_write(b_led, PIN_HIGH);      //b_led off
    rt_thread_mdelay(delaytime);

    rt_pin_write(r_led, PIN_LOW);       //r_led on
    rt_pin_write(g_led, PIN_LOW);       //g_led on
    rt_pin_write(b_led, PIN_LOW);       //b_led on
    rt_thread_mdelay(delaytime);
    rt_pin_write(r_led, PIN_HIGH);      //r_led off
    rt_pin_write(g_led, PIN_HIGH);      //g_led off
    rt_pin_write(b_led, PIN_HIGH);      //b_led off
    rt_thread_mdelay(delaytime);
}

int main(void)
{
    uint8_t r_led = rt_pin_get("PE.1");     //red LED control
    uint8_t g_led = rt_pin_get("PE.4");     //green LED control
    uint8_t b_led = rt_pin_get("PA.1");     //blue LED control

    rt_kprintf("Hello, world\n");
    init_LED(r_led,g_led,b_led);

    while (1)
    {
        LED_toggle(r_led,g_led,b_led,500);
    }
}