點亮第一個LED燈及按鍵輸入
一、點亮第一個LED燈
在user_init()
函數中設置IO2爲GPIO模式,如下所示:
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2); /* 設置IO2爲GPIO模式 */
然後將其設置爲輸出模式,並設置爲低電平,從而將LED點亮:
GPIO_OUTPUT_SET(GPIO_ID_PIN(2), 0); /* 使能GPIO2位輸出模式並設置爲低電平,點亮LED */
然後編譯下載運行,可以看到,LED已經點亮了。
二、LED閃爍
新建一個LED閃爍任務,並在user_init()
中創建這個任務,要注意,RTOS SDK提供的任務優先級最高爲14,但是有一些優先級被系統佔用了,可供用戶使用的優先級只有1~9
,數值越大,優先級越高,另外任務堆棧設置範圍也被規定在 [176, 512]之間。
/* 創建一個任務,參數分別爲:1、任務函數,2、任務名稱,3、任務堆棧,4、任務函數的參數,5、任務優先級,6、任務句柄*/
xTaskCreate(led_blink, "led blink", 256, NULL, 2, NULL);
然後我們實現任務函數如下所示:
/* LED閃爍任務函數 */
void led_blink(void *pvParameters)
{
while(1)
{
GPIO_OUTPUT_SET(GPIO_ID_PIN(2), 0);
vTaskDelay(500 / portTICK_RATE_MS); /* 延時500ms */
GPIO_OUTPUT_SET(GPIO_ID_PIN(2), 1);
vTaskDelay(500 / portTICK_RATE_MS); /* 延時500ms */
}
vTaskDelete(NULL);
}
然後編譯下載運行,可以看到,LED一秒閃爍一次。
三、循環檢測按鍵是否按下
首先將boot按鍵的引腳設置爲GPIO模式,禁止輸出,即設置爲輸入模式
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U,FUNC_GPIO0); /* 設置IO0爲GPIO模式 */
GPIO_DIS_OUTPUT(GPIO_ID_PIN(0)) ; /* 禁止GPIO2輸出模式,即設置爲輸入模式 */
我們創建一個按鍵檢測任務檢測是否有按鍵按下,
/* 創建一個按鍵檢測任務 */
xTaskCreate(key_task, "key task", 256, NULL, 3, NULL);
實現任務函數如下:
/* 按鍵檢測任務函數 */
void key_task(void *pvParameters)
{
static int key_up = 1; /* 按鍵鬆開標誌 */
while (1)
{
/* 檢測按鍵是否按下 */
if (key_up && (GPIO_INPUT_GET(GPIO_ID_PIN(0)) == 0) )
{
vTaskDelay(50 / portTICK_RATE_MS); /* 延時50ms消抖*/
key_up = 0;
if (GPIO_INPUT_GET(GPIO_ID_PIN(0)) == 0)
{
/* 按鍵BOOT按下,按鍵按下處理*/
printf("BOOT Key pressed!\n");
}
}
else if(GPIO_INPUT_GET(GPIO_ID_PIN(0)) == 1 )
{
key_up = 1; /* 按鍵已鬆開 */
}
vTaskDelay(100 / portTICK_RATE_MS);
}
}
編譯下載運行,可以看到,按鍵檢測成功