MSP430获取GPS模块的信息是乱码,求讨论

2019-07-15 16:17发布

我是在串口0接收并实现在串口助手上显示,按照下面的代码,我有两个问题:1、我设置了mystring数组的长度,为什么串口助手还是有很多数据;2、串口助手显示的数据为啥是乱码?
#include  <msp430x14x.h>

char mystring[50];
char i=0;
char j=0;
char stringNum=0;

//串口0初始化
void uart_init(void)
{
    P3SEL |= 0x30;                            // 选择P3.4和P3.5做UART0,P3.6.P3.7做UART1
    //P3SEL |= 0xC0;                            //将P3.6,P3.7选做UART1的通信端口
   
   
   
    UCTL0 |= CHAR;                            // 选择8位字符
   // UCTL1 |= CHAR;                            //选择8-bit字符
   
    UTCTL0 |= SSEL0;                          // 都使用UCLK = ACLK
   // UTCTL1 |= SSEL0;                          //驱动时钟选择ACLK
   
    UBR00 = 0x03;                             // 波特率9600
    UBR10 = 0x00;                              
    UMCTL0 = 0x4A;                            // 波特率校验,具体见430用户手册
   
//    UBR01 = 0x03;                             //波特率9600
//    UBR11 = 0x00;
//    UMCTL1 = 0x4A;                            //调整
   
    UCTL0 &= ~SWRST;                          // 初始化UART0状态机
   // UCTL1 &= ~SWRST;                          //初始化UART状态机
   
     ME1 |= UTXE0 + URXE0;                     // 使能USART0的发送和接受
   // ME2 |= UTXE1 + URXE1;                     //使能USART1的TXD和RXD
   
    IE1 |= URXIE0;                            // 使能USART0的接收中断
   // IE2 |= URXIE1;      
   
    P3DIR|=BIT4;
}

//延时函数
void delay1()
{
  for(int m=0;m<1000;m++)
  {
    ;
  }
}

/*----------------------串口发送-----------------------------------------*/

void PutString(char *ptr)//P3.4
{
      //while(*ptr != '')
      while(j<stringNum+1)
      {
            while (!(IFG1 & UTXIFG0));                // TX缓存空闲?
            TXBUF0 = *ptr++;
            j++;// 发送数据
      }
}

//串口0的中断,接收GPS定位信息
#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx (void)
{
     P6DIR=0Xff;
     P6OUT=0X00;           //在串口中断中显示小灯,判断是否进中断
   mystring=RXBUF0;
   if(mystring=='*')    //GPS信息格式中有*号位,到这位就可以了
   {
      stringNum=i+2;
      
      
   }
   i++;
   if(i==stringNum)
   {
      PutString(mystring);
   }
}


int main(void)
{
  WDTCTL=WDTPW+WDTHOLD;
  uart_init();
   delay1();
  _EINT();
  while(1);
}

捕获.PNG
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。