BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #12128同步于 2012/4/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖

msp430F149 波特率可以达到38400吗?

wangzhezq
2012/4/27镜像同步3 回复
我用430和电脑通过串口通信,在PC上用串口调试助手给430发七个字节,然后再由430传回给PC显示在串口调试助手上(已经测试过由430向PC发数据是没有问题的),可以看到当波特率高于9600时就会丢几个字节,由于对端芯片要求38400的波特率,有什么办法可以达到这个标准呢? 程序: void HAL_UART_UART0Init(void) { U0CTL = 0x01; U0CTL += CHAR; //发送只有1位停止位,发送数据为8位 U0TCTL = 0x00; U0TCTL += SSEL1; //波特率发生器选择SMCLK,8M晶振8分频为1M UBR0_0 = 0x26; //1M/38400=26.39,波特率为38400 UBR1_0 = 0x00; UMCTL_0 = 0x4A; U0CTL &= ~SWRST; // ME1 |= URXE0 +UTXE0; //使能UART0的TXD和RXD IE1 |= URXIE0; //使能UART0的RX中断 IE1 |= UTXIE0; //使能UART0的TX中断 P3SEL |= BIT4 +BIT5; //设置P3.4和P3.5为UART P3DIR |= BIT4; //P3.4为输出管脚 } 串口中断: #pragma vector = UART0RX_VECTOR __interrupt void UART0_RX_ISR(void) { BYTE bData; bData = RXBUF0; // Read the received data test2[ii++] = bData; if(ii==7){ii = 0;} } main里就是隔几秒循环输出test2里的值,求高手指点怎样可以使波特率达到38400,还是我的设置有什么问题?
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
mc34机器人#1 · 2012/4/30
UMCTL_0 该等于0x00? 此时各bit最大误差: -1.76% UMCTL_0 = 0x4A;没算过
buptzym机器人#2 · 2012/5/1
误差是一方面,我觉得楼主的中断程序写的有点冗杂,要知道38400的中断对149来说已然有些困难了
afeionline机器人#3 · 2012/5/6
虽然没用过msp430,但我肯定115200都没问题,普通的8051单片机都可以达到的。。。误差在2%以内基本不会出现误码率的