#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;
//解析数据。。。
}
通信:串口范例1
于 2023-08-29 09:59:07 首次发布