我用的是F122单片机,下面是我的程序,串口调试助手一直收不到数据,电路用的max3232,用示波器测它的输出大概波形是有的,但是全是毛刺,好像噪声很大的样子。不知道是不是这个问题导致通信不成功。
#include
void USART_Send(unsigned int pData);
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
unsigned int i;
P2DIR |= BIT0; //P1.4 IO口设置为输出.
P2SEL |= BIT0; //P1.4 IO口设置为ACLK.
P1DIR |= BIT4; //P1.4 IO口设置为输出.
P1SEL |= BIT4; //P1.4 IO口设置为SMCLK.
BCSCTL1 &= ~XT2OFF; //开高速晶振
BCSCTL1 |= XTS; // ACLK = LFXT1 = HF模式
do
{
IFG1 &= ~OFIFG; // 清除振荡器失效标志
for(i = 0Xff;i > 0;i--); // 稳定时间
}
while((IFG1 & OFIFG) != 0); // 如果振荡器失效标志存在
BCSCTL2 |= SELM_2; //?MCLK主时钟选XT2为时钟源.XT2输入不分频.
BCSCTL2 |= SELS; //SMCLK选XT2为时钟源.(参考)
P3SEL |= 0x30; // P3.6,7 = USART1 TXD/RXD
ME2 |= UTXE0 + URXE0; // Enable USART1 TXD/RXD
UCTL0 |= CHAR; // 8-bit character
UTCTL0 |= SSEL1; // UCLK = SMCLK
U0BR0 = 0x41; // 8M/9600 -
U0BR1 = 0x03; //
UMCTL0 = 0x12; // Modulation
UCTL0 &= ~SWRST; // Initialize USART state machine
IE2 |= URXIE0; // Enable USART1 RX interrupt
_EINT(); // 不要忘了开中断
while(1)
{
USART_Send(0xaa);
}
//_BIS_SR(LPM3_bits + GIE); // Enter LPM3 w/ interrupt
}
void USART_Send(unsigned int pData)
{
TXBUF0 = pData; // 装入发送寄存器
while ((IFG2 & UTXIFG0) == 0); // 判断:发送是否完成
IFG2 &= ~(UTXIFG0);
}
#pragma vector=USART0RX_VECTOR
__interrupt void usart1_rx (void)
{
while (!(IFG2 & UTXIFG0)); // USART1 TX buffer ready?
TXBUF0 = RXBUF0; // RXBUF1 to TXBUF1
}
毛刺是电容没焊好,现在没有毛刺了,但是串口调试助手还是收不到东西。