SCREA 发表于 2015-12-10 09:47:11

求助:MSP430 波特率小数怎么运算啊

时钟:32768   
32678/9600 = 3.4133333333333333333333333333333
整数波特率32768/9600 = 3
小数: 0.41333333*8 = 3.3066666666666666666666666666667   四舍五入取 3,但测试结果还是不成,必须0x53才可以,其他的时间长了都不行。

求助啊。

gfy200866 发表于 2015-12-10 10:22:43

可以参考一下430文档上面的设置。除了需要设置UCBRX ,还需要在MCTL中设置UCBRSX和UCBRFX。

gfy200866 发表于 2015-12-10 10:24:19

这个是文档上面UCOS16 = 0时,波特率的设置,你参考下。

SCREA 发表于 2015-12-10 11:32:53

gfy200866 发表于 2015-12-10 10:24
这个是文档上面UCOS16 = 0时,波特率的设置,你参考下。

这个文档看了几十遍了。

就是那个小数,按照手册上的实际会出错。不信,你算下32768下9600,那个小数寄存器怎么会是0x53(实际测出来必须是0x53)

gfy200866 发表于 2015-12-10 13:21:30

是不是软件没设置好,最好把程序贴出来让大家看看

richyhuang 发表于 2015-12-10 15:07:42

你是哪个芯片啊,跟我们的寄存器不一样吗,小数是在高位的啊.

SCREA 发表于 2015-12-10 16:35:14

本帖最后由 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]
查看完整版本: 求助:MSP430 波特率小数怎么运算啊