回覆列表
  • 1 # 使用者491520451206

    HAL_UART_RECEIVE (&HAL串列埠控制代碼,陣列地址,接收字元數(2) ,最長等待時間);

    這種?

    執行此句之後,執行緒會阻塞,時間到之前收到2個字元,就返回ok, 沒收到或收到一個就返回超時(還有其他返回,都不對),ok字元就在陣列了。

    缺點是你要知道,大概什麼時候會收到(比如說詢問,答覆),不然只能一直卡這。或設個超時不斷執行這句,但有可能運氣不好一直收不完整。

    要不就中斷吧,記得配置。

    HAL_UART_RECEIVE_IT (&HAL串列埠控制代碼,陣列地址,接收字元數(2) );

    執行這句之後,會立刻返回,然後執行後續語句。在收到2個字元之後,字元會存在數組裡,並執行“收完回撥”(要自己補充,以_it.c那檔案中的入口跟蹤下就知道是什麼形式了,是個_weak修飾的,要自己重寫掉)用來通知你收到,或者判斷對不對。當然如果在不合適的時間啟動,可能會一直收不到,或者收到2個但是錯位了,如不能確定,只好改一次收一個就回調判斷一下了,自己填入陣列了。

    再有就有Dma了,直接將串列埠指向一個DMA,收到兩個產生DMA中斷再回調。和上面差不多情況。不過兩個資料用Dma也有點浪費。

    不用Hal的話,就是一直檢視有沒收到,收到就填到陣列。或者等串列埠中斷了,再看下是否是收到中斷,然後填入陣列返回。

  • 中秋節和大豐收的關聯?
  • 有關星空的網名和句子都有哪些?