حالت خواب mc60 و uart

سلام وقت بخیر
وقتی ماژول با دستور Ql_SleepEnable وارد حالت خواب میشه، دیتای دریافتی از usart دچار مشکل میشه و بعضی وقت ها دریافت میکنه و بعضی وقت ها چیزی دریافت نمیکنه.
چطور میشه این مشکل رو حل کرد که هر وقت دیتایی اومد به درستی دریافتش کنه؟

سلام
از چه کنترلری برای ارتباط با ماژول و دریافت اطلاعات پورت سریال استفاده میکنید؟
PC, AVR, ARM,PIC,PLC & …
نرم افزار توسعه دهنده کدتون چیه؟
KEIL, CUBE IDE, ATMEL STUDIO. LABVIEW, MATLAB & …
سپس بفرمائید کانفیگ (پیکربندی) پورت سریالتون دقیقا چیه و از چه تکنیکی در حال ارتباط هستید
Polling , interrupt, DMA & …
در انتها هم بفرمائید ماژول و کنترلر رو خودتون ساختید یا آماده خریداری کردید تا بشه بهتر راهنمایی کرد.

سلام
برای ارتباط، مبدل ch340 هست که با نرم افزار ترمینال توی سیستم باهاش ارتباط میگیرم
همونطور که اشاره شد، از دستورات opencpu استفاده میکنم و میکروی جدا برای ارتباط ندارم و نرم افزار هم اکلیپس هست
برد آماده سیسوگ و چند تا برد خودم زدم، تفاوتی توی برد نیست و همه یه جوره رفتارشون
کلا توی اسلیپ رفتارش نامعلوم میشه و بعضی وقت ها میگیره دیتارو و اکثرا نمیگیره

برای تست متن طولانی پرینت کردم، وقتی توی حالت عادی پرینت انجام میشه به سرعت متن چاپ میشه
ولی وقتی توی اسلیپ پرینت میشه خیلی کند این عمل انجام میشه


void proc_subtask1(s32 taskId)
{
    ST_MSG msg;

#if UART_ENABLE > 0
    Ql_UART_Register(UART_PORT1, CallBack_UART_Hdlr, NULL);
    Ql_UART_Open(UART_PORT1, 115200, FC_NONE);
#endif



    APP_DEBUG("\r\n<-- OpenCPU: subtask -->\r\n")

    while (TRUE)
    {
        Ql_OS_GetMessage(&msg);
        switch(msg.message)
        {
            default:
                break;
        }
    }
}
void CallBack_UART_Hdlr(Enum_SerialPort port, Enum_UARTEventType msg, bool level, void* customizedPara)
{
    switch (msg)
    {
    case EVENT_UART_READY_TO_READ:
        {
           s32 totalBytes = ReadSerialPort(port, m_RxBuf_Uart, sizeof(m_RxBuf_Uart));
           if (totalBytes > 0)
           {
        	   proc_handle((char*)m_RxBuf_Uart,totalBytes);
           }
           break;
        }
    case EVENT_UART_READY_TO_WRITE:
        break;
    default:
        break;
    }
}
s32 ReadSerialPort(Enum_SerialPort port, /*[out]*/unsigned char* pBuffer, /*[in]*/u32 bufLen)
{
    s32 rdLen = 0;
    s32 rdTotalLen = 0;
    if (NULL == pBuffer || 0 == bufLen)
    {
        return -1;
    }
    Ql_memset(pBuffer, 0x0, bufLen);
    while (1)
    {
        rdLen = Ql_UART_Read(port, pBuffer + rdTotalLen, bufLen - rdTotalLen);
        if (rdLen <= 0)  // All data is read out, or Serial Port Error!
        {
            break;
        }
        rdTotalLen += rdLen;
        // Continue to read...
    }
    if (rdLen < 0) // Serial Port Error!
    {
        MAIN_DEBUG("<--Fail to read from port[%d]-->\r\n", port);
        return -99;
    }
    return rdTotalLen;
}

از Sleep خارجش کنید !
داخل داکیومنت های کویکتل ذکر شده که توی مد sleep روی پرفرال هایی مانند GNSS و یا UART و… حساب نکنید.

Quectel_MC60_Hardware_Design_V1.3.pdf (2.2 مگابایت)

3 پسندیده