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.

[参考译文] TMS320F280025C:RS485 上的 SCI-A 数据错误:TMS320F280025C 上只有 0x55 是正确的

Guru**** 2693465 points

Other Parts Discussed in Thread: TMS320F280025C

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1592211/tms320f280025c-sci-a-wrong-data-on-rs485-only-0x55-is-correct-on-tms320f280025c

器件型号: TMS320F280025C

我正在处理 TMS320F280025C 控制器。 我真的想.. 通过 RS485 (SN65HVD485) 驱动器使用 SCI 传输数据 并检查上接收到的数据 Docklight 软件。

在控制器和 Docklight 设置中、参数均为:  9600 波特率、无奇偶校验、1 个停止位

我正在使用的器件 GPIO2 作为 TXD GPIO3 作为 RXD
SYSCLK 为 100MHz

发送数据时 0x55 、Docklight 正确接收 0x55
但当我传输数据时 0x44 、Docklight 显示 0xD7
如果我传输任何其他值、接收到的数据总是错误的 仅正确接收 0x55 其他都不正确。

这是我的代码:

#include “f28x_project.h"</s>“

uint16_t 循环计数器= 0;

//函数原型
void initSCIAEchoback(void);
void transmitSCIAChar (uint16_t A);
void transmitSCIAMessage (unsigned char * msg);
void initSCIAFF(void );

//主要
void main (void)

  uint16_t ReceivedChar;
  无符号字符*msg;

  //初始化器件时钟和外设
  InitSysCtrl();

  //初始化 GPIO
  InitGpio();

  //对于本示例、仅初始化 SCI-A 端口的引脚。
  // GPIO_SetupPinMux ()-设置 GPxMUX1/2 和 GPyMUX1/2 寄存器位
  // GPIO_SetupPinOptions ()-设置 GPIO 的方向和配置
  //这些函数可在 F28X7x_gpio.c 文件中找到。
  GPIO_SetupPinMux (3、GPIO_MUX_CPU1、9); //请参阅数据表第 40 页... 9 取决于该图表
  GPIO_SetupPinOptions (3、GPIO_INPUT、GPIO_PULLUP);
  GPIO_SetupPinMux (2、GPIO_MUX_CPU1、9);
  GPIO_SetupPinOptions (2、GPIO_OUTPUT、GPIO_ASYNC);

  GPIO_SetupPinMux (7、GPIO_MUX_CPU1、0);
  GPIO_SetupPinOptions (7、GPIO_OUTPUT、GPIO_PushPull);

  //禁用 CPU 中断
  DINT;

  //将 PIE 控制寄存器初始化为其默认状态。
  //默认状态为禁用所有 PIE 中断并设置标志
  //已清除。
  InitPieCtrl();

  //禁用 CPU 中断并清除所有 CPU 中断标志
  IER = 0x0000;
  IFR = 0x0000;

  //使用指向 shell 中断的指针初始化 PIE 向量表
  //服务例程 (ISR)
  InitPieVectTable();

  循环计数器= 0;

  initSCIAEchoback();           //初始化 SCI 以进行回显

  GPIO_WritePin (7、1);//用于发送信号
  delay_US(10*50);     // 1s

  for(;;)
  {
    while (SciaRegs.SCIFFTX.bit.TXFFST!= 0){}
    SciaRegs.SCITXBUF.ALL = 0x55;

    delay_US(10*50);     // 1s
    循环计数器++;
  }
}

// initSCIAEchoback — 初始化 SCI-A 以进行回显
void initSCIAEchoback (void)

  //
  //注意:已打开 SCIA 外设的时钟
  //在 InitSysCtrl() 函数中
  //
  SciaRegs.SCICTL1.bit.SWRESET = 0;
  SciaRegs.SCICTL1.bit.SWRESET = 1;

  SciaRegs.SCICCR.ALL = 0x0007;      // 1 个停止位、 无环回
                      //无奇偶校验、8 个字符位、
                      //异步模式、空闲线协议
  SciaRegs.SCICTL1.all = 0x0003;      //启用 TX、RX、内部 SCICLK、
                      //禁用 RX ERR、SLEEP、TXWAKE
  SciaRegs.SCICTL2.all = 0x0003;
  // SciaRegs.SCICTL2.bit.TXINTENA = 1;
  SciaRegs.SCICTL2.bit.RXBKINTENA = 1;

  SciaRegs.SCIHBAUD.ALL = 0x0001;
  SciaRegs.SCILBAUD.ALL = 0x0045;

  SciaRegs.SCIFFTX.all = 0xE040;//0xE040     
  SciaRegs.SCIFFRX.all = 0x2044;//0x2044     
  SciaRegs.SCIFFCT.all = 0x0;

  SciaRegs.SCICTL1.all = 0x0023; //退出 SCI 复位
 // SciaRegs.SCIFFRX.bit.RXFIFORESET = 1;
}

 

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

    你好 sayali Pathak ,

    这是美国的感恩节周末、因此请预计响应会有所延迟。

    --
    此致、
    Jagadish。

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

    尊敬的 Sayali:

    我想知道这是否与小端字节序与大端字节序问题有关?

    如果您要发送 0xFF、我假设可以正确看到、因为前 4 位和后 4 位匹配。 Docklight 软件中是否有任何可帮助您更改此字节序的配置选项? 此外、您是否可以访问外部逻辑分析仪、它可以在其中对数据包进行范围化并进行动态解码?

    此致、

    彼得