主题中讨论的其他器件: MSP430I2021、 MSP430I2040
工具/软件:Code Composer Studio
我在一组电路板上使用 MSP430F5342芯片、并且之前编写了包含 UART 通信的代码。 电路板将通过 UART 从我的计算机接收命令、这将指示电路板开始将传感器数据发送回计算机。 我已经测试了代码、它运行得很好。 然后、我重新排列了一些代码、并以不同的名称保存了项目。 我一个月左右没有触摸板。
当我最近下载代码时、我注意到 UART 通信不再触发。 修改代码以跳过 UART 接收检查并直接跳转到发送中后、我注意到电路板的发送工作正常。 然后、我将代码恢复为以前确认工作正常的版本、接收仍然无法正常工作。 然后、我尝试了简单 UART 回显的示例代码(发布在下面)、但仍然无法正常工作。
我已经使用两个不同的 FET 编程器和 FTDI 线缆在4个不同的电路板上测试了这些代码版本。 我还检查了电缆的导通性、因此我很确定这不是硬件问题。 我想知道什么可能会阻止 UART 接收功能的正常运行。 我已经尝试调试代码和设置断点、并单步执行代码/监控寄存器、但 RX 缓冲区和标志永远不会注册任何数据。
我在 MSP430i2021电路板未正常工作之前遇到了问题、结果我需要包含 low_level_init.c 来执行_system_pre_init 函数。 但是、在 F5342的示例代码中、我没有看到任何类似这样的其他文件。 我想知道是否有任何代码可用于复位阻止 UART 正常工作的任何代码。 非常感谢您的任何建议!
谢谢、
John
#include int main (void) { WDTCTL = WDTPW + WDTHOLD; //停止 WDT P3SEL |= BIT3+BIT4; // P3.3、4 = USCI_A0 TXD/RXD UCA0CTL1 |= UCSWRST; //**将状态机复位** UCA0CTL1 |= UCSSEL_2; // SMCLK UCA0BR0 = 9; // 1MHz 115200 (请参阅用户指南) UCA0BR1 = 0; // 1MHz 115200 UCA0MCTL |= UCBRS_1 + UCBRF_0; //调制 UCBRSx=1、UCBRFx=0 UCA0CTL1 &=~Ω UCSWRST; //**初始化 USCI 状态机** UCA0IE |= UCRXIE; //启用 USCI_A0 RX 中断 __bis_SR_register (LPM0_bits + GIE); //输入 LPM0,启用中断 _no_operation (); //对于调试 器} //回显 RXed 字符,确认 TX 缓冲区已准备就绪#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__) #pragma vector=USCI_A0_vector __interrupt void USCI_A0_ISR (void) #Elif defined (__GNC_ISR_)( void )#USCI_A0 (void)(void USCI_0_A0)(void)(void)(void)#USCI_ISR (void) #endif { switch (__even_in_range (UCA0IV、4)) { case 0:break; //向量0 -无中断 情况2: //向量2 - RXIFG while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX 缓冲器就绪? UCA0TXBUF = UCA0RXBUF; // TX -> RXed 字符 中断; 案例4:中断; //向量4 - TXIFG 默认值:break; }