一, 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 的事了.