# IT明星不是梦 # WIFI模块开发教程之W600基础篇3:串口通讯

前言

UART 作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。是在应用程序开发过程中使用频率最高的数据总线。本文使用RT_Thread通用 I/O 设备管理接口来访问串口硬件,从W600 UART1中读取数据,并原样返回。

一、API简介

RT_Thread支持设备API函数如下表所示:

# IT明星不是梦 # WIFI模块开发教程之W600基础篇3:串口通讯

API详细说明,请参考RT_Thread官方文档中心串口设备描述,地址如下:https://www.rt-thread.org/document/site/

二、使用实例

1.环境配置

使用ENV工具配置串口资源,选择Hardware Drivers Config

# IT明星不是梦 # WIFI模块开发教程之W600基础篇3:串口通讯
选择on-chip Peripheral Drivers --->

# IT明星不是梦 # WIFI模块开发教程之W600基础篇3:串口通讯

查看默认已经打开了串口1(PB11:RX, PB12:TX)

# IT明星不是梦 # WIFI模块开发教程之W600基础篇3:串口通讯

2.中断接收并发送

#include <rtthread.h>
#include <rtdevice.h>

//  用于接收消息的信号量 */
static struct rt_semaphore rx_sem;
rt_device_t user_uart;

static rt_err_t user_uart_input(rt_device_t dev, rt_size_t size)
{
    rt_sem_release(&rx_sem);

    return RT_EOK;
}

static void user_uart_thread_entry(void *args)
{
    char ch;

    while (1)
    {
        while (1 != rt_device_read(user_uart, -1, &ch, 1))
        {
            rt_sem_take(&rx_sem, RT_WAITING_FOREVER);
        }
        //send back
        rt_device_write(user_uart, 0, &ch, 1);
    }

}

int main(void)
{
    rt_err_t ret = RT_EOK;
    char str[] = "hello world!\r\n";

    user_uart = rt_device_find("uart1");
    if (!user_uart)
    {
        rt_kprintf("find uart1 failed!\r\n");
        return RT_ERROR;
    }

    rt_sem_init(&rx_sem, "rx_sem", 0, RT_IPC_FLAG_FIFO);
    rt_device_open(user_uart, RT_DEVICE_FLAG_INT_RX);
    rt_device_set_rx_indicate(user_uart, user_uart_input);
    rt_device_write(user_uart, 0, str, sizeof(str) - 1);

    rt_thread_t uart_thread = rt_thread_create("user_uart", user_uart_thread_entry, RT_NULL, 1024, 25, 10);
    if (uart_thread != NULL)
    {
        rt_thread_startup(uart_thread);
    }else
    {
        ret = RT_ERROR;
    }

    return ret;
}

三、下载运行

在ENV控制台,输入scons命令,在build/Bin目录下生成rtthread_1M.FLS,烧录运行后,将模块PB12连接串口小板的RX,PB11连接串口小板的TX,共地。

# IT明星不是梦 # WIFI模块开发教程之W600基础篇3:串口通讯

上电后,模块会向串口小板发送hello world!,然后通过串口工具发送hello RT_Thread,模块收到串口工具发送信息后,会自动返回。

# IT明星不是梦 # WIFI模块开发教程之W600基础篇3:串口通讯

四、结语

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

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

资料获取:关注公众号:一个物联网项目的前世今生,回复w600即可

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

# IT明星不是梦 # WIFI模块开发教程之W600基础篇3:串口通讯

猜你喜欢

转载自blog.51cto.com/14616151/2482656