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/MSP430FR2111:异步数据传输

Guru**** 2394295 points
Other Parts Discussed in Thread: MSP430G2533, MSP430FR2111

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/882505/ccs-msp430fr2111-asynchronous-data-transmission

器件型号:MSP430FR2111
主题中讨论的其他器件:MSP430G2533

工具/软件:Code Composer Studio

我有一个具有高电压电势电流测量点的电路板。 测量数据应传输到与接地电位相关的评估电子设备 
进行通信。 我必须​​非常快速地传输测量值。 我不会在发送器和接收器之间握手。
每次测量后、我将仅发送包含两个由电流测量产生的8位字的数据包。 传输中的错误
由评估电子产品中数据的合理性进行确认。 我现在尝试使用 MSP430FR2111设置一个简单的数据传输。 我使用引脚 P1.3进行传输。 我已经安排了以下广播节目。
但是、P1.3上没有数据!

我之前已选择在 P1.7的 stad 中使用 P1.3、因此我必须重新映射输出(SYSCFG3 |= 0x01;  //将输出 von P1.7更改为 P1.3)

尚未校准传输速率。 我必须在最终解决方案中使用更高的波特率。 实际配置来自用于测试光纤链路的其他测试设置。 在这里、我使用 MSP430G2533进行了测试。

#include
#include "msp430FR2111.h"

unsigned int dataen、n;                                     // 8位数据值

int main (空)

   WDTCTL = WDTPW | WDTHOLD;                              //停止看门狗计时器

   PM5CTL0 &=~LOCKLPM5;                                  //禁用 GPIO 上电高阻抗模式

// 时钟 setzen für 1MHz
   CSCTL0 = 0x40;                                         //DOC = 2  MOD = 0
   CSCTL1 = 0xC7;                                         //Rsel = 7
   CSCTL2 = 0x00;                                         // MCLK = DCO / 1;SMCLK = DCO / 1

// Port konfigurieren
   P1DIR = 0xFF;                                          // Alles ausgänge
   P1OUT &=~0xFF;                                        // Alle 端口 auf Null setzen

   UCA0CTLW0 |= UCSWRST;                                  // UART 复位
   UCA0CTLW0 |= 0x8880;                                   // 8位、奇数、UART、异步、SMCLK、 2停止
   UCA0CTLW1 |= 0x0003;                                   //去毛刺脉冲时间= 200ns
   UCA0BR0 = 8;                                           // 1MHz 115200
   UCA0BR1 = 0;                                           // 1MHz 115200
   UCA0MCTLW = UCBRS2 + UCBRS0;                           //调制 UCBRSx = 5
   SYSCFG3 |= 0x01;                                       //从 P1.7到 P1.3获取输出

   UCA0CTLW0 &=~UCSWRST;                                 //初始化 eUSCI


   while (1)
   {
       daten = 74;                                        //从测量程序传送

       N = 2;                                             //发送两个8位字

       while (n > 0)                                      //循环两个字节
       {
           UCA0TXBUF =数据和0x0F;                      //将8位放置在 TX 缓冲区中

           while (!(UCA0IFG & UCTXIFG));                   //等待缓冲区为空

           dataen = dataen >> 8;                            //上8位到下8位

           N--;                                           //转至下 一个字节进行发送
       }
   }


这是用于测试数据传输的测试程序。 在实际程序中、测量值的赋值取代值74的赋值。

您是否了解了我在程序中出现错误的地方? 您是否有一个非常简单的解决方案仅用于传输此类简单的单向数据?

感谢你的帮助。

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

    您需要使用 P1SEL 将 P1.3连接到 USCI (UCA0TXD)[参考数据表(SLASE78C)表6-34]:

    根据 数据表、> P1SEL0 |= BIT3;// P1.3作为 UCA0TXD 表6-34

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

    您好、Charles、

    除了 Bruce 的建议是正确的、我还建议您翻转 GPIO 指令序列

    // Port konfigurieren
       P1DIR = 0xFF;                                          // Alles ausgänge
       P1OUT &=~0xFF;                                        // Alle 端口 auf Null setzen

    首先配置 Pdir 可能会导致产生干扰、这可能会在 RX 侧产生问题。

    此致

    Peter

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

    您好、Charles、

    本主题还有其他内容吗、我们可以为您做些什么?

    此致

    Peter