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.

[参考译文] CCS/MSP430FR2433:MSP430FR2433

Guru**** 2540720 points
Other Parts Discussed in Thread: MSP430FR2433

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/799672/ccs-msp430fr2433-msp430fr2433

器件型号:MSP430FR2433

工具/软件: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;  }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Jessica:

    首先、在您的第86行'while (1);'上设置断点、然后重新启动代码、查看代码是否卡在此陷阱中。

    接下来、断开 TP4与 TP5的连接。 测量 TP4和 TP5上的电压。 你看到什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Dennis:

    感谢您的回答。

    在代码中、我无法到达#86、因为当它进入 LPM0模式时、我在 ligne #63处停止。

    TP4和 TP5的电压为3.3V

    Jessica
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Jessica:

    请尝试以下操作:
    1.在进入 while 循环前设置 GIE。
    2.进入低功耗模式时只置位 LPM0位

    下面是代码片段:

    UCA1IE |= UCRXIE; //启用 USCI_A0 RX 中断
    _bis_SR_register (GIE);

    while (1)

    while (!(UCA1IFG & UCTXIFG));
    UCA1TXBUF = TXData; //将数据加载到缓冲区中
    _bis_SR_register (LPM0_bits); //输入 LPM0
    __no_operation(); //用于调试器


    我在硬件上进行了测试、工作正常。
    如果您仍有问题、请告诉我。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Dennis:

    它现在正在工作、谢谢。