最近用msp430f2272写一个uart的通信,波特率配置正确了,可以发送,可以接收,但是当我使能了接收中断的时候,才发现发送数据时的数据居然更新了接收缓存器里的内容,导致了我每发送一个数据就进一次接收中断,我也在仿真时检查过我的寄存器配置,在寄存器USCI_Ax_Status 中的位UCLISTEN = 0;根本就没开监听模式,求解!!!
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.
最近用msp430f2272写一个uart的通信,波特率配置正确了,可以发送,可以接收,但是当我使能了接收中断的时候,才发现发送数据时的数据居然更新了接收缓存器里的内容,导致了我每发送一个数据就进一次接收中断,我也在仿真时检查过我的寄存器配置,在寄存器USCI_Ax_Status 中的位UCLISTEN = 0;根本就没开监听模式,求解!!!
楼主,
请参考如下代码:
#include <msp430.h>
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
if (CALBC1_1MHZ==0xFF) // If calibration constant erased
{
while(1); // do not load, trap CPU!!
}
DCOCTL = 0; // Select lowest DCOx and MODx settings
BCSCTL1 = CALBC1_1MHZ; // Set DCO
DCOCTL = CALDCO_1MHZ;
P3SEL = 0x30; // P3.4,5 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 8; // 1MHz 115200
UCA0BR1 = 0; // 1MHz 115200
UCA0MCTL = UCBRS2 + UCBRS0; // Modulation UCBRSx = 5
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
}
// Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = UCA0RXBUF; // TX -> RXed character
}
你好,
我把上述你给的程序编译了一遍,下载到板子上,通过PC机的串口助手进行调试,用串口助手发送一字节数据到mcu,数据是可以发成功的,但是muc收到数据后却一直把接收到的数据发送出去,也就是说,接收中断不断的进入,而UCA0TXBUF = UCA0RXBUF;已经把接收中断标志位清零了,所以得到的结论是mcu发送数据的时候把接收缓冲器里的内容更新了,导致接收中断的不断产生
你好,
我把上述你给的程序编译了一遍,下载到板子上,通过PC机的串口助手进行调试,用串口助手发送一字节数据到mcu,数据是可以发成功的,但是muc收到数据后却一直把接收到的数据发送出去,也就是说,接收中断不断的进入,而UCA0TXBUF = UCA0RXBUF;已经把接收中断标志位清零了,所以得到的结论是mcu发送数据的时候把接收缓冲器里的内容更新了,导致接收中断的不断产生
你好,
上面的代码应该不会出现你说的那种情况。你的板子是开发板还是自己做的?建议用示波器观察RXD脚,看看是否是该脚上存在低电平触发了接收中断。
你好,
板子是自己做的,但是我个人认为这应该不关板子的事吧,我先用示波器看看Rx脚是否有低电平产生,谢谢了
你好,
串口调试助手是不断发0x55吗?如果是这样的话确实会不断进入接收中断的,如果串口调试助手只发一个字节的话就只会进一次中断了。另外示波器黄色波形是430的TX脚吗?
不是,串口助手我只发了一次0x55,其他都是芯片直发进行的,黄色是Rx引脚
不是,串口助手我只发了一次0x55,其他都是芯片自发进行的,黄色是Rx引脚
你好,
不好意思,回复晚了。
从波形上看,TX脚的波形可以认为是430发出的,但是Rx脚是输入脚,就算是接收缓冲被错误写入了数值,触发了接收中断,430也不会在这个脚上输出波形的,所以我认为应该还是外部在这个脚上产生了黄色的波形,触发了430的接收中断。