一、W803測試_01 GPIO點亮LED
開發板收到後確實有點怵,因為在早年買過一塊W806開發板,因為沒有弄好他的開發平臺就一直吃灰,想借此機會學習海淩科的W803,順便將W806也一並通過。
為了能進入狀態,可謂下了很大的功夫,整整一天一共完成能了三個平臺的搭建,一不小心還將Visual Studio 2022也給安裝上了,這樣機器裡就有了Vscode,Python,WM IoT SDK三個開發平臺,經測試都能用,試了一下感覺還是WM IoT SDK用起來比較順手,DOS界面,DOS命令還沒有完全忘記。其中的到過許多在QQ中的朋友的幫助提醒才算搭建完成。最後采用的方法是:
用記事本編輯文檔,用WM IoT SDK編譯下載。
我的測試思路一直是由簡到難,先從最簡單的GPIO開始。
當打開main.c時,裡面的代碼確實讓人抓瞎,完全不同以前接觸過的所有MCU的代碼,有點像英文敘說一樣的寫,首個GPIO中的main.c看完先不管三七二十一,就如下操作:
退到gpio文件夾(經測試,必須在這一級):wm.py build
經過短時編譯,提示想flash下載:wm.py flash -p com1
為了不出錯,一改往常的隨意性,將com口定義為com1。
實際上一開始運行,led就只亮不閃,還不知道哪個口,用外接led一個一個口的試才知道時PB11,一直亮。他的定義非常古怪:
//not defined in device tree
遍曆文檔一開始居然找不到此定義在那個文檔裡,諮詢無果,只好挨個的include文檔打開,關聯搜找,最後才找到他的定義。
我想用4個gpio口來驅顯4線lcd,所以定義為:
相當於PB1-PB4,這幾個口挨著,PB0好像不能定義為普通IO口,不起作用。
定義完,並且按照它的定義函數複制3個:
//Initialize WM_GPIO_NUM_2, it is not defined in the device tree for Input
if (WM_ERR_SUCCESS != (err = wm_drv_gpio_iomux_func_sel(WM_GPIO_DEFINE2, WM_GPIO_IOMUX_FUN5)) ||
WM_ERR_SUCCESS != (err = wm_drv_gpio_set_dir(WM_GPIO_DEFINE2, WM_GPIO_DIR_INPUT)) ||
WM_ERR_SUCCESS != (err = wm_drv_gpio_set_pullmode(WM_GPIO_DEFINE2, WM_GPIO_FLOAT)) ||
WM_ERR_SUCCESS != (err = wm_drv_gpio_set_intr_mode(WM_GPIO_DEFINE2, WM_GPIO_IRQ_TRIG_DOUBLE_EDGE)) ||
WM_ERR_SUCCESS != (err = wm_drv_gpio_add_isr_callback(WM_GPIO_DEFINE2, (wm_drv_gpio_isr_t)wm_drv_gpio_isr_pin_handler,(void *)WM_GPIO_DEFINE2)) ||
WM_ERR_SUCCESS != (err = wm_drv_gpio_enable_isr(WM_GPIO_DEFINE2))) {
wm_log_error("WM_GPIO_DEFINE2 cfg err %d", err);
return err;
}
後3個只是WM_GPIO_DEFINE2尾數改為3,4,5。
之後編譯下載,結果還是不閃,按reset鍵後,滅了又亮,不動了。在坊間諮詢得到 天劍 的熱心指導“用串口看看”——非常奇怪的是,main.c中並沒有printf函數出現,但串口確實出數據了,報IO口高出錯,回頭就將無用語句刪除,添加了while循環語句,結果就出來了。看頭文件,這工程默認將freeRTOS給加裡面了。
Led正常後,下邊就是驅顯LCD的事了。