OSAL-UART

官方已經(jīng)將驅(qū)動(dòng)寫(xiě)好了,只需要簡(jiǎn)單的添加就可以了。
下面簡(jiǎn)單的說(shuō)一下修改哪些:
1、 編寫(xiě)了一個(gè)函數(shù)

#include "hal_uart.h"
#include "npi.h"
#define uint8_t unsigned char
static void npi_serial_call_back(uint8_t port,uint8_t events)
{
    (void)port;

    if (events & (HAL_UART_RX_TIMEOUT | HAL_UART_RX_FULL))
    {
        uint8_t num_bytes=0;
        num_bytes = NPI_RxBufLen();
        if ( 0 == num_bytes )
        {
            return;
        }
        else
        {
            uint8_t *buffer = osal_mem_alloc(num_bytes);
            if (buffer)
            {
                NPI_ReadTransport(buffer,num_bytes);

                NPI_WriteTransport(buffer,num_bytes);
                osal_mem_free(buffer);
            }


        }
    }
}

2、 添加初始化函數(shù),同時(shí)通過(guò)串口打印SimpleBLETest_Init\r\n


image.png

3、 配置串口


image.png

4、 將流控關(guān)閉


image.png

//========================================================
簡(jiǎn)單的分析一下代碼:
1、串口數(shù)據(jù)哪里來(lái)?

1.1、Hal_ProcessPoll查詢


image.png

1.2、HalUARTPoll


image.png

1.3、回調(diào)剛剛我們寫(xiě)的函數(shù)npi_serial_call_back

static void HalUARTPollDMA(void)
{
  uint8 evt = 0;
  uint16 cnt;



  if (!HAL_UART_DMA_NEW_RX_BYTE(dmaCfg.rxHead))
  {
    if (HAL_UART_DMA_NEW_RX_BYTE(uartRxBug))
    {
      do {
        HAL_UART_RX_IDX_T_INCR(dmaCfg.rxHead);
      } while (!HAL_UART_DMA_NEW_RX_BYTE(dmaCfg.rxHead));

      uartRxBug = dmaCfg.rxHead;
      dmaCfg.rxTail = dmaCfg.rxHead;
    }
    HAL_UART_RX_IDX_T_INCR(uartRxBug);
  }

  cnt = HalUARTRxAvailDMA();  // Wait to call until after the above DMA Rx bug work-around.


  if (cnt != 0)
  {
    evt = HAL_UART_RX_TIMEOUT;
  }


  if (cnt >= HAL_UART_DMA_FULL)
  {
    evt |= HAL_UART_RX_FULL;
  }
  else if (cnt >= HAL_UART_DMA_HIGH)
  {
    evt |= HAL_UART_RX_ABOUT_FULL;

    if (!DMA_PM && (UxUCR & UCR_FLOW))
    {
      HAL_UART_DMA_CLR_RDY_OUT();  // Disable Rx flow.
    }
  }

  if (dmaCfg.txMT)
  {
    dmaCfg.txMT = FALSE;
    evt |= HAL_UART_TX_EMPTY;
  }

  if ((evt != 0) && (dmaCfg.uartCB != NULL))
  {
    dmaCfg.uartCB(HAL_UART_DMA-1, evt);//回調(diào)剛剛我們寫(xiě)的函數(shù)npi_serial_call_back
  }

  if (DMA_PM && (dmaRdyDly == 0) && !HalUARTBusyDMA())
  {
    HAL_UART_DMA_CLR_RDY_OUT();
  }
}


1.4、 在回調(diào)函數(shù)獲取串口數(shù)據(jù),然后回顯。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容