串口调试问题

2019-03-24 13:19发布

请问下面这样的代码,为什么用串口调试助手调试的时候会显示十个“DM430-A Board UART Test...”
怎么不是一个,还有怎么改动才能让它值显示一次的字符串


********************************************************************/
#include <msp430x14x.h>
#include "Config.h"                     //开发板配置头文件,主要配置IO端口信息
//***********************************************************************
//               MSP430IO口初始化
//***********************************************************************
void Port_Init()
{
  LED8SEL  = 0x00;                      //设置IO口为普通I/O模式,此句可省
  LED8DIR  = 0xFF;                      //设置IO口方向为输出
  LED8PORT = 0xFF;                      //P2口初始设置为FF
  
  DATASEL  = 0x00;                      //设置IO口为普通I/O模式,此句可省
  DATADIR  = 0xFF;                      //设置IO口方向为输出
  DATAPORT = 0xFF;                      //P4口初始设置为FF
  
  CTRSEL  =  0x00;                      //设置IO口为普通I/O模式,此句可省
  CTRDIR |=  BIT3 + BIT4;               //设置IO口方向为输出,控制口在P63,P64
  CTRPORT =  0xFF;                      //P6口初始设置为FF  
}
//*************************************************************************
//               MSP430串口初始化
//*************************************************************************
void UART_Init()
{
  U0CTL|=SWRST + CHAR;                //复位SWRST,8位数据模式
  U0TCTL|=SSEL1;                      //SMCLK为串口时钟
  U0BR1=baud_h;                       //BRCLK=8MHZ,Baud=BRCLK/N
  U0BR0=baud_l;                       //N=UBR+(UxMCTL)/8
  U0MCTL=0x00;                        //微调寄存器为0,波特率9600bps
  ME1|=UTXE0;                         //UART0发送使能
  ME1|=URXE0;                         //UART0接收使能
  U0CTL&=~SWRST;
  IE1|=URXIE0;                        //接收中断使能位
  
  P3SEL|= BIT4 + BIT5;                //设置IO口为第二功能模式,启用UART功能
  P3DIR|= BIT4;                       //设置TXD0口方向为输出
}
//*************************************************************************
//              串口0发送数据函数
//*************************************************************************
void Send_Byte(uchar data)
{
  while(!(IFG1&UTXIFG0));          //发送寄存器空的时候发送数据
    U0TXBUF=data;
}
//*************************************************************************
//              串口0发送字符串函数
//*************************************************************************
void Print_Str(uchar *s)
{
    while(*s != '')
    {
        Send_Byte(*s++);
    }
}
//*************************************************************************
//               处理来自串口0的接收中断
//*************************************************************************
#pragma vector=UART0RX_VECTOR
__interrupt void UART0_RX_ISR(void)
{
  uchar data=0;
  data=U0RXBUF;                       //接收到的数据存起来
  Send_Byte(data);                    //将接收到的数据再发送出去
}
//*************************************************************************
//           主函数
//*************************************************************************
void main(void)
{
  WDT_Init();                         //看门狗设置
  Clock_Init();                       //系统时钟设置
  UART_Init();                        //串口设置初始化
  Close_LED();                        //关闭数码管显示
  Print_Str("DM430-A Board UART Test... ");             //发送字符串测试
  _EINT();                            //开中断
  while(1)                            //无限循环
    {
    }
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
sint27
1楼-- · 2019-03-24 18:05
怎么没人回复呢,是不是我的问题太笼统了,
我刚试了一下,把中断都关了,还是一样的结果,可以排除是中断的关系了
求解,为什么会产生多个的字符串呢
sint27
2楼-- · 2019-03-24 18:23
 精彩回答 2  元偷偷看……
sint27
3楼-- · 2019-03-24 19:16
后来我把串口初始化换了另一种版本,其他不变,结果收到的字符串变成4个了,那估计就是初始化的条件影响的吧
问题是我还是不知道怎么改才能使之接收到的字符串只有一个
下面是另一种串口初始化方法:

ME1 |= UTXE0 + URXE0;                     // Enable USART0 TXD/RXD
  UCTL0 |= CHAR;                            // 8-bit character
  UTCTL0 |= SSEL0;                          // UCLK = ACLK
  UBR00 = 0x03;                             // 32k/9600 - 3.41
  UBR10 = 0x00;                             //
  UMCTL0 = 0x4a;                            // Modulation
  UCTL0 &= ~SWRST;                          // Initialize USART state machine
  IE1 |= URXIE0 +  UTXIE0;                  // Enable USART0 RX/TX interrupt
sint27
4楼-- · 2019-03-24 23:15
今天心情大好,上来对以前问的问题做一下总结,
这个问题已得到解决
出错的原因是:开发板有个usb转串口的下载程序模块,每次上电后,它会复位几次,直到模块稳定。
             所以才有这个问题的产生。
解决方法:不适用usb转串口,直接使用串口连接就行了。
maylove
5楼-- · 2019-03-25 01:59
 精彩回答 2  元偷偷看……
洛川子
6楼-- · 2019-03-25 02:08

一周热门 更多>

相关问题

    相关文章