This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

在调试232串口中遇到的问题

Other Parts Discussed in Thread: MSP430F169

您好:

  我在用MSP430F169调试串口的过程中发现没有办法控制P3.4口的输出,P3.4口的输出一直是高电平。

附件中是我的原理图,169我只连了LFXT1,接32.768K的晶振。XT2悬空。请帮忙看看问题可能在哪里。

以下是我的初始化代码:

int main( void )

{

 // Stop watchdog timer to prevent time out reset  

 WDTCTL = WDTPW + WDTHOLD;

 InitSys();           //初始化

 unsigned char io_no[27]={0x00,0xff,0xb6,0xc1,0x49,0x00,0x4F,0x00,0xbf,

 0xda,0xb2,0xbb,0xb5,0xc8,0xd3,0xda,0xd0,0xb4,0x49,0x00,0x4F,0x00,0xbf,0xda,0x0d,0x03,0xaa};//读IO口不等于写IO口

 SendUart0(io_no,27);

}

void InitSys()

{

  Clk_Init();        //选择MCLK、SMCLK为DCOCLK

  Port_Init();

  InitRS232();

  _EINT();                                //打开全局中断控制,若不需要打开,可以屏蔽本句

}

void Clk_Init(void)//系统时间的振荡器的设置。

{

 unsigned char iq0;

 DCOCTL|=DCO2+DCO1+DCO0;        //DCO2-DCO0=111,MOD4-MOD0=00000;

 BCSCTL1 = 0x87;                //XT2OFF=1,XTS=0  

 do

 {

   IFG1 &= ~OFIFG; // 清除振荡器失效标志

   for (iq0 = 0xFF; iq0 > 0; iq0--);       // 延时,等待XT1起振

 }

 while ((IFG1 & OFIFG) != 0); // 判断XT1是否起振

 BCSCTL2 = 0x00;                //MCLK=LFXT1CLK  SMCLK=DCOCLK;

 IE1 &= ~OFIE;                  //不允许振荡器失效中断

}

void Port_Init()

{

 /**************************************************************************

 P3.0-P3.3用于控制屏幕

 RD--P3.0  WR--P3.1  RS--P3.2  CS--CE--P3.3  UTXD0--P34  URXD0--P35

 **************************************************************************/

 P3SEL = 0xF0;//P3.0,P3.1,P3.2,P3.3为IO口;

              //P3.4, P3.5为第二功能

 P3DIR = 0x5f;//P3.0,P3.1,P3.2,P3.3,为屏幕的控制信号引脚

              //UTXD0为输出,URXD0为输入

}

void InitRS232()

{

 P3SEL|=BIT5+BIT4;//P3.4 P3.5设置为第二功能

 P3DIR|=UTXD0;      //P3.4设置为输出

 U1CTL=CHAR+SWRST;      //1bit停止位,8bit数据,UART异步模式,地址位多机协议

 //U0CTL=CHAR+MM+SWRST;   //1bit停止位,8bit数据,UART异步模式,地址位多机协议

 U0RCTL&=~URXWIE;       //所有接收到的字符都能够置位URXIFG

 U0TCTL|=SSEL1+SSEL0;         //选择外部时钟UCLK1

 //设置波特率9600bit/s

 U0BR1=0x00;            //32768/9600=3.413

 U0BR0=0x03;

 U0MCTL=0x4a;           //0.413*8=3

 U0CTL&=~SWRST;

 ME1|=UTXE0+URXE0;      //打开模块USART1,接收允许,发送允许

 IE1|=URXIE0;           //打开USART1接收中断

}

void SendUart0(unsigned char *pBuffer,unsigned char n_byte)

{

  unsigned char q0;

for(q0=0;q0!=n_byte;q0++)

{

while((IFG1&UTXIFG0)==0); //查询是否发送完毕

U0TXBUF=*pBuffer;

pBuffer++;

}

}

在调试232串口中遇到的问题.zip