打印

关于MSP430FR4133串口收发数据的问题请教

[复制链接]
2731|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ytjzhjun|  楼主 | 2017-11-1 16:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    最近在用MSP430FR4133做一个项目,用到串行通信接口A (eUSCI_A)串口收发数据。主频设置为1MHz,串口通讯2400,E,8,1。具体问题如下:
    1、使用中断的方式接收数据,一直很正常;
    2、使用查询的方式发送数据,一直正常;但使用中断的方式发送数据,当刚上电开机后发送第一帧数据(约30字节)正常,但之后再发送则失败,在线跟踪发现失败原因是发送数据不能进入中断。

相关部分代码如下,请大神帮忙分析一下:
a、串口初始化
void USCIA0_UART1_Init(void)
{
        PM5CTL0 &= ~LOCKLPM5;
        // Configure UART pins  
        P1SEL0 |= BIT0 | BIT1;           // set 2-UART pin as second function  
        // Configure UART  
        UCA0CTLW0 = UCSWRST;  
        UCA0CTLW0 |= UCPEN + UCPAR + UCSSEL_3;        //设置成UART模式,8位偶校验1停止位,
        //下面参数设置波特率为2400.
        UCA0BR0 = 27;           
        UCA0BR1 = 0x00;  
        UCA0MCTLW = 0xfb00 | UCOS16 | UCBRF_4;

        UCA0CTLW0 &= ~UCSWRST;                    // Initialize eUSCI  
        UCA0IE |= UCRXIE;                         // Enable USCI_A0 RX interrupt
        UCA0IE &= ~(UCTXIE);

        //485方向控制管脚P5.7 初始化
        P5DIR |= BIT7;               
        P5OUT &= ~BIT7;  //初始化为接收方向。       
}


b、中断处理函数
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
        uint8 lu8data = 0;       
        switch(__even_in_range(UCA0IV,USCI_UART_UCTXCPTIFG)){             
                case USCI_NONE:
                        break;                                
                case USCI_UART_UCRXIFG:                                                         
                        lu8data = (uint8)UCA0RXBUF;
                        //省略入队列的处理               
                        break;       
                case USCI_UART_UCTXIFG:
                        UCA0IFG &=~(UCTXIFG);
                       
                        if(TxBytesCnt < TxBytesNum){
                                UCA0TXBUF = Usart1TxBuf[TxBytesCnt++];
                        }
                        else{
                                UCA0IE &= ~(UCTXIE);  // disable USCI_A0 TX interrupt
                                delay_ms(2);
                                //设置485接收方向。
                                P5OUT &= ~BIT7;  //切换为接收方向。                       
                        }                       
                        break;                       
                case USCI_UART_UCSTTIFG:
                        break;            
                case USCI_UART_UCTXCPTIFG:
                        break;            
                default:
                        break;                       
        }
}


c、发送数据的处理,在这里使能发送中断,将其他地方准备好的数据  在以上的中断处理函数中发送。
void Uart1Data_Send(void)
{
        P5OUT |= BIT7;  //发送方向
        delay_ms(2);
        UCA0IE |= (UCTXIE);
}


    谢谢。


相关帖子

沙发
minzisc| | 2017-11-1 22:26 | 只看该作者
本帖最后由 minzisc 于 2017-11-1 22:29 编辑

这个是不是影响电源了?

使用特权

评论回复
板凳
selongli| | 2017-11-1 22:27 | 只看该作者
硬件电路有问题吗

使用特权

评论回复
地板
fentianyou| | 2017-11-1 22:29 | 只看该作者
楼主的硬件电路图看看。

使用特权

评论回复
5
minzisc| | 2017-11-1 22:29 | 只看该作者
msp430的电压是否稳定?

使用特权

评论回复
6
fentianyou| | 2017-11-1 22:30 | 只看该作者
如果信号正常,则可能是硬件的问题。

使用特权

评论回复
7
fentianyou| | 2017-11-1 22:34 | 只看该作者
楼主的串口通信电路怎么设计的?

使用特权

评论回复
8
selongli| | 2017-11-1 22:34 | 只看该作者
测量IO的电平信号了吗?

使用特权

评论回复
9
dirtwillfly| | 2017-11-1 22:35 | 只看该作者
没看懂你为什么要在中断服务程序里失能发送中断,并且延时两秒。我觉得问题出在这里

使用特权

评论回复
10
dirtwillfly| | 2017-11-1 22:36 | 只看该作者
没看懂你为什么要在中断服务程序里失能发送中断,并且延时两秒。我觉得问题出在这里

使用特权

评论回复
11
ytjzhjun|  楼主 | 2017-11-2 08:19 | 只看该作者
dirtwillfly 发表于 2017-11-1 22:36
没看懂你为什么要在中断服务程序里失能发送中断,并且延时两秒。我觉得问题出在这里 ...

中断发送,数据全发完后在中断里关闭发送中断是可以的吧?
为了保证最后一个字节发送完,延时了2个毫秒,之后切换485总线为接收方向。
你说的这个情况我试验过,确定不是这里原因。

使用特权

评论回复
12
ytjzhjun|  楼主 | 2017-11-2 08:21 | 只看该作者
selongli 发表于 2017-11-1 22:34
测量IO的电平信号了吗?

示波器看波形质量良好。

使用特权

评论回复
13
ytjzhjun|  楼主 | 2017-11-2 08:23 | 只看该作者
minzisc 发表于 2017-11-1 22:29
msp430的电压是否稳定?

电源质量是首先要保证的,电压稳定,且系统简单,没有大功率器件。

使用特权

评论回复
14
ytjzhjun|  楼主 | 2017-11-2 08:25 | 只看该作者
minzisc 发表于 2017-11-1 22:26
这个是不是影响电源了?

影响电源了?示波器观察电源是稳定的呀。
我试验过,虽然不能进中断发送了,但查询发送还是正常的,系统没有跑飞。

使用特权

评论回复
15
qinlicn| | 2017-11-2 10:16 | 只看该作者
ytjzhjun 发表于 2017-11-2 08:25
影响电源了?示波器观察电源是稳定的呀。
我试验过,虽然不能进中断发送了,但查询发送还是正常的,系统 ...

仿真看一下进不了中断时的UART各寄存器值

使用特权

评论回复
16
h286288986| | 2017-11-3 13:18 | 只看该作者
我只是看看,不说话---

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:凡事都要坚持,因为你是个男人!

235

主题

309

帖子

1

粉丝