工具/软件:Code Composer Studio
我正在尝试测试 MSP430FR2433和 RN4020 (使用 UART 的蓝牙模块)之间的 UART 通信。
我使用来自 CCS 的代码示例、其中连接了 TX 和 RX。 我用示波器查看 RX TX、但不会附加任何内容。 将 TP4与 TP5连接后、我将示波器放在 TP4上。
使用的代码为:
// // MSP430FR24xx 演示- USCI_A0外部环回测试@ 115200波特 // 说明:此演示将 TX 连接到 MSP430 UART 的 RX //示例代码显示了寄存器的正确初始化 //以及接收和发送数据的中断。 如果数据不正确、则 P1.0指示灯亮起 //。 // ACLK = n/a、MCLK = SMCLK = BRCLK = DCODIV ~1MHz。 // // MSP430FR2433 // -------- // /|\| | // || | // -|RST | // | | // | | // | P1.4/UCA0TXD|--- // | || // | P1.5/UCA0RXD|-- // | | // | P1.0 |->LED // | | // Ling Zhu // Texas Instruments Inc. // 2015年7月 //使用 IAR 嵌入式工作平台 v6.20和 Code Composer Studio v6.0.1构建 //************ #include unsigned char RXData = 0; unsigned char TXData = 1; int main (void) { WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器 PM5CTL0 &=~LOCKLPM5; //禁用 GPIO 上电默认高阻抗模式 //激活先前配置的端口设置 P1DIR |= BIT0; P1OUT &=~BIT0; // P1.0输出低电平 /RX/TX P2SEL1 &=~(BIT5 | BIT6); // USCI_A1 UART TX/RX P2SEL0 |= BIT5 | BIT6; //配置 UART UCA1CTLW0 |= UCSWRST; //将 eUSCI 置于复位状态 UCA1CTLW0 |= UCSSEL_SMCLK; //波特率计算 UCA1BR0 = 8; // 1000000/115200 = 8.68 UCA1MCTLW = 0xD600; // 1000000/115200 - INT (1000000/115200)=0.68 // UCBRSx 值= 0xD6 (请参阅 UG) UCA1BR1 = 0; UCA1CTLW0 &=~UCSWRST; //初始化 eUSCI UCA1IE |= UCRXIE; //启用 USCI_A0 RX 中断 while (1) { while (!(UCA1IFG & UCTXIFG)); UCA1TXBUF = TXData; //将数据加载到缓冲区中 _bis_SR_register (LPM0_bits|GIE); //输入 LPM0 __no_operation(); //对于调试器 } } #if defined (__TI_Compiler_version__)|| defined (__IAR_systems_icc_) #pragma vector=USCI_A1_vector __interrupt void USCI_A1_ISR (void) #Elif defined (__GNU__) void __attribute__(interrupt (USCI_SCI_vector))#USCI_A1 Compiler (void USCI_vector))(void #USCI_a1_a1_vector)(void USCI_a1_a1_a1) #endif { switch (__evo_in_range (UCA1IV、USCI_UART_UCTXCPTIFG)) { USCI_NONE 案例:中断; USCI_UART_UCRXIFG 案例: UCA1IFG &=~ UCRXIFG; //清除中断 RXData = UCA1RXBUF; //清除缓冲区 if (RXData!= TXData) //检查值 { P1OUT |= BIT0; //如果不正确,打开 P1.0 while (1); //陷阱 CPU } TXData++; //递增数据字节 _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//在 TI 上退出 LPM0 中断; 案例 USCI_UART_UCTXIFG:中断; 案例 USCI_UART_UCSTTIFG:中断; 案例 USCI_UART_UCTXCPTIFG:break; } }
// // MSP430FR24xx 演示- USCI_A0外部环回测试@ 115200波特// 说明:此演示将 TX 连接到 MSP430 UART//的 RX 示例代码显示了寄存器//的正确初始化 以及接收和发送数据的中断。 如果数据不正确、则 P1.0 LED 为// 打开。// ACLK = n/a、MCLK = SMCLK = BRCLK = DCODIV ~1MHz。// MSP430FR2433// -------- // /|\| |// || |// -|RST |// | |// | |// | P1.4/UCA0TXD|-/ | | |// | P1.5/UCA0RXD|-/ | |// | P1.0 |->LED// | |
// Zing Zhu // Texas Instruments Inc.// 2015年7月// 使用 IAR Embedded Workbench v6.20和 Code Composer Studio v6.0.1构建 #include
unsigned char RXData = 0;unsigned char TXData = 1;
int main (void){ WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
PM5CTL0 &=~LOCKLPM5; //禁用 GPIO 上电默认高阻抗模式 //激活先前配置的端口设置 P1DIR |= BIT0; P1OUT &=~BIT0; // P1.0输出低电平
//RX/TX P2SEL1 &=~(BIT5 | BIT6); // USCI_A1 UART TX/RX P2SEL0 |= BIT5 | BIT6;
//配置 UART UCA1CTLW0 |= UCSWRST; //将 eUSCI 置于复位 UCA1CTLW0 |= UCSSEL_SMCLK; //波特率计算 UCA1BR0 = 8; // 1000000/115200 = 8.68 UCA1MCTLW = 0xD600; // 1000000/115200 - INT (1000000/115200)=0.68 // UCBRSx 值= 0xD6 (参见 UG) UCA1BR1 = 0; UCA1CTLW0 &=~UCSWRST; //初始化 eUSCI UCA1IE |= UCRXIE; //启用 USCI_A0 RX 中断
while (1) { while (!(UCA1IFG & UCTXIFG)); UCA1TXBUF = TXData; //将数据加载到缓冲区中
_bis_SR_register (LPM0_bits|GIE); //输入 LPM0 __no_operation(); //对于调试器 }
#if defined (__TI_Compiler_version__)|| defined (__IAR_systems_icc_)#pragma vector=USCI_A1_vector_interrupt void USCI_A1_ISR (void)#Elif defined (__GNU_) void __attribute__(interrupt (USCI_A1_vector) void USCI_A1_USCI_A1_ISR (void)#UCA1UCI_UCI_UCI_UCI_UCI_UCI_UCI_INTRIGGERSIFER= )(void))#UCA1UCI_UCI_UCI_UCI_UCI_INTRIF_ USCI_NONE 案例:中断; USCI_UART_UCRXIFG 案例: UCA1IFG &=~ UCRXIFG; //清除中断 RXData = UCA1RXBUF; //清除缓冲区 if (RXData!= TXData) //检查值 { P1OUT |= BIT0; //如果不正确,打开 P1.0 while (1); //陷阱 CPU } TXData++; //递增数据字节 _BIC_SR_REGISTER_ON_EXIT (LPM0_BITS);//在 TI 上退出 LPM0 中断; 案例 USCI_UART_UCTXIFG:中断; 案例 USCI_UART_UCSTTIFG:中断; 案例 USCI_UART_UCTXCPTIFG:break; }
