美文网首页
MT2503 串口编程

MT2503 串口编程

作者: tianxiaoMCU | 来源:发表于2019-01-02 18:03 被阅读0次
配置GPIO模式为UART

首先是配置IO为复用UART功能,使用

GPIO_ModeSetup(WIFI_UART_RX_PIN_NUM, 1);
GPIO_ModeSetup(WIFI_UART_TX_PIN_NUM, 1);

DCL_HANDLE wifi_uart_handle;

wifi_uart_handle = DclGPIO_Open(DCL_GPIO, WIFI_UART_RX_PIN_NUM);
DclGPIO_Control(wifi_uart_handle , GPIO_CMD_SET_MODE_1, NULL);

wifi_uart_handle = DclGPIO_Open(DCL_GPIO, WIFI_UART_TX_PIN_NUM);
DclGPIO_Control(wifi_uart_handle , GPIO_CMD_SET_MODE_1, NULL);
初始化串口

配置IO为UART后才能初始化UART的参数:

DCL_HANDLE handle;
UART_CTRL_POWERON_T power_on_data;
UART_CTRL_OPEN_T open_data;
UART_CTRL_OWNER_T owner_data;
UART_CTRL_DCB_T dcb_data;

handle = DclSerialPort_Open(port, 0);

/* 使能串口 */
power_on_data.bFlag_Poweron = on;
DclSerialPort_Control(handle, UART_CMD_POWER_ON, (DCL_CTRL_DATA_T *)&power_on_data);

/* 获取MOD */
DclSerialPort_Control(handle, SIO_CMD_GET_OWNER_ID, (DCL_CTRL_DATA_T *)&owner_data);

/* 打开串口 */
open_data.u4OwenrId = owner_data.u4OwenrId;
DclSerialPort_Control(handle, SIO_CMD_OPEN, (DCL_CTRL_DATA_T *)&open_data);

/* 切换MOD */
owner_data.u4OwenrId = MOD_xxx;
DclSerialPort_Control(handle, SIO_CMD_SET_OWNER, (DCL_CTRL_DATA_T *)&owner_data);

/* 设置串口参数 */
dcb_data.u4OwenrId                 = MOD_xxx;
dcb_data.rUARTConfig.u4Baud        = UART_BAUD_115200;
dcb_data.rUARTConfig.u1DataBits    = len_8;
dcb_data.rUARTConfig.u1StopBits    = sb_1;
dcb_data.rUARTConfig.u1Parity      = pa_none;
dcb_data.rUARTConfig.u1FlowControl = fc_none;
dcb_data.rUARTConfig.ucXonChar     = 0x11;
dcb_data.rUARTConfig.ucXoffChar    = 0x13;
dcb_data.rUARTConfig.fgDSRCheck    = KAL_FALSE;
DclSerialPort_Control(handle, SIO_CMD_SET_DCB_CONFIG, (DCL_CTRL_DATA_T *)&dcb_data);

DclSerialPort_Close(handle);
串口收数据
static kal_uint16 UART_GetBytes(UART_PORT port, kal_uint8 *Buffaddr, kal_uint16 Length, kal_uint8 *status, module_type ownerid)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
#ifdef __MTK_TARGET__
    DCL_HANDLE handle;
    UART_CTRL_GET_BYTES_T data;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    data.u4OwenrId  = ownerid;
    data.u2Length   = Length;
    data.puBuffaddr = Buffaddr;
    data.pustatus   = status;
    handle          = DclSerialPort_Open(port, 0);
    DclSerialPort_Control(handle, SIO_CMD_GET_BYTES, (DCL_CTRL_DATA_T *)&data);
    return data.u2RetSize;
#else
    return 0;
#endif
}

系统收到数据后会发送MSG_ID_UART_READY_TO_READ_IND事件给串口归属的模块,收到消息后将数据读出即可。

串口发数据
static kal_uint16 UART_PutBytes(UART_PORT port, kal_uint8 *Buffaddr, kal_uint16 Length, module_type ownerid)
{
/*----------------------------------------------------------------*/
/* Local Variables                                                */
/*----------------------------------------------------------------*/
#ifdef __MTK_TARGET__
    DCL_HANDLE handle;
    UART_CTRL_PUT_BYTES_T data;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    data.u4OwenrId  = ownerid;
    data.u2Length   = Length;
    data.puBuffaddr = Buffaddr;
    handle          = DclSerialPort_Open(port, 0);
    DclSerialPort_Control(handle, SIO_CMD_PUT_BYTES, (DCL_CTRL_DATA_T *)&data);
    return data.u2RetSize;
#else
    return 0;
#endif
}

发数据前应该等待上一次发送结束再发送:

static DCL_UINT16 UART_CheckTxAllSentOut(DCL_DEV port)
{
/*----------------------------------------------------------------*/
/* Local Variables                                                */
/*----------------------------------------------------------------*/
#ifdef __MTK_TARGET__
    DCL_HANDLE handle;
    UART_CTRL_CHECK_TSO_T data;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    handle = DclSerialPort_Open(port, 0);
    DclSerialPort_Control(handle, UART_CMD_CHECK_TX_SEND_OUT, (DCL_CTRL_DATA_T *)&data);
    DclSerialPort_Close(handle);
    return data.bFlag;
#else
    return 0;
#endif
}

相关文章

  • MT2503 串口编程

    配置GPIO模式为UART 首先是配置IO为复用UART功能,使用 或 初始化串口 配置IO为UART后才能初始化...

  • 2019-07-11

    串口及串口编程 1、串口编程界面 (2)功能效果实现 2、使用串口调试工具实现数据传输 (1)在下拉列表中列出本机...

  • QT串口编程 - QSerialPort类

    QT串口编程 - QSerialPort类 提供对串口的访问 头文件:#include qmake: QT += ...

  • 串口编程

    串口连接界面 主要控件 打开串口 自动获取串口列表并显示 初始化串口 写入卡片 插入打卡记录并显示打卡成功

  • MATLAB 串口通信

    matlab 串口编程 由于项目需要,用matlab 做了一个串口通信工具,也碰到不少坑。这里总结一下。 读取串口...

  • Android串口(SerialPort)开发常遇神坑

    在Android串口编程的时候,首先需要进行串口初始化,打开相应的串口。当我们初始化的时候显示java.lang....

  • 回顾串口及其串口编程

    1.RFID读写卡上位机测试程序界面 1.1RFID读写卡界面效果图 1.2RFID读写卡界面功能描述 在RFID...

  • 单片机小白学习之路(二十五)---串口通信的编程

    目标:串口通信的编程 (2)串口初始化步骤①确定T1的工作方式(TMOD寄存器);②确定串口工作方式(SCON寄存...

  • Qt5学习:串口编程基础

    转载自QT开发(五十)——QT串口编程基础 一、QtSerialPort简介 (一)串口通信基础 目前使用最广泛的...

  • 串口编程总结

    背景 接触了这么久串口,一直觉得挺简单的,没什么可总结的,但是总要加一些串口的时候,要求就逐渐高了,尤其是各种硬件...

网友评论

      本文标题:MT2503 串口编程

      本文链接:https://www.haomeiwen.com/subject/gibzlqtx.html