我的串口配置程序如下:
void Uart0_Init(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD
P3DIR |= 0x10; // P3.4 output direction
BCSCTL1&= ~XTS; // LFXT1工作在低频模式
BCSCTL2 |= SELM1+SELM0; // MCLK = LFXT1 (safe)
UCTL0 |= CHAR; // 8-bit character
UTCTL0 |= SSEL1; // 波特率发生源为SMCLK
UBR00 = 0x01; // UBR10 = 0x00; //
UMCTL0 = 0x00; // UCTL0 &= ~SWRST;
ME2 |= UTXE0 + URXE0; // Enabled USART0 TXD/RXD
IE2 |= URXIE0; // Enabled USART0 RX interrupt
}
然后 串口的数据就是发不出来,然后我把这句“BCSCTL1&= ~XTS;”改成“BCSCTL1|= XTS;”数据是可以发出去了,但发送不同长度的数据串口的波特率在示波器上显示不同,不知道什么原因
Peter_Zheng:
用上位机的串口调试助手接收数据,看看数据是不是跟发的一样。
yffy:
可以先用上位机的串口调试助手看看,最好还是用一个8M的晶振那样会好点,不知你发不出去是怎么检测的,是不是和其它的单片机通讯?和其它的单片机通讯波特率的精度很重要。以前用串口和PC通信正常,但是就是和单片机通信不正常。
Lina Lian:
bin li1, 你的外部LFXT1接着多大的晶振?是32768Hz的还是其他的?你把MCLK, SMCLK从管脚引出来看看,究竟是多大。串口数据直接用串口调试助手看比较好。O(∩_∩)O~