一、简述:

本文使用RT_Thread通用GPIO设备驱动进行控制IO口,我们需要了解GPIO设备驱动框架,同时也要驱动LED灯完成本节实验目的。

二、GPIO设备驱动框架:

IO设备驱动框架综述:

RT_Thread IO设备模型框架位于硬件和应用层之间,共分成三层,从上到下分别是 I/O 设备管理层、设备驱动框架层、设备驱动层。

WIFI模块开发教程之W600基础篇2:点亮LED灯_第1张图片

设备驱动框架层是对同类硬件设备驱动的抽象,将不同厂家的同类硬件设备驱动中相同的部分抽取出来,将不同部分留出接口,由驱动程序实现。

PIN设备说明

我们这里控制LED灯,需要使用PIN设备驱动框架,RT_Thread PIN设备支持接口如下图所示

WIFI模块开发教程之W600基础篇2:点亮LED灯_第2张图片

获取引脚编号


/** wm_io.h中引脚定义如下*/

enum tls_io_name {

WM_IO_PA_00 = 0,    /**< gpio a0 */

WM_IO_PA_01,        /**< gpio a1 */

WM_IO_PA_02,        /**< gpio a2 */

WM_IO_PA_03,        /**< gpio a3 */

WM_IO_PA_04,        /**< gpio a4 */

WM_IO_PA_05,        /**< gpio a5 */

WM_IO_PA_06,        /**< gpio a6 */

WM_IO_PA_07,        /**< gpio a7 */

WM_IO_PA_08,        /**< gpio a8 */

WM_IO_PA_09,        /**< gpio a9 */

WM_IO_PA_10,        /**< gpio a10 */

WM_IO_PA_11,        /**< gpio a11 */

WM_IO_PA_12,        /**< gpio a12 */

WM_IO_PA_13,        /**< gpio a13 */

WM_IO_PA_14,        /**< gpio a14 */

WM_IO_PA_15,        /**< gpio a15 */

WM_IO_PB_00,        /**< gpio b0 */

WM_IO_PB_01,        /**< gpio b1 */

WM_IO_PB_02,        /**< gpio b2 */

WM_IO_PB_03,        /**< gpio b3 */

WM_IO_PB_04,        /**< gpio b4 */

WM_IO_PB_05,        /**< gpio b5 */

WM_IO_PB_06,        /**< gpio b6 */

WM_IO_PB_07,        /**< gpio b7 */

WM_IO_PB_08,        /**< gpio b8 */

WM_IO_PB_09,        /**< gpio b9 */

WM_IO_PB_10,        /**< gpio b10 */

WM_IO_PB_11,        /**< gpio b11 */

WM_IO_PB_12,        /**< gpio b12 */

WM_IO_PB_13,        /**< gpio b13 */

WM_IO_PB_14,        /**< gpio b14 */

WM_IO_PB_15,        /**< gpio b15 */

WM_IO_PB_16,        /**< gpio b16 */

WM_IO_PB_17,        /**< gpio b17 */

WM_IO_PB_18,        /**< gpio b18 */

WM_IO_PB_19,        /**< gpio b19 */

WM_IO_PB_20,        /**< gpio b20 */

WM_IO_PB_21,        /**< gpio b21 */

WM_IO_PB_22,        /**< gpio b22 */

WM_IO_PB_23,        /**< gpio b23 */

WM_IO_PB_24,        /**< gpio b24 */

WM_IO_PB_25,        /**< gpio b25 */

WM_IO_PB_26,        /**< gpio b26 */

WM_IO_PB_27,        /**< gpio b27 */

WM_IO_PB_28,        /**< gpio b28 */

WM_IO_PB_29,        /**< gpio b29 */

WM_IO_PB_30,        /**< gpio b30 */

WM_IO_PB_31         /**< gpio b31 */

};

硬件原理图如下

WIFI模块开发教程之W600基础篇2:点亮LED灯_第3张图片

TB_01最小系统开发板中LED分别是PB14、PB15、PB16、PB17、PB18,对应RT_Thread中IO编号是19、20、21、22、23,注意这里不是直接使用WM_IO_PB_14、WM_IO_PB_15、WM_IO_PB_16、WM_IO_PB_17、WM_IO_PB_18,目前调试看下来映射的是引脚编号,之后联盛德官方提供的W60x package可能会解决此问题。

三、点灯程序

#include 
#include 

#define W600_IO_LED1    19
#define W600_IO_LED2    20
#define W600_IO_LED3    21
#define W600_IO_LED4    22
#define W600_IO_LED5    23

int main(void)
{
    /* set wifi work mode */
    rt_wlan_set_mode(RT_WLAN_DEVICE_STA_NAME, RT_WLAN_STATION);
    rt_wlan_set_mode(RT_WLAN_DEVICE_AP_NAME, RT_WLAN_AP);

    /* init led */
    rt_pin_mode(W600_IO_LED1, PIN_MODE_OUTPUT);
    rt_pin_mode(W600_IO_LED2, PIN_MODE_OUTPUT);
    rt_pin_mode(W600_IO_LED3, PIN_MODE_OUTPUT);
    rt_pin_mode(W600_IO_LED4, PIN_MODE_OUTPUT);
    rt_pin_mode(W600_IO_LED5, PIN_MODE_OUTPUT);

    while (1)
    {
        rt_pin_write(W600_IO_LED1, PIN_LOW);
        rt_pin_write(W600_IO_LED2, PIN_LOW);
        rt_pin_write(W600_IO_LED3, PIN_LOW);
        rt_pin_write(W600_IO_LED4, PIN_LOW);
        rt_pin_write(W600_IO_LED5, PIN_LOW);
        rt_kprintf("led on\r\n");

        rt_thread_mdelay(2000);

        rt_pin_write(W600_IO_LED1, PIN_HIGH);
        rt_pin_write(W600_IO_LED2, PIN_HIGH);
        rt_pin_write(W600_IO_LED3, PIN_HIGH);
        rt_pin_write(W600_IO_LED4, PIN_HIGH);
        rt_pin_write(W600_IO_LED5, PIN_HIGH);
        rt_kprintf("led off\r\n");

        rt_thread_mdelay(2000);
    }

    return 0;
}

四、编译

VSCode环境

打开Env控制程序,cd到bsp/w60x当前目录,输入scons

WIFI模块开发教程之W600基础篇2:点亮LED灯_第4张图片

WIFI模块开发教程之W600基础篇2:点亮LED灯_第5张图片

Keil环境

WIFI模块开发教程之W600基础篇2:点亮LED灯_第6张图片

五、烧录运行

使用串口工具烧录,烧录完成后,Log信息如下,符合要求,每隔2秒打印一次信息。

WIFI模块开发教程之W600基础篇2:点亮LED灯_第7张图片

LED结果如下图所示:

WIFI模块开发教程之W600基础篇2:点亮LED灯_第8张图片

WIFI模块开发教程之W600基础篇2:点亮LED灯_第9张图片

六、结语

本节完,如您在使用过程中有任何问题,请加QQ群进一步交流

QQ交流群:906015840 (备注:物联网项目交流)

github仓库地址:https://github.com/solitary-sand/rt_thread

一叶孤沙出品:一沙一世界,一叶一菩提

WIFI模块开发教程之W600基础篇2:点亮LED灯_第10张图片