1.實驗目的
2.環境搭建
3.實驗結果與代碼分析
4.調用層次分析
1.實驗目的本實驗主要在rv-star的板子上點亮RGB燈。
通過一個簡單的GPIO操作實驗,分析RISCV MCU目前的編程模型。
2.環境搭建實驗下載操作可以按照我之前的文章來操作
首先導入工程
然后選擇工程
調試選擇openocd
最后,直接下載即可。
3.實驗結果與代碼分析入口在main函數
main函數中調用了led_config();函數
該函數的實現如下:
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中
/* rvstar board low layer led */
#define 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
*
etval 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有如下的定義。
static const rcu_periph_enum GPIO_CLK[LEDn] = {LEDG_GPIO_CLK,LEDB_GPIO_CLK,LEDR_GPIO_CLK};
#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中間層即可。
原文標題:rv-star RGB LED燈實驗
文章出處:【微信公眾號:嵌入式IoT】歡迎添加關注!文章轉載請注明出處。
責任編輯:haq
-
led
+關注
關注
242文章
23347瀏覽量
662976
原文標題:rv-star RGB LED燈實驗
文章出處:【微信號:Embeded_IoT,微信公眾號:嵌入式IoT】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論