1. 程式人生 > >藍芽BLE---DA14683的GPIO操作

藍芽BLE---DA14683的GPIO操作

新增GPIO初始化函式

在main.c中,新增以下子函式,初始化GPIO口,按鍵的引腳設定為輸入,LED燈的引腳設定為輸出。

/*按鍵GPIO設定*/
void key_led_init()
{
        hw_gpio_set_pin_function(HW_GPIO_PORT_1,HW_GPIO_PIN_6, HW_GPIO_MODE_INPUT,
                        HW_GPIO_FUNC_GPIO);//按鍵
        hw_gpio_set_pin_function(HW_GPIO_PORT_1,HW_GPIO_PIN_5, HW_GPIO_MODE_OUTPUT,
                        HW_GPIO_FUNC_GPIO);//LED
}

然後在以下位置呼叫該函式:

這樣我們的GPIO口初始化就完成了。

新增按鍵和LED開關定義

同樣在main.c中新增以下巨集定義和子函式

/*按鍵巨集定義*/
#define IS_KEY1_DONE()\
        !hw_gpio_get_pin_status(HW_GPIO_PORT_1,HW_GPIO_PIN_6)




/*LED狀態翻轉*/
void led_toggle()
{
        hw_gpio_toggle(HW_GPIO_PORT_1, HW_GPIO_PIN_5 );
}

以上程式碼定義了按鍵按下的狀態,低電平表示按下按鍵

led_toggle函式為GPIO輸出狀態取反。

新增任務實體函式

在main.c中加入以下任務處理函式:

/*簡單的按鍵處理執行緒*/
void key_led_task(void *keydeal)
{
        static unsigned char key_press_sta=0;//按鍵標誌位
        for( ;; )//等同while(1)
        {
                if(IS_KEY1_DONE()&&key_press_sta==0)
                {
                        printf("IS_KEY1_DONE\r\n");
                        led_toggle();
                        key_press_sta=1;// 按下一次,標誌位置1,防止抖動和長按多次執行
                }
                if(!IS_KEY1_DONE())//按鍵擡起則標誌位置0
                        key_press_sta=0;
        }
}

 這個是任務執行緒處理函式。

建立按鍵LED任務

在mian.c的system_init函式中建立按鍵LED任務,程式碼如下:

OS_TASK handle1;// 建立新的任務控制代碼
        OS_TASK_CREATE("KEY_LED_TASK",
                       key_led_task, 
                       NULL,                        
                       512,                            
                       mainPXP_REPORTER_TASK_PRIORITY,  
                       handle1);
        OS_ASSERT(handle1);

編譯、下載、執行

完成以上程式碼新增以後,編譯程式,下載執行,把按鍵的GPIO接地,LED燈的引腳就會輸出反狀態。

通過以上的簡單GPIO操作,使用者即可瞭解GPIO口的大致操作方法。

更多GPIO操作方法請查閱hw_gpio.h,瞭解具體實現方法請查閱hw_gpio.c