对于MSP430系列微控制器,波特率的计算在其用户手册中有详细说明。为了简化这一过程,您可以使用官方提供的软件工具进行计算:点击这里访问工具。
MSP430的波特率计算过程在各类文档中都有提及,但实际操作中可能会遇到一些困惑。为了更好地理解这个过程,可以参考官方指南。
假设使用1MHz的时钟频率并设置9600波特率,则计算步骤如下:
计算N值:
[
N = \frac{fBRCLK}{Baudrate} = \frac{1\text{MHz}}{9600} = 104.1667
]
判断是否启用过采样模式:
当N值大于16时,建议启用过采样模式(设置UCOS16=1
)。
在低频波特率模式下(UCOS16=0
),波特率分频寄存器UCBRx和小数部分调制寄存器UCBRSx的计算如下:
例如,对于1MHz时钟和9600波特率:
在过采样模式下(UCOS16=1
),波特率分频寄存器UCBRx和一级调制寄存器UCBRFx的计算如下:
例如,对于4MHz时钟和9600波特率:
为了更好地理解上述公式的应用,以下是一个简单的初始化MSP430 UART串口的代码示例:
c#define CPU_F ( (double) 8000000)
#define delay_us( x ) __delay_cycles( (long) (CPU_F * (double) x / 1000000.0) )
#define delay_ms( x ) __delay_cycles( (long) (CPU_F * (double) x / 1000.0) )
#define baud 9600 /* 设置波特率 */
#define baud_setting (uint) ( (ulong) CPU_F / ( (ulong) baud) ) /* 波特率计算公式 */
#define baud_h (uchar) (baud_setting >> 8) /* 提取高位 */
#define baud_l (uchar) (baud_setting) /* 低位 */
void initUSART(void)
{
P1SEL = BIT1 + BIT2; // P1.1 = RXD, P1.2=TXD
P1SEL2 = BIT1 + BIT2; // P1.1 = RXD, P1.2=TXD
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = baud_l; // 8MHz 9600
UCA0BR1 = baud_h; // 8MHz 9600
UCA0MCTL = UCBRS1; // 调制UCBRSx
UCA0CTL1 &= ~UCSWRST; // 初始化USCI状态机
IE2 |= UCA0RXIE; // 启用USCI_A0 RX中断
}
通过以上方法,您可以轻松计算并设置MSP430的波特率,使其与目标通信设备准确匹配。
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!