一個(gè)STM32F10x 計(jì)算波特率的宏
STM32庫(kù)里面設(shè)置usart的波特率是又乘又除, 初始化的代碼可以直接用, 但要提高代碼的效率,
就要直接填分?jǐn)?shù)分頻值的立即數(shù)進(jìn)入BRR寄存器, 改變波特率
所以寫了下面的宏, 希望大家有用
/* 波特率的分?jǐn)?shù)分頻值宏 */
//clk: usart時(shí)鐘, bps: 需設(shè)置的波特率
#define M_USART_BAUD_RATE(_clk,_bps) /
((u16)(((_clk / _bps) & 0xFFF0) + /
((((((_clk / 1600) - (_clk / _bps / 16) * (_bps / 100)) /
* 160 / (_bps / 100)) + 5) / 10) & 0xF)))
用法:
//時(shí)鐘是72MHz, 波特率57600, 修改usart1的波特率
USART1->BRR = M_USART_BAUD_RATE(72000000,57600);//值為0x4E2
//時(shí)鐘是64MHz, 波特率57600, 修改usart1的波特率
USART1->BRR = M_USART_BAUD_RATE(64000000,57600);//值為0x457
特別提醒,使用USART1可以使用系統(tǒng)頻率,當(dāng)這個(gè)波特率宏在USART2和USART3使用時(shí),應(yīng)將系統(tǒng)時(shí)鐘除于2。
如://時(shí)鐘是72MHz, 波特率57600, 修改usart2的波特率
USART2->BRR = M_USART_BAUD_RATE(36000000,57600);