一個STM32F10x 計算傳輸速率的宏(來自buickbuick )

來源:互聯網
上載者:User

STM32庫裡面設定usart的傳輸速率是又乘又除, 初始化的代碼可以直接用, 但要提高代碼的效率, 
就要直接填分數分頻值的立即數進入BRR寄存器, 改變傳輸速率

所以寫了下面的宏, 希望大家有用

/* 傳輸速率的分數分頻值宏 */
//clk: usart時鐘, bps: 需設定的傳輸速率
#define M_USART_BAUD_RATE(_clk,_bps)  /
  ((u16)(((_clk / _bps) & 0xFFF0) + /
        ((((((_clk / 1600) - (_clk / _bps / 16) * (_bps / 100)) /
          * 160 / (_bps / 100)) + 5) / 10) & 0xF)))

用法:
    //時鐘是72MHz, 傳輸速率57600, 修改usart1的傳輸速率
    USART1->BRR = M_USART_BAUD_RATE(72000000,57600);//值為0x4E2
    //時鐘是64MHz, 傳輸速率57600, 修改usart1的傳輸速率
    USART1->BRR = M_USART_BAUD_RATE(64000000,57600);//值為0x457

 

特別提醒,使用USART1可以使用系統頻率,當這個傳輸速率宏在USART2和USART3使用時,應將系統時鐘除於2。

如://時鐘是72MHz, 傳輸速率57600, 修改usart2的傳輸速率
    USART2->BRR = M_USART_BAUD_RATE(36000000,57600);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.