求助:MSP430 波特率小数怎么运算啊
时钟:3276832678/9600 = 3.4133333333333333333333333333333
整数波特率32768/9600 = 3
小数: 0.41333333*8 = 3.3066666666666666666666666666667 四舍五入取 3,但测试结果还是不成,必须0x53才可以,其他的时间长了都不行。
求助啊。 可以参考一下430文档上面的设置。除了需要设置UCBRX ,还需要在MCTL中设置UCBRSX和UCBRFX。 这个是文档上面UCOS16 = 0时,波特率的设置,你参考下。 gfy200866 发表于 2015-12-10 10:24
这个是文档上面UCOS16 = 0时,波特率的设置,你参考下。
这个文档看了几十遍了。
就是那个小数,按照手册上的实际会出错。不信,你算下32768下9600,那个小数寄存器怎么会是0x53(实际测出来必须是0x53) 是不是软件没设置好,最好把程序贴出来让大家看看 你是哪个芯片啊,跟我们的寄存器不一样吗,小数是在高位的啊.
本帖最后由 SCREA 于 2015-12-10 16:36 编辑
gfy200866 发表于 2015-12-10 13:21
是不是软件没设置好,最好把程序贴出来让大家看看
P2SEL |= (BIT2 + BIT3); // P2.2,P2.3 = USCI_A2 RXD,TXD
PMAP_CONTROL->PMAPKEYID = PMAPKEY;
P2MAP->P2MAP23 |=(PM_UCA2RXD | ((u16)PM_UCA2TXD<<8));
PMAP_CONTROL->PMAPKEYID = 0; //用完记得Lock上
P2DIR &= ~BIT2;P2REN |= BIT2;P1OUT |= BIT2;
P2DIR |=BIT3;P2DS|= BIT3;P1OUT |= BIT3;
UART2->CTLW0 |= UCSWRST;
#if 0
UART2->CTLW0 |= UCSSEL_1 |UCMODE0;
// UART2->CTLW0 |= UCSSEL_1 |UCMODE0 |UCPEN | UCPAR ; //Dormant、ACLK、IDLE,,带偶检验
UART2->BRW = 3; //32768Hz/9600=3.41 (see User's Guide)
UART2->MCTLW= 0x5300;
#elif 1
UART2->CTLW0 |= UCSSEL_2 ; //8M情况下,9600波特率
UART2->BRW = 138;
UART2->MCTLW= 0xb700;
#endif
UART2->CTLW0 &= ~UCSWRST; //关闭复位
UART2->IE |= UCRXIE; // Enable USCI_A2 RX interrupt
============================
我第一次用MSP430,看匿名结构体不习惯,自己全部 用结构体映射 硬件地址了,望不要指着代码骂娘啊
页:
[1]