TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP430FR5992波特率设置

最近在使用fr5992时,需要用到1200的波特率,根据文档设置完以后,发现串口接收不到任何数据,但是用官方的例程可以,说明硬件没有问题,不清楚哪里设置出了问题,源码如下,

#include <msp430fr5992.h>

char RecvBuf[20] = {0};
int dataLen = 0;
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
PM5CTL0 &= ~LOCKLPM5;
P2SEL1 &= ~( BIT5 + BIT6 );//TX,RX
P2SEL0 |= ( BIT5 + BIT6 );//TX,RX

UCA1CTLW0 |= UCSWRST; // **Put state machine in reset** UCA1CTLW0 |= UCSSEL__ACLK; // CLK = ACLK //Baudrate = 1200
//BRCLK BaudRate UCOS16 UCBRx UCBRFx UCBRSx(2) //32768 1200 1 1 11 0x25 UCA1BRW = 1;
UCA1MCTLW |= UCOS16 | UCBRF_11|0x2500; UCA1CTLW0 &= ~UCSWRST; // **Initialize USCI state machine**
UCA1IE |= UCRXIE; // Enable USCI_A1 RX interrupt
__bis_SR_register(GIE);
while(1)
_NOP();
return 0;
}

void Uart1_PutChar(char data)
{
while (!(UCA1IFG & UCTXIFG));
UCA1TXBUF = data;
}

/******************************************************************************
函数: void USCI_A1_ISR(void)
功能: 串口1中断处理函数
参数:返回值:
说明:
******************************************************************************/

#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
switch( UCA1IV )
{
case 0:
break; // Vector 0 – no interrupt
case 2: // Vector 2 – RXIFG
{ dataLen = dataLen % 20;
RecvBuf[dataLen] = UCA1RXBUF; }
break;
case 4:
break; // Vector 4 – TXIFG
default: break; }
}

灰小子:

用这个工具http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSP430BaudRateConverter/index.html

Ruijie Li:

回复 灰小子:

可是我程序中的配置和那个工具算出来的参数是一致的

HG:

你在哪里看到的官方1200波特率的程序的,贴个链接呢

发送可以么?

Ruijie Li:

回复 HG:

我说的官方例程不是说1200波特率的例程,而是初始化时钟后的9600波特率的例程,我只是验证硬件没有问题。现在问题已经解决了,重新初始化了ACLK时钟源,按新的频率去设置波特率,不初始化时钟,示波器测量ACLK默认频率不是32768,而是37.6K左右。所以按照32768去设置波特率一直不对。

赞(0)
未经允许不得转载:TI中文支持网 » MSP430FR5992波特率设置
分享到: 更多 (0)