通信:串口范例1

#define WIFI_MAX_RTU 64

typedef struct
{
    unsigned char RxBuf[WIFI_MAX_RTU];
    unsigned char RxCount;
    unsigned char RxStatus;
    unsigned char RxNewFlag;
    unsigned char RxTimerOver;

    unsigned char  WiFi_TxBuf[WIFI_MAX_RTU];
    unsigned char TxCount;
    unsigned char usTxRead;
    unsigned char usTxTime;

} struWiFiComm;


/*
*********************************************************************************************************
*   函 数 名: wifi_InitHard
*   功能说明: 初始wifi模块硬件
*   形    参: 无
*   返 回 值: 无
*********************************************************************************************************
*/
void wifi_InitHard(void)
{
    wifi_powerOn();
    memset(&stWiFiComm, 0, sizeof(struWiFiComm));
}

//时间中断调用1ms
void wifi_Timer(void)
{
    //wifi模块
    if (stWiFiComm.RxTimerOver > 0)
    {
        stWiFiComm.RxTimerOver--;
        if (stWiFiComm.RxTimerOver == 0)
        {
            stWiFiComm.RxNewFlag = TRUE;
        }
    }
}

/*********************************************************************
*程序名称:WIFIUART_interrupt
*
*版本:
*
*功能:与WIFI板通讯 波特率9600
*
*********************************************************************/
void WIFIUSCI1_interrupt(void)
{

    if (USCI1_GetFlagStatus(USCI1_UART_FLAG_TI))
    {
        USCI1_ClearFlag(USCI1_UART_FLAG_TI);

        //发送
        if (stWiFiComm.TxCount == 0)
        {
            stWiFiComm.usTxRead = 1;
        }
        else
        {
            /* 从发送1个字节 */
            USCI1_UART_SendData8(stWiFiComm.WiFi_TxBuf[stWiFiComm.usTxRead]);

            if (++stWiFiComm.usTxRead >= WIFI_MAX_RTU)
            {
                stWiFiComm.usTxRead = 0;
            }

            stWiFiComm.TxCount--;
        }
    }

    if (USCI1_GetFlagStatus(USCI1_UART_FLAG_RI))
    {
        USCI1_ClearFlag(USCI1_UART_FLAG_RI);

        /* 设置6ms 超时 (9600) */
        stWiFiComm.RxTimerOver = 6;
        stWiFiComm.RxNewFlag = FALSE;

        if (stWiFiComm.RxCount < WIFI_MAX_RTU)
        {
            stWiFiComm.RxBuf[stWiFiComm.RxCount++] = USCI1_UART_ReceiveData8();
        }
        else
        {
            stWiFiComm.RxCount = 0;
        }
    }
}


/*
*********************************************************************************************************
*   函 数 名: set_WiFi_PeiWang
*   功能说明: 配置WiFi 状态指令【0x51】
*   形    参: 无
*   返 回 值: 无
*********************************************************************************************************
*/
void set_WiFi_PeiWang(unsigned char cmd)
{
    unsigned char check_sum;

    // memset(&stWiFiComm, 0, sizeof(struWiFiComm));
    stWiFiComm.TxCount = 0;

    if (cmd == 0x02)
    {
        g_Servertimeout = 1;
        g_sendstate = 1;
    }

    //数据组包
    stWiFiComm. WiFi_TxBuf[stWiFiComm.TxCount++] = 0x5A;
    stWiFiComm. WiFi_TxBuf[stWiFiComm.TxCount++] = gFrameNO >> 8;
    stWiFiComm. WiFi_TxBuf[stWiFiComm.TxCount++] = gFrameNO & 0xff;
    stWiFiComm. WiFi_TxBuf[stWiFiComm.TxCount++] = FROM_MCU;
    stWiFiComm. WiFi_TxBuf[stWiFiComm.TxCount++] = (1 + 1);
    stWiFiComm. WiFi_TxBuf[stWiFiComm.TxCount++] = 0x51;
    stWiFiComm. WiFi_TxBuf[stWiFiComm.TxCount++] = cmd;

    check_sum = WIFI_get_check_sum(&stWiFiComm. WiFi_TxBuf[0], stWiFiComm.TxCount);
    stWiFiComm. WiFi_TxBuf[stWiFiComm.TxCount++] = check_sum;

    stWiFiComm. WiFi_TxBuf[stWiFiComm.TxCount++] = 0x0D;
    stWiFiComm. WiFi_TxBuf[stWiFiComm.TxCount++] = 0x0A;

    //发送数据
    USCI1_UART_SendData8(stWiFiComm. WiFi_TxBuf[0]);
    stWiFiComm.TxCount--;
    stWiFiComm.usTxRead = 1;
}

//主程序查询
        if (stWiFiComm.RxNewFlag == 1)
        {
            stWiFiComm.RxNewFlag = 0;
            //解析数据。。。
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值