HPM5301EVKLite 是一款基于RISC-V的高性能微控制器开发板,使用 RT-Thread 实时操作系统来点亮开发板上的 LED。
以下几个步骤:
1. 环境搭建
安装了 RT-Thread Studio,这是一个基于 Eclipse 的集成开发环境(IDE),专为 RT-Thread 定制。RT-Thread Studio 提供了从项目创建、配置、编译到烧录的一站式解决方案。
下载连接:
rt-thread.org/download.html

2. 创建项目
打开 RT-Thread Studio,选择“文件”->“新建”->“RT-Thread 项目”。
在项目模板选择中,选择适用于 HPM5301EVKLite 的 BSP(板级支持包)。
设置项目名称和存储位置,然后点击“完成”。
9a3322db98a825ddf15e8293749c40b.png
选择开发板,然后再去安装SDK。
image.png
3. 安装SDK与配置项目
新建后,
c9de44998fc3b71fd57a534986f3be5.png
如果你使用的是标准的 RT-Thread BSP,那么可能已经预配置了 LED 相关的 GPIO。
4. 代码
新建工程,再打开示例:
f46c16279d7b3f0febf0780227de649.png

代码示例:
  1. #include <rtthread.h> // 引入RT-Thread的头文件,确保可以使用RT-Thread的API  

  2. int main(void)  
  3. {  
  4.     // 初始化LED引脚,确保LED可以正常工作  
  5.     app_init_led_pins();  
  6.     // 定义一个静态变量作为线程的参数,这里简单地使用0作为示例  
  7.     // 在实际应用中,这个参数可以根据需要传递更复杂的数据  
  8.     static uint32_t led_thread_arg = 0;  
  9.     // 创建一个线程,线程名为"led_th",入口函数为thread_entry,  
  10.     // 线程参数为&led_thread_arg,栈大小为1024字节,  
  11.     // 优先级为1(RT-Thread中优先级数值越小,优先级越高),时间片为10个tick  
  12.     rt_thread_t led_thread = rt_thread_create("led_th", thread_entry, &led_thread_arg, 1024, 1, 10);  
  13.     // 如果线程创建成功,启动线程  
  14.     if (led_thread != RT_NULL) {  
  15.         rt_thread_startup(led_thread);  
  16.     }  
  17.     // 在这个例子中,main函数在启动线程后没有更多的操作,  
  18.     // 但通常在实际应用中,main函数会执行其他任务或等待线程结束(如果适用)。  
  19.     // 在RTOS中,main函数通常不会返回,而是进入一个无限循环等待事件或任务完成。  
  20.     // 但由于这里只创建了一个线程,并且没有等待它结束,所以直接返回0。  
  21.     // 注意:在实际应用中,直接返回0可能不是最佳实践。  
  22.     return 0;  
  23. }  
  24. // 线程入口函数,当线程被启动时,这个函数会被执行  
  25. void thread_entry(void *arg)  
  26. {  
  27.     // 无限循环,控制LED灯依次闪烁  
  28.     while(1){  
  29.         // 打开第一个LED灯  
  30.         app_led_write(0, APP_LED_ON);  
  31.         // 延时500毫秒  
  32.         rt_thread_mdelay(500);  
  33.         // 关闭第一个LED灯  
  34.         app_led_write(0, APP_LED_OFF);  
  35.         // 延时500毫秒  
  36.         rt_thread_mdelay(500);  
  37.         // 类似地,控制第二个和第三个LED灯闪烁  
  38.         app_led_write(1, APP_LED_ON);  
  39.         rt_thread_mdelay(500);  
  40.         app_led_write(1, APP_LED_OFF);  
  41.         rt_thread_mdelay(500);  
  42.         app_led_write(2, APP_LED_ON);  
  43.         rt_thread_mdelay(500);  
  44.         app_led_write(2, APP_LED_OFF);  
  45.         rt_thread_mdelay(500);  
  46.     }  
  47. }