您好:
我在用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++;
}
}