1.实验目的
2.环境搭建
3.实验结果与代码分析
4.调用层次分析
1.实验目的本实验主要在rv-star的板子上点亮RGB灯。
通过一个简单的GPIO操作实验,分析 RISC V MCU 目前的编程模型。
2.环境搭建实验下载操作可以按照我之前的文章来操作
首先导入工程
然后选择工程
调试选择openocd
最后,直接下载即可。
3.实验结果与代码分析入口在main函数
main函数中调用了 led _config();函数
该函数的实现如下:
void led_config(无效)
{
为(int i = 0; 我《 LEDn; i ++)
{
gd_rvstar_led_init(i);
gd_rvstar_led_on(i);
delay_1ms(1000);
gd_rvstar_led_off(i);
}
}
首先LEDn在gd32vf103_rvstar.h中
/ * rvstar板低层LED * /
#定义LEDn 3U
定义了三个LED。
接着调用gd_rvstar_led_init初始化gpio。
其实际的实现可以看如下的代码
/* 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,现在看看该函数的实现
/* eval board low layer private functions */
/*!
* rief configure led GPIO
* param[in] lednum: specify the led to be configured
* arg LED1
* param[out] none
*
没有
*/
void gd_led_init(led_typedef_enum lednum)
{
/ *启用LED时钟* /
rcu_periph_clock_enable(`[lednum]);
/ *配置LED GPIO端口* /
gpio_init(G PI O_PORT [lednum],GPIO_MODE_OUT_PP,GPIO_ OSP EED_50MHZ,GPIO_PIN [lednum]);
GPIO_BOP(GPIO_PORT [lednum])= GPIO_PIN [lednum];
}
首先调用rcu_periph_clock_enable初始化对于的GPIO 时钟 。
对于GPIO_CLK有如下的定义。
静态常量rcu_periph_enum GPIO_CLK [LEDn] = {LEDG_GPIO_CLK,LEDB_GPIO_CLK,LEDR_GPIO_CLK};
#定义LEDG_PIN GPIO_PIN_1
#定义LEDG_GPIO_PORT GPIOA
#定义LEDG_GPIO_CLK RCU_GPIOA
#定义LEDB_PIN GPIO_PIN_3
#定义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--》 寄存器 操作