前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >rv-star RGB LED灯实验

rv-star RGB LED灯实验

作者头像
bigmagic
发布2021-03-29 14:59:56
4140
发布2021-03-29 14:59:56
举报
文章被收录于专栏:嵌入式iot
  • 1.实验目的
  • 2.环境搭建
  • 3.实验结果与代码分析
  • 4.调用层次分析

1.实验目的

本实验主要在rv-star的板子上点亮RGB灯。

通过一个简单的GPIO操作实验,分析RISCV MCU目前的编程模型。

本实验的工程已经上传到

https://github.com/bigmagic123/RV-STAR

2.环境搭建

实验下载操作可以按照我之前的文章来操作

首先导入工程

然后选择工程

调试选择openocd

最后,直接下载即可。

3.实验结果与代码分析

入口在main函数

main函数中调用了led_config();函数

该函数的实现如下:

代码语言:javascript
复制
void led_config(void)
{
    for(int i=0; i<LEDn; i++)
    {
        gd_rvstar_led_init(i);
        gd_rvstar_led_on(i);
        delay_1ms(1000);
        gd_rvstar_led_off(i);
    }
}

首先LEDn在gd32vf103_rvstar.h中

代码语言:javascript
复制
/* rvstar board low layer led */
#define LEDn                             3U

定义了三个LED。

接着调用gd_rvstar_led_init初始化gpio。

其实际的实现可以看如下的代码

代码语言:javascript
复制
/* Defines for LED functio/* Defines for LED / Key functions to new / general API */
#define gd_rvstar_led_init         gd_led_init
#define gd_rvstar_led_on           gd_led_on
#define gd_rvstar_led_off          gd_led_off
#define gd_rvstar_led_toggle       gd_led_toggle

实际上执行的是gd_led_init,现在看看该函数的实现

代码语言:javascript
复制
/* eval board low layer private functions */
/*!
 *  \brief      configure led GPIO
 *  \param[in]  lednum: specify the led to be configured
 *  \arg        LED1
 *  \param[out] none
 *  \retval     none
 */
void gd_led_init(led_typedef_enum lednum)
{
    /* enable the led clock */
    rcu_periph_clock_enable(`[lednum]);
    /* configure led GPIO port */
    gpio_init(GPIO_PORT[lednum], GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN[lednum]);
    GPIO_BOP(GPIO_PORT[lednum]) = GPIO_PIN[lednum];
}

首先调用rcu_periph_clock_enable初始化对于的GPIO时钟。

对于GPIO_CLK有如下的定义。

代码语言:javascript
复制
static const rcu_periph_enum GPIO_CLK[LEDn] = {LEDG_GPIO_CLK,LEDB_GPIO_CLK,LEDR_GPIO_CLK};
代码语言:javascript
复制
#define LEDG_PIN                         GPIO_PIN_1
#define LEDG_GPIO_PORT                   GPIOA
#define LEDG_GPIO_CLK                    RCU_GPIOA

#define LEDB_PIN                         GPIO_PIN_3
#define LEDB_GPIO_PORT                   GPIOA
#define LEDB_GPIO_CLK                    RCU_GPIOA

#define LEDR_PIN                         GPIO_PIN_2
#define LEDR_GPIO_PORT                   GPIOA
#define LEDR_GPIO_CLK                    RCU_GPIOA

简单的说,就是LED绿灯对应的是PA1,LED蓝灯对应PA3,LED红灯对应PA2。

查看原理图

对应芯片的引脚

不难看出,操作一个gpio的流程主要是三部分

1.设置GPIO时钟

2.设置初始化设置GPIO

3.操作对应的GPIO位

4.调用层次分析

main-->gd32vf103_rvstar-->gd32vf103_xx.c-->寄存器操作

所以如果需要自己实现板子的定义,只需要修改gd32vf103_rvstar中间层即可。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式IoT 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.实验目的
  • 2.环境搭建
  • 3.实验结果与代码分析
  • 4.调用层次分析
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档