<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x
    查看: 1704|回復: 0
    打印 上一主題 下一主題

    【飛控開發基礎3】開源編隊無人機-串口(基礎收發)

    [復制鏈接]
    跳轉到指定樓層
    樓主
    發表于 2022-7-15 11:35:20 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
    關鍵詞: 開源 , 編隊 , 無人機 , 串口 , 基礎收發
    COCOFLY教程
    ——瘋殼·無人機·系列
    串口(基礎收發)




        圖1


        一、串口簡介

        在嵌入式開發領域講的串口通常指的是 UART,UART 即為通用異步收發傳輸器(Universal Asynchronous Receiver/Transmitter)。是一種通用串行數據總線, 用于異步通信。該總線雙向通信,可以實現全雙工傳輸和接收。
        UART 常常用于兩個單片機之間進行數據傳輸,如下圖所示。

       
        圖2
        其通信過程如下圖所示。


    圖3
        STM32F103 提供了 3 路串口,支持同步單線通信和半雙工單線通信、支持LIN、支持調制解調器操作、智能卡協議和 IrDA SIR ENDEC 規范、具有 DMA 等?膳渲脼榇诘囊_是有限制的,所以在設計硬件電路時需要注意哪些引腳可以配置為串口引腳,如下表所示。
        串口管腳映射

       
        圖4



        二、UART 串口通訊協議

        串口通訊過程中一幀數據包含了起始位、數據位、停止位以及可有可無的奇偶校驗位,除了需要知道這些概念外,還需要理解波特率的概念。
        (1)起始位,當未有數據發送時,數據線處于邏輯“1”狀態;先發出一個邏輯“0”信號,表示開始傳輸字符;
        (2)數據位,緊接著起始位之后的 8 個數據。從最低位開始傳送;
        (3)奇偶校驗位,一般不用;
        (4)停止位,一般為 1 位(也可以是 1.5 位或者 2 位),為高電平。作為結束的標志;
        (5)波特率,波特率表示每秒鐘傳送的碼元符號的個數,是衡量數據傳送速率的指標。
        如下圖所示,為一幀串口數據的幀組成。


    圖5
        三、UART 串口寄存器

        STM32F103 與串口相關的寄存器眾多,這里只講解重要的幾個寄存器。
        (1)USART_SR:狀態寄存器,如下圖所示:


    圖6
        需要了解的位有:TXE:發送寄存器為空;TC:發送完成;RXNE:讀取數據寄存器不為空;ORE:上溢錯誤;FE:幀錯誤;PE:奇偶校驗錯誤。
        (2)USART_DR:該寄存器只有低 8 位有效,而且具有讀寫操作,有關該寄存器中的數據是要發送的數據還是接受到的數據取決于執行的操作是“讀取” 還是“寫入”。 如下圖所示:

       
        圖7

        (3)USART_BRR:波特率寄存器,用于設置串口通訊的波特率,如下圖所示:

       
        圖8
        其中在寄存器中會設定相應的值,DIV_Mantissa[11:0]用來設定分頻系數的整數部分,DIV_Fraction[3,0]用來設定分頻系數的小數部分。
        串口的波特率計算公式如下:

         
        公式1

        這里的 fPCLKx(x=1、2)是給外設的時鐘(PCLK1 用于 USART2、3、4、5, PCLK2 用于USART1,這里 STM32F103CBT6 沒有的串口就不講解)。USARTDIV是一個無符號的浮點數。假設串口波特率為 115200,使用的是串口 1,串口的時鐘為 PCLK2 的時鐘(即 APB2 總線的時鐘)為 72MHz,如下圖所示。

       
        圖9
        根據公式可得:
        USARTDIV=72000000/(115200*16)=39.0625

        所以小數部分 DIV_Fraction=0.0625*16=1=0x01。


        整數部分 DIV_Mantissa=39=0x27。

        四、串口基礎收發實驗

        串口收發實驗使用 STM32 的串口 1 即 UART1,通過串口模塊連接電腦,使用串口調試助手來進行通信,STM32 收到數據后把收到的數據在發回電腦。串口引腳如下圖所示:

         
        圖10
        兩個串口引腳分別與 PA9 與 PA10 引腳相連,那么我們就對 PA9 與 PA10 引腳以及串口模塊進行配置,配置代碼(通過調用官方庫)。
        代碼編寫的思路如下:

        編程思路

       
        表1
        串口初始化代碼如下:

       
        圖11
        串口中斷函數代碼如下:

       
        圖12
        設置串口 1 的波特率為 115200,代碼如下:

       
        圖13

        保存、編譯、下載代碼,把飛控上的 USART1 上接的視覺模塊先拔下來, 然后接上 USB 轉串口模塊,如下圖所示:

       
        圖14
        然后在把 USB 轉串模塊插到電腦的 USB 口,打開電腦端的串口調試助手, 找到對應的 COM 口(前提是安裝了 USB 轉串口驅動),設置波特率為 115200, 打開,在串口調試助手的輸入框內輸入“www.fengke.club”,點發送,然后可以看到串口調試助手收到來自 STM32 的回發信息,也是“www.fengke.club”,如下圖所示。

       
        圖15





    更多完整學習資料和對應開源套件,請登陸官網:“瘋殼”

        文件下載請點擊: 【3】串口(基礎收發).pdf (889.23 KB)

    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規則

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷