我有以下代码来设置 EVM-fr6043的时钟和波特率:
//配置 CS 模块
//通过 DCOCLK 使 MCLK = 16MHz
// SMCLK = 8MHz 来自 DCOCLK
// ACLK = LFXTCLK 应具有32.768KHz
//解锁 CS 寄存器
CSCTL0_H = CSKEY >> 8;
//将 DCO 设置为8MHz
CSCTL1 = DCORSEL | DCOFSEL_3;
//配置时钟分频器所有分频器
CSCTL3 =(DIVA__1 | DIVS__1 | DIVM__1);
//设置 SMCLK=MCLK=DCO、ACLK=LFXTCLK
CSCTL2 = SELM__LFXTCLK | SELS__DCOCLK | SELM__DCOCLK;
CSCTL4 |=(LFXTDRIVE_3);
CSCTL4 &=~(LFXTOFF);
CSCTL0_H = 0;
// UART 模式的 GPIO 配置
P1SEL0 |=(BIT2 | BIT3);
P1SEL1 &=~(BIT2 | BIT3);
//针对 UART 模式配置 USCI_A0,8位数据,1个停止位
//将 eUSCI 置于复位状态
UCA1CTLW0 = UCSWRST;
// CLK = SMCLK
UCA1CTLW0 |= UCSSEL__SMCLK;
//对于 BRCLK=SMCLK=8MHz、并且波特率=230400 (参见 UG)
UCA1BRW = 2;
UCA1MCTLW = 0xbb21;
//从复位中释放
UCA1CTLW0 &=~μ H UCSWRST;
//禁用 GPIO 上电默认高阻抗模式以激活
//先前配置的端口设置
PM5CTL0 &=~μ A LOCKLPM5;
//将字符串打印到 UART 的函数
空
OUTC (特性)
{
while (!(UCA1IFG 和 UCTXIFG))
;
UCA1TXBUF =通道;
}
空
outs(const char *str)
{
用于(;* str;str++)
outc(*str);
}
我尝试使用高于115200的波特率、在上例中为230400。
UCA1BRW 和 UCA1MCTLW 值取自数据表 slau367p.pdf (https://www.ti.com/lit/ug/slau367p/slau367p.pdf)。
使用 outs()函数,我可以使用数据表中的值打印115200和以下的字符串,但如果我尝试使用230400或460800,控制台会将打印的字符显示为其他一些字符。
如果需要高于 115200波特率、是否应该设置任何其他设置?