急啊~!还是串口问题,不知道原因,各位帮帮忙~! 在线等
我的5438接了16M的晶振,要实现简单的把温度传感器数据通过串口发送给PC观察,弄了好久,串口调试助手硬是收不到数据,时钟函数和UART如下void Init_Clock(void)
{
P11DIR = BIT0 | BIT1 | BIT2; // P11.1-2 to output direction
P11SEL |= BIT0 | BIT1 | BIT2; // P11.1-2 to output SMCLK,MCLK
// configure clock system
// P5SEL &= ~0x0C;
P7SEL |= 0x03;
UCSCTL6 &= ~XT1DRIVE_3;
UCSCTL6 |= XT1DRIVE_2;
UCSCTL6 &= ~(SMCLKOFF | XT1BYPASS | XT1OFF);
UCSCTL6 |= XTS;
UCSCTL3 |= SELREF_0 | FLLREFDIV_0;
UCSCTL4 &= 0x00;
UCSCTL5 &= 0x00;
do {
UCSCTL7 &= ~(XT1LFOFFG + XT1HFOFFG + DCOFFG);
SFRIFG1 &= ~OFIFG;
}while(SFRIFG1&OFIFG);
}
void Uart_Init(void)
{
P3SEL = 0x30; // P3.4,5 = USCI_A0 TXD/RXD
P3DIR |= BIT4;//bit4 tx
P3DIR &= ~BIT5; // bit5 rx
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL0 = UCMODE_0;//uart mode;
UCA0CTL0 &= ~UC7BIT; // 8 bit
UCA0CTL1 |= UCSSEL_2;// CLK = SMCLK
UCA0BR0 = 0x8a; // 16M/115200 (see User's Guide)
UCA0BR1 = 0x00; //
UCA0MCTL = UCBRS_7+UCBRF_0; // Modulation UCBRSx=7, UCBRFx=0
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA0IE |= UCTXIE;//UCRXIE; // Enable USCI_A1 RX interrupt
__bis_SR_register(LPM3_bits + GIE );// // Enter LPM3, interrupts enabled
// __no_operation(); // For debugger
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;//关狗
Init_Clock();
Uart_Init();
}
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
switch(__even_in_range(UCA0IV,4))
{
case 0:break; // Vector 0 - no interrupt
case 2: // Vector 2 - RXIFG
while (!(UCA0IFG&UCTXIFG)); // USCI_A1 TX buffer ready?
UCA0TXBUF = UCA0RXBUF; // TX -> RXed character
break;
case 4:
UCA0TXBUF = 0x00;
while (!(UCA0IFG&UCTXIFG)); // USCI_A1 TX buffer ready?
temture_h = temture & 0xff00;
UCA0TXBUF = temture >> 8;
while (!(UCA0IFG&UCTXIFG));
temture_l = temture & 0x00ff;
UCA0TXBUF = temture_l;
break; // Vector 4 - TXIFG
default: break;
}
}
请给我帮我看看,谢谢了,看有什么错误,怎么处理 用示波器 回复【1楼】dengting守望者
用示波器
-----------------------------------------------------------------------
谢谢,看程序有没有错误,比如各寄存器设置方面? 可能是没有产生TX中断 回复【3楼】liquan1010
可能是没有产生tx中断
-----------------------------------------------------------------------
有中断,我调试的时候能进入中断,并且UA0TXBUF的值也会变动 回复【5楼】hameyou
可能是没配置好吧
-----------------------------------------------------------------------
上面是我的程序,请问哪里要改,谢谢,请指出下 怎么没有人给出更好的解答呀? 各位大虾没不要吝啬赐教啊 好久的帖子,主函数没有while(1)? 串口调试不通需从硬件和软件两个方面找问题。硬件方面考虑电路及串口线。软件方面就要考虑你初始化的问题了。要善于使用调试助手来配合调试。给你一个串口的程序吧
#include "msp430x14x.h"
#define uchar unsigned char
void init(void);
uchar data1={'a','b','c','d','e'};
uchar buff;
uchar i=0,flag=0,k=0,n=0;
uchar j=0;
/*PC机发以Oxff开头,最后发送的数据为前几个数据的和结束的数据包,430发送字符串"abcde"给PC机*/
void main( void )
{
WDTCTL=WDTPW+WDTHOLD;
//BCSCTL1=0x07;
//BCSCTL2=0x88;
init();
_EINT();
while(1)
{
//TXBUF1=0xff;
//while(UTCTL1&0x01==0);
//i=0;
if(j==1)
{
//i=0;
for(n=0;n<6;n++)
{
TXBUF1=data1;
//for(i=0;i<10;i++);
while((UTCTL1&0x01)==0);
}
j=0;
}
}
}
void init(void)
{
UCTL1|=SWRST;
//UCTL1&=~SWRST;
UCTL1=0x10; //8 bit数据,1bit停止位,无校验
UBR01=0x03; //9600波特率
UBR11=0x00;
UMCTL1=0x4A; //位调整
UTCTL1=0x10; //选32768ACLK为时钟源
ME2|=0x30; //发送接受均允许
//ME2|=UTXE0+URXE0; //发送接受均允许
//P3SEL=0x31; //设置端口。P3.0,P3.4,P3.5
//ME2|=0x20;
P3SEL=0xC0;
P3DIR=0x40; // P3.0,P3.4为输出
//P3OUT|=BIT0; //设置75176的DE为1,表示使能发送。
UCTL1&=~SWRST;
IE2|=URXIE1; //中断使能接收
//IE2|=UTXIE1; //中断使能发送
}
#pragma vector=UART1RX_VECTOR
__interrupt void UART1RX(void)
{
// if(!RXERR)
//{
if(flag==0)
{
if(RXBUF1==0xff)
{
flag=1;
i=0;
}
}
else
{
buff=RXBUF1;
if(i>0)
{
k+=buff;
}
//i++;
//k+=buff;
if(buff==k)
{
flag=0;
j=1;
k=0;
}
i++;
}
//}
} 430串口例程ourdev_719635NEL1AL.txt(文件大小:2K) (原文件名:232.c.txt)
页:
[1]