全局掌控
- 看一下原理圖,确認LED對應的IO口
- AliOS Things 架構-SOC層
- 操作GPIO
- 寫代碼
闆子上有三個LED,分别是LED1,LED2,LED3。
看原理圖,這三個LED的陽極接的3V電源。
隻要控制LED的IO口低電平,對應的LED就會亮。

根據圖紙上的網絡标号,确認三個LED分别對應的IO口。
LED1 對應 PB6
LED2 對應 PE3
LED3 對應 PD15
順便看到了三個按鍵,一起記錄一下。
KEY1 PE11
KEY2 PE14
KEY3 PE10
拿萬用表測試一下,證明上述對應關系OK。
從單片機程式設計的思維考慮:
先将對應IO口設定為推挽輸出模式(這樣的IO口驅動能力很強,可以通過軟體設定)
再通過控制對應IO口是0或者是1,來控制實際對應的高低電平
IO口是0,表示低電平,那麼對應的LED會亮
IO口是1,表示高電平,對應的LED會滅
在 AliOS Things 的體系中,SOC層屬于底層的東西。由廠家負責維護,你要做的就是了解它。
在SDK的目錄裡,找到 board 的檔案夾,裡面找到對應的硬體名稱。比如零妖打開的是 developerkit 這個檔案夾。
這個檔案夾裡面,是一些涉及底層的東西,想找硬體底層的内容就來這裡。
零妖要控制LED1,目的是閃爍LED1。
LED1 對應 PB6 ,檢視和GPIO有關的頭檔案,它的編号是 22 。
在SDK的檔案夾裡面,有一個 include 的檔案夾,裡面放的是一些頭檔案,需要的話就查一下,包含到你的代碼中。
操作GPIO屬于操作SOC層中的硬體,是以 #include <hal/soc/soc.h> 即可。
在 include/hal/soc 檔案夾裡面,能找到一個 gpio.h 的頭檔案。
你可以檢視對GPIO操作的一些函數。
GPIO有關的API,詳細解釋參考:
https://github.com/alibaba/AliOS-Things/wiki/AliOS-Things-API-HAL-SOC-GPIO-Guide#include <aos/aos.h>
#include <hal/soc/soc.h>
gpio_dev_t LED1;//初始化一個GPIO相關的結構體
//聲明函數
static void LED1_Off(void *arg);
//檢視原理圖,IO口輸出0,LED亮
static void LED1_On(void *arg)
{
hal_gpio_output_low(&LED1);
aos_post_delayed_action(100, LED1_Off, NULL);
}
//檢視原理圖,IO口輸出1,LED滅
static void LED1_Off(void *arg)
{
hal_gpio_output_high(&LED1);
aos_post_delayed_action(100, LED1_On, NULL);
}
//主任務,OS初始化完成後運作的第一個任務。
int application_start(int argc, char *argv[])
{
LOG("初始化完成,應用程式開始:");
LED1.port = 22;//LED1對應的IO口,在OS裡面編号是22
LED1.config = OUTPUT_PUSH_PULL;//設定為推挽輸出
hal_gpio_init(&LED1);//初始化LED1的IO口
aos_post_delayed_action(1000, LED1_On, NULL);//1S之後調用LED1_On()函數
aos_loop_run();//進入事件循環
return 0;
}
從主任務講起。
首先序列槽輸出字元串,告訴你OS已經初始化完成。
配置IO口
然後又定時1S,時間到了之後,執行 LED_on()函數
LED亮之後,設定了一個100ms定時器,到時間後執行 LED_off()函數
LED滅之後,設定了一個100ms定時器,到時間之後執行LED_on()函數
LED亮和滅循環執行。
結束
- SOC層是由晶片廠家負責維護的
- 非必要,不要修改裡面的内容
- 你想操作底層硬體相關,就來SOC層找相關内容
- 一些典型傳感器已經有成熟的代碼,這個後面再看
微信公衆号 偶爾更新