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.

在XP下使用 IAR平台 msp430afe221遇到的 串口发送问题

Other Parts Discussed in Thread: MSP430AFE221

对照用MSP430AFE221的户手册编写一个串口的发送程序
调试了几个星期P1.3串口的发送端没有任何数据,也怀疑过自己的程序和设计电路出问题,但是请教多名430

工程师都没有发现UART配置有何问题,有人建议说是刚出芯片的前几批可能会存在一些问题,所以想来问下这

款芯片的串口是否还存在一些问题,以下有部分程序代码:

现象:用示波器观察P1.3口,一直为高电平,没有数据从中发送出来
部分程序源代码:
//时钟模块选择XT2
void Clk_Init(void)
{
    uint i;
    P2SEL |= BIT6 + BIT7;                       //P2.6、P2.7为外部时钟引脚
    BCSCTL1 &= ~XT2OFF ;                       //启用XT2
    do
    {
        IFG1 &= ~OFIFG;                       // Clear OSCFault flag
        for (i = 0xFF; i > 0; i--);         // Time for flag to set
    }
    while ((IFG1 & OFIFG));                   // OSCFault flag still set?              
    BCSCTL2 |= SELM_2 + SELS ;                 //MCLK=SMCLK=XT2; 选择主从时钟源
    BCSCTL3 |=BIT8; //  XT2范围选择 3-16M
}


//按照用户手册和MSP430AFE221.H文件进行配置的 UART
void  Uart_Init(void)
{
   
    U0CTL = SWRST;
    U0CTL |= CHAR ;//8-BIT
    U0TCTL |=SSEL1; //SSEL1 ;//UCLK = SMCLK 串口波特率的时钟源
    U0BR0 = 0x0A;    //12000 000 / 600 =0X4E20
    U0BR1 = 0x1A;
    U0MCTL = 0x00;
    ME1 |=UTXE0 + URXE0;//ENABLE R&T
    U0CTL &= ~SWRST;//先设置SWRST为1 ,然后取反  默认为1
    IE1 |= UTXIE0 + URXIE0; 
    P1SEL |=BIT3 + BIT4; //选择TXD /RXD功能
    P1DIR |=BIT3;//发送设置为输出
    _EINT(); //开总中断
//    IE1 |=URXIE0 ;   
}

//发送数据采用查询中断,并用P1.1引脚连接LED进行闪烁指示
各种初始化;
while(1)//查询中断。LED闪烁
{
 while(!(IFG1 & UTXIIFG0))
 TXBUF0 = 0X41;
        P1OUT ^=BIT1;
        Delay_ms(500);
}

  • 串口通讯的调试是个细致活,有很多原因可能导致通信失败,首先我不认同新片子出来有问题的说法,这种东西出来不是说一天两天的,即便有问题最多是性能上的,绝对不会出现在功能上,因为串口调的比较多,在这分享下方法:

    1、首先当然应该对照手册确定自己的串口模块程序编写是否有问题;

    2、确定串口通信成功与否的判定依据,我们一般都是通过电脑的USB或者232串口转成兼容3.3VTTL信号,与单片机UART相连,然后利用串口调试助手一类的工具进行调试,这就需要我们先要确定PC端的串口软硬件是否都是正常的,可以将与单片机UART相连端的TX和RX短接,之后PC端串口调试助手发送数据,看是否能正确收到所发的数据,如不能收到应排除问题后继续;

    3、将单片机UART相应的两个IO配置成通用IO,测试能否控制其输出,能否正确读到加在这两个管脚上的电平,以确定这两个管脚是否损坏;

    4、通过定时器判定晶振是否异常,系统时钟是否为设定频率,因为有的时候你可能使用了错误的时钟源配置串口的波特率;

    5、单片机接收中断中设置断点,检测能否接收到PC端发来的数据,若能接收到则有理由相信UART模块工作是正常,再仔细看看程序;

  • 楼主,

    benben野人说的很有道理!请按照benben野人的建议进行逐步检查。另外在TI官网上有基于MSP430afe221的code example, 你可以上去下载参考。链接如下,software部分:

    http://www.ti.com/product/msp430afe221

    另外附件就是其中关于UART的,希望对你有帮助!O(∩_∩)O~