工具/软件:Code Composer Studio
Howdy、我尝试在 MSP430FR2311上使用 UART、但在 RX 中断方面遇到了一些困难。 因为它不工作。 将 UART RX (P1.6)和 TX (P1.7)绑定在一起、在 Launchpad 上测试此情况。
UART RX ISR 内的 LED 有一个切换、该切换应显示 ISR 何时关闭、但 LED 永远不会切换。 任何建议都是有益的。
//includes #include //设置全局变量 unsigned char RXData = 0;//对于 UART 测试 unsigned char TXData = 1;//对于 UART 测试 //列出函数 void ConfigUART (void); //主 int main (void){ WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器 PM5CTL0 &=~LOCKLPM5; //禁用 GPIO 上电默认高阻抗模式 //设置 LED 引脚 P1OUT &=~BIT0; //清除已定义加电状态的 P1.0输出锁存器 P1DIR |= BIT0; //将 P1.0设置为输出方向 //调用配置函数 ConfigUART(); _EINT(); //启用全局中断 while (1) { while (!(UCA0IFG & UCTXIFG)); UCA0TXBUF = TXData; //将数据加载到缓冲 区} void ConfigUART (void){ //配置 UART 引脚 P1SEL0 |= BIT6; //设置 UART 引脚 P1SEL0 |= BIT7; P1SEL1 |= BIT6; P1SEL1 |= BIT7; P1DIR |= BIT7; P1DIR &=~BIT6; //配置 UART UCA0CTLW0 |= UCSWRST; //将 eUSCI 置于复位状态 UCA0CTLW0 |= UCSSEL_SMCLK; //选择时钟 UCA0CTLW0 &=~UCPEN + UC7BIT + UCSYNC + UCMSB; UCA0CTLW0 |= UCSPB; //波特率计算 UCA0BR0 = 8; // 1000000/115200 = 8.68 UCA0MCTLW = 0xD600; // 1000000/115200 - INT (1000000/115200)=0.68 // UCBRSx 值= 0xD6 (请参阅 UG) UCA0BR1=0; UCA0CTLW0 &=~UCSWRST; //初始化 eUSCI,摆脱复位 UCA0IE |= UCRXIE; //启用 USCI_A0 RX 中断 } // UART ISR #pragma vector=USCI_A0_vector __interrupt void USCI_A0_ISR (void) { switch (__evo_in_range (UCA0IV、USCI_UART_UCTXCPTIFG)) { USCI_NONE 案例:中断; USCI_UART_UCRXIFG 案例: P1OUT ^= BIT0; //切换 LED 以查看中断是否正常工作 UCA0IFG &=~ UCRXIFG; //清除中断 RXData = UCA0RXBUF; //清除缓冲区 _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//在 TI 上退出 LPM0 中断; 案例 USCI_UART_UCTXIFG:中断; 案例 USCI_UART_UCSTTIFG:中断; 案例 USCI_UART_UCTXCPTIFG:break; } }